PDOException:

Résolu
clement62910 Messages postés 41 Date d'inscription   Statut Membre Dernière intervention   -  
clement62910 Messages postés 41 Date d'inscription   Statut Membre Dernière intervention   -
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

ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223
 
'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
clement62910 Messages postés 41 Date d'inscription   Statut Membre Dernière intervention   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
ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223 > clement62910 Messages postés 41 Date d'inscription   Statut Membre Dernière intervention  
 
Si tu lisais le message de l'exception, peut-être que tu comprendrais ton erreur...
0
clement62910 Messages postés 41 Date d'inscription   Statut Membre Dernière intervention   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
ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223 > clement62910 Messages postés 41 Date d'inscription   Statut Membre Dernière intervention  
 
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
clement62910 Messages postés 41 Date d'inscription   Statut Membre Dernière intervention   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
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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
nobox14 Messages postés 84 Date d'inscription   Statut Membre Dernière intervention   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 ^^
0
clement62910 Messages postés 41 Date d'inscription   Statut Membre Dernière intervention   12
 
Oui merci mais cela ne change rien
0
clement62910 Messages postés 41 Date d'inscription   Statut Membre Dernière intervention   12
 
Bjr ,
Vous pouvez pas plutot me donné l'erreur car a 13 ans je comprends pas tout c'est normal non ?
0