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 -
clement62910 Messages postés 41 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Voila mon erreur :

Mon code source :
Ligne 32 :
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. |
A voir également:
- Fatal error: uncaught pdoexception: sqlstate[hy000]
- Eespt technical error ✓ - Forum TNT / Satellite / Réception
- Fan error lenovo - Forum Refroidissement
- Mysqli::real_connect(): (hy000/2002): aucune connexion n’a pu être établie car l’ordinateur cible l’a expressément refusée. - Forum PHP
- Cmos checksum error ✓ - Forum Carte-mère/mémoire
- Playback error reconnect in 3s (1/5) francais - Forum Box et Streaming vidéo
4 réponses
'lut
Emballes ton
Par ailleurs
from human import idiocy
del idiocy
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
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 :
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 !) )
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 !) )
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
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 :
Explications disponibles ici :ICI
Merci d'y penser dans tes prochains messages.
En français ça donne:
Un problème avec un paramètre de ta requête, non ? Je te laisse la trouver, c'est d'une évidence frappante.
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 :
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 :