PDOException:

Résolu
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. Bjr ,
    Vous pouvez pas plutot me donné l'erreur car a 13 ans je comprends pas tout c'est normal non ?
    1. 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 ^^
      1. Oui merci mais cela ne change rien
    2. Modérateur
      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 !) )

      1. Contributeur
        '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
        1. $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
        2. Contributeur
          @clement62910Si tu lisais le message de l'exception, peut-être que tu comprendrais ton erreur...
        3. ??? 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.
        4. Contributeur
          @clement62910Il 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.
        5. 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();