PDOException:

Résolu
clement62910 Messages postés 46 Statut Membre -  
clement62910 Messages postés 46 Statut Membre -
Bonjour,
Voila mon erreur :

Mon code source :


<?php

session_start();

if(isset($_SESSION["username"])){
if(isset($_GET["action"])){
if($_GET["action"]=="add"){


if(isset($_POST["submit"])){

$title=$_POST["title"];
$description=$_POST["description"];
$price=$_POST["price"];

if($title&&$description&&$price){

try
{
$db = new PDO("mysql:host=localhost;dbname=jevend-jachete","root","");
$db->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(Exception $e){

echo"Une erreur est survenue !";
die();

}

$insert = $db->prepare("INSERT INTO products VALUES('',$title','$description','$price')");
$insert->execute();

}else{

echo"Veuillez remplir tous les champs!";
}

}


?>



<form action="" method="post">
<h3>Titre:</h3><input type="text" name="title"/>
<h3>Description:</h3><input type="text" name="description"/>
<h3>Prix:</h3><input type="text" name="price"/>

<input type="submit" name="submit"/>
</form>
<?php

}else if ($_GET["action"]=="modify"){

}else if ($_GET["action"=="delete"]);


else{

die("Une erreur s'est produite!");


}
}else{



}
}else{
header("location:../index.php");

}

?>
 <link href="../style/bootstrap.css" type="text/css" rel="stylesheet">
<h1>Bienvenue : <?php echo $_SESSION["username"]; ?></h1>
<br/>
<a href="?action=add">Ajouter</a>
<a href="?action=modify">Modifier</a>
<a href="?action=delete">Supprimer</a>


Ligne 32 :
$insert->execute();


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.

4 réponses

  1. ElementW Messages postés 5690 Statut Contributeur 1 293
     
    'lut
    Emballes ton
    $insert->execute();
    dans un bloc
    try
    /
    catch(PDOException &e) { echo "PDOException: " . $e->getMessage(); exit(); }
    Pour savoir ce qui ne va pas.

    Par ailleurs
    $insert = $db->prepare("INSERT INTO products VALUES('',$title','$description','$price')"); 
    Non de non de NON de NON! On insère JAMAIS du texte directement dans une requête préparée, c'est justement pour ça qu'elle est préparée! Remplace ces lignes par
    $insert = $db->prepare("INSERT INTO products VALUES('',:title,:description,:price)");
    $insert->execute([
      ':title' => $title,
      ':description' => $description,
      ':price' => $price
    ]); 
    car dans ton cas, vu que les strings insérés viennent directement de l'utilisateur, tu te rends sujet aux injections SQL, allant de l'ajout supplémentaire de lignes dans ta table à la destruction totale de l'intégralité de ta base de données. À bon entendeur.
    from human import idiocy
    del idiocy
    0
    1. clement62910 Messages postés 46 Statut Membre 12
       
      $insert = $db->prepare("INSERT INTO products VALUES('',:title,:description,:price)");
      $insert->execute([
      ':title' => $title,
      ':description' => $description,
      ':price' => $price
      ]);


      J'ai mis sa mais maintenet j'ai cette erreur :

      Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'id' at row 1' in C:\wamp64\www\Site\admin\admin.php on line 34


      PDOException: SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'id' at row 1 in C:\wamp64\www\Site\admin\admin.php on line 34
      0
      1. ElementW Messages postés 5690 Statut Contributeur 1 293 > clement62910 Messages postés 46 Statut Membre
         
        Si tu lisais le message de l'exception, peut-être que tu comprendrais ton erreur...
        0
    2. clement62910 Messages postés 46 Statut Membre 12
       
      ??? je comprent pas l'exeption
      Fatal error: in C:\wamp64\www\Site\admin\admin.php on line 32
      PDOException: in C:\wamp64\www\Site\admin\admin.php on line 32

      # Time Memory Function Location
      1 0.0003 252800 {main}( ) ...\admin.php:0

      2 0.0022 262952 execute ( ) ...\admin.php:32


      le code source :

      <?php
      
      session_start();
      
      if(isset($_SESSION["username"])){
      if(isset($_GET["action"])){
      if($_GET["action"]=="add"){
      
      
      if(isset($_POST["submit"])){
      
      $title=$_POST["title"];
      $description=$_POST["description"];
      $price=$_POST["price"];
      
      if($title&&$description&&$price){
      
      try
      {
      $db = new PDO("mysql:host=localhost;dbname=jevend-jachete","root","");
      $db->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER);
      $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      }
      catch(Exception $e){
      
      echo"Une erreur est survenue !";
      die();
      
      }
      
      $insert = $db->prepare("INSERT INTO products VALUES('',$title','$description','$price')");
      $insert->execute();
      
      }else{
      
      echo"Veuillez remplir tous les champs!";
      }
      
      }
      
      
      ?>
      
      
      
      <form action="" method="post">
      <h3>Titre:</h3><input type="text" name="title"/>
      <h3>Description:</h3><input type="text" name="description"/>
      <h3>Prix:</h3><input type="text" name="price"/>
      
      <input type="submit" name="submit"/>
      </form>
      <?php
      
      }else if ($_GET["action"]=="modify"){
      
      }else if ($_GET["action"=="delete"]);
      
      
      else{
      
      die("Une erreur s'est produite!");
      
      
      }
      }else{
      
      
      
      }
      }else{
      header("location:../index.php");
      
      }
      
      ?>
       <link href="../style/bootstrap.css" type="text/css" rel="stylesheet">
      <h1>Bienvenue : <?php echo $_SESSION["username"]; ?></h1>
      <br/>
      <a href="?action=add">Ajouter</a>
      <a href="?action=modify">Modifier</a>
      <a href="?action=delete">Supprimer</a>
      


      EDIT : Ajout des balises de code (la coloration syntaxique).
      Explications disponibles ici :ICI

      Merci d'y penser dans tes prochains messages.
      0
      1. ElementW Messages postés 5690 Statut Contributeur 1 293 > clement62910 Messages postés 46 Statut Membre
         
        Il va bien falloir la comprendre...
        En français ça donne:
        PDOException: SQLSTATE[HY000]: Erreur générale 1366 Valeur entière incorrecte: '' pour la colonne 'id' à la l'enregistrement 1 dans C:\wamp64\www\Site\admin\admin.php ligne 34

        Un problème avec un paramètre de ta requête, non ? Je te laisse la trouver, c'est d'une évidence frappante.
        0
    3. clement62910 Messages postés 46 Statut Membre 12
       
      Oui mais l'id est cencé ce mettre en aleatoire par a port a l'id davent ex

      Prix ID Titre
      15 1 tstid
      13 2 tstid

      Voila ID consecutif 1,2,3,4,5,6,7,8,9,10,11 etc....


      Le source :
      <?php

      session_start();

      if(isset($_SESSION["username"])){
      if(isset($_GET["action"])){
      if($_GET["action"]=="add"){


      if(isset($_POST["submit"])){

      $title=$_POST["title"];
      $description=$_POST["description"];
      $price=$_POST["price"];

      if($title&&$description&&$price){

      try
      {
      $db = new PDO("mysql:host=localhost;dbname=jevend-jachete","root","");
      $db->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER);
      $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      }
      catch(Exception $e){

      echo"Une erreur est survenue !";
      die();

      }

      $insert = $db->prepare("INSERT INTO products VALUES('','$title','$description','$price')");
      $insert->execute();

      }else{

      echo"Veuillez remplir tous les champs!";
      }

      }


      ?>



      <form action="" method="post">
      <h3>Titre:</h3><input type="text" name="title"/>
      <h3>Description:</h3><input type="text" name="description"/>
      <h3>Prix:</h3><input type="text" name="price"/>

      <input type="submit" name="submit"/>
      </form>
      <?php

      }else if ($_GET["action"]=="modify"){

      }else if ($_GET["action"=="delete"]);


      else{

      die("Une erreur s'est produite!");


      }
      }else{



      }
      }else{
      header("location:../index.php");

      }

      ?>
      <link href="../style/bootstrap.css" type="text/css" rel="stylesheet">
      <h1>Bienvenue : <?php echo $_SESSION["username"]; ?></h1>
      <br/>
      <a href="?action=add" rel="nofollow" target="_blank">Ajouter</a>
      <a href="?action=modify" rel="nofollow" target="_blank">Modifier</a>
      <a href="?action=delete" rel="nofollow" target="_blank">Supprimer</a>


      L'erreur :
      PDOException: SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'id' at row 1 in C:\wamp64\www\Site\admin\admin.php on line 32

      Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'id' at row 1' in C:\wamp64\www\Site\admin\admin.php on line 32



      Ligne 32 :
      $insert = $db->prepare("INSERT INTO products VALUES('','$title','$description','$price')");
      $insert->execute();
      0
  2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Bonjour,

    Pour commencer... et comme cela t'a déjà été dit ... place ta requête dans un bloc try/catch.
    Prend aussi l'habitude de "sortir" la requête de son exécution.
    Prend également l'habitude d'utiliser les requêtes préparées...

    Comme ceci :
    //préparation de la requete et des variables
    $sql = "INSERT INTO products (title,description,price) VALUES(:title,:description,:price)";
    $datas = array(':title'=>$title, ':description'=>$description, ':price'=>$price);
    
    //execution de la requete
    try{
    $insert = $db->prepare($sql);
    $insert->execute($datas );
    }catch(Exception $e){
      //en cas de pb dans la requete :
      echo "<br>Erreur dans la requête :" .$sql;
      echo "<br>erreur : ".$e->getMessage();
      echo "<br> Datas : <br>";
      print_r($datas);
    }
    
    


    NB: prends l'habitude d'écrire ta requête insert en précisant dans quels champs de ta table tu fais l'insert.
    Tu remarqueras que je n'ai pas mis l' ID (qui est un champ auto-incrémenté visiblement et si ce n'est pas le cas... défini le en tant que tel !) )

    0
  3. Utilisateur anonyme
     
    Salut, en fait tu as simplement oublié un ' :
    "$insert = $db->prepare("INSERT INTO products VALUES('',$title','$description','$price')");"

    Au niveau du $title, il manque un ' devant ^^
    0
    1. clement62910 Messages postés 46 Statut Membre 12
       
      Oui merci mais cela ne change rien
      0
  4. clement62910 Messages postés 46 Statut Membre 12
     
    Bjr ,
    Vous pouvez pas plutot me donné l'erreur car a 13 ans je comprends pas tout c'est normal non ?
    0