[RESOLU] Erreur insertion enregistrement

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Erreur insertion enregistrement

Re: Erreur insertion enregistrement

par Shadowwera » 13 juil. 2021, 09:06

Bonjour,

En effet si ton champs idrec est auto-incrémenté, ne le met pas dans ta requete. Il sera automatiquement renseigné quand ta nouvelle recette sera créé !

Ensuite, tu a choisie d'utiliser la méthode prepare, ce qui implique que tu doit lui passer les variables soit dans ton execute, soit en bindparam, je te conseille de te renseigné sur le PDO prepare : https://www.php.net/manual/fr/pdo.prepare.php

Re: Erreur insertion enregistrement

par or 1 » 12 juil. 2021, 17:51

"Invalid parameter number: no parameters were bound"
le principe : on prépare une requete avec des paramètres, on exécute en passant les paramètres.
il n'y a pas de passage de paramètre dans le code, d'où le message d'erreur.
la doc : https://www.php.net/manual/fr/pdo.prepare.php

Erreur insertion enregistrement

par christrenb » 12 juil. 2021, 14:29

Bonjour, je suis assez débutant en php et j'ai une erreur sur l'insertion d'un enregistrement dans une table sql.
Pour information et pour poser les bases, mon but est de créer une base de données de recettes dans lequel il y a plusieurs champs (nom de la recette, temps, liste d'ingrédients etc).
Lorsque j'appuie sur le bouton valider de la saisie d'une nouvelle recette, j'ai un message d'erreur que je pense comprendre mais que je n'arrive pas à résoudre: ERREUR : SQLSTATE[HY093]: Invalid parameter number: no parameters were bound
Avant de vous poster mon code, j'ai peut être une piste mais j'ai essayé de trouver une solution dans de nombreux forums mais je ne trouve aucun sujet correspondant à mon problème.
J'ai un champ idrec correspondant à un identifiant auto_increment donc clé primaire. Il me semble qu'il ne faut pas le passer lors de l'insertion des valeurs ou je me trompe ? sinon je ne vois pas où est mon erreur. Voici les 2 codes: celui de ma page principale (formulaire de saisie et celui de l'ajout des données dans la table "recettes".
En espérant avoir été aussi clair que possible.
Merci de votre aide.
page principale:

Code : Tout sélectionner

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Saisie d'une recette</title> </head> <body> <?php require 'connectbd.php'; try { $options = [ PDO ::MYSQL_ATTR_INIT_COMMAND =>'SET NAMES utf8', PDO ::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ]; $PDO = new PDO($DB_DSN, $DB_USER, $DB_PASS, $options); echo "Connexion établie"; $sql = 'SELECT * FROM type_recette'; $resultat = $PDO->query($sql); ?> <form method ="post" action="page2.php"> <label> Nom de la recette : <input name="nom_recette" value =""></label> <p> <label> Liste des ingrédients : <input name="liste_ing" value =""></label> <p> type de recette : <select name = "type_recette"> <?php foreach($resultat as $re) { ?> <option> <?php echo $re['type_recette']; ?> </option> <?php } ?> </select> <label> Nom du magazine : <input name="nom_magazine" value =""></label> <label> Page : <input name="page" value =""></label> <label> Temps de préparation : <input name="duree_prepa" value =""></label> <label> Temps de cuisson : <input name="duree_cuiss" value =""></label> <br> <input type ="submit" value="Valider" /> </form> <?php } catch(PDOException $pe) { echo 'ERREUR : ' .$pe->getMessage(); } ?> </body> </html>
page d'insertion

Code : Tout sélectionner

<?php require 'connectbd.php'; try { $options = [ PDO ::MYSQL_ATTR_INIT_COMMAND =>'SET NAMES utf8', PDO ::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ]; $PDO = new PDO($DB_DSN, $DB_USER, $DB_PASS, $options); $nom_recette = $_POST['nom_recette']; $type_recette = $_POST['type_recette']; $liste_ing = $_POST['liste_ing']; $nom_magazine = $_POST['nom_magazine']; $page = $_POST['page']; $duree_prepa = $_POST['duree_prepa']; $duree_cuiss = $_POST['duree_cuiss']; $type_recette = $_POST['type_recette']; $requete_insertion = $PDO->prepare ("SELECT INTO recette (idrec,nom_recette, liste_ing,nom_magazine, page, duree_prepa, duree_cuiss, type_recette) VALUES ('',:nom_recette, :liste_ing, :nom_magazine, :page, :duree_prepa, :duree_cuiss, :type_recette)"); if ($requete_insertion->execute()) { echo "Enregistrement ajouté avec succès"; } else { echo "problème insertion"; } } catch(PDOException $pe) { echo 'ERREUR : ' .$pe->getMessage(); } ?>