requete update PDO

Par AaFrederic Husson, il y a 6 ans


Bonjour,

à la validation du formulaire d'update j'ai droit à cette belle erreur:

Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in G:\Fred\Programmes_files\wamp64\www\social\model\profil.php:54 Stack trace: #0 G:\Fred\Programmes_files\wamp64\www\social\model\profil.php(54): PDOStatement->execute(Array) #1 G:\Fred\Programmes_files\wamp64\www\social\controller\frontend.php(17): require('G:\Fred\Program...') #2 G:\Fred\Programmes_files\wamp64\www\social\profil.php(11): profil() #3 {main} thrown in G:\Fred\Programmes_files\wamp64\www\social\model\profil.php on line 54

voici ma requete d'update:

if (isset($_POST['register'])) { extract($_POST); $db = dbConnect(); $q = $db->prepare('UPDATE description SET naissance = ?, yeux = ?, cheveux = ?, taille = ?, poids = ?, silhouette = ?, profession = ?, fumeur = ?, origine = ?, sexualite = ?, statut = ?, enfant = ? WHERE user_id = ?'); $q->execute([ 'naissance' => $naissance, 'yeux' => $yeux, 'cheveux' => $cheveux, 'taille' => $taille, 'poids' => $poids, 'silhouette' => $silhouette, 'profession' => $profession, 'fumeur' => $fumeur, 'origine' => $origine, 'sexualite' => $sexualite, 'statut' => $statut, 'enfant' => $enfant, 'user_id' => $_SESSION['user_id'] ]); //set_flash("Votre profil viens d'être mis à jour!", "success"); }

et mon formulaire

<div class="form-group row"> <label for="naissance" class="col-sm-3 col-form-label">Année de naissance</label> <div class="col-sm-9"> <select class="form-control form-control-sm" name="naissance" id="naissance"> <option value="">Choisissez...</option> <?= option_naissance() ?> </select> </div> </div> <div class="form-group row"> <label for="yeux" class="col-sm-3 col-form-label">Yeux</label> <div class="col-sm-9"> <select class="form-control-sm form-control" name="yeux" id="yeux"> <option value="">Choisissez...</option> <option value="Bleus">Bleus</option> <option value="Gris">Gris</option> <option value="Marrons">Marrons</option> <option value="Noirs">Noirs</option> <option value="Noisette">Noisette</option> <option value="Verts">Verts</option> <option value="Autre couleur">Autre couleur</option> </select> </div> </div> <div class="form-group row"> <label for="cheveux" class="col-sm-3 col-form-label">Cheveux</label> <div class="col-sm-9"> <select class="form-control-sm form-control" name="cheveux" id="cheveux"> <option value="">Choisissez...</option> <option value="Blancs">Blancs</option> <option value="Blonds">Blonds</option> <option value="Bruns">Bruns</option> <option value="Châtains">Châtains</option> <option value="Gris">Gris</option> <option value="Noirs">Noirs</option> <option value="Rasés/Chauve">Rasés/Chauve</option> <option value="Poivre et sel">Poivre et sel</option> <option value="Roux">Roux</option> </select> </div> </div> <div class="form-group row"> <label for="taille" class="col-sm-3 col-form-label">Taille (en cm)</label> <div class="col-sm-9"> <select class="form-control-sm form-control" name="taille" id="taille"> <option value="">Choisissez...</option> <?= taille() ?> </select> </div> </div> <div class="form-group row"> <label for="poids" class="col-sm-3 col-form-label">Poids (en kg)</label> <div class="col-sm-9"> <select class="form-control-sm form-control" name="poids" id="poids"> <option value="">Choisissez...</option> <?= poids() ?> </select> </div> </div> <div class="form-group row"> <label for="silhouette" class="col-sm-3 col-form-label">Silhouette</label> <div class="col-sm-9"> <select class="form-control-sm form-control" name="silhouette" id="silhouette"> <option value="">Choisissez...</option> <option value="Mince">Mince</option> <option value="Normale">Normale</option> <option value="Sportive">Sportive</option> <option value="Musclée">Musclée</option> <option value="Pulpeuse">Pulpeuse</option> <option value="Quelques kilos de trop">Quelques kilos de trop</option> <option value="Ronde">Ronde</option> </select> </div> </div> <div class="form-group row"> <label for="profession" class="col-sm-3 col-form-label">Profession</label> <div class="col-sm-9"> <select class="form-control-sm form-control" name="profession" id="profession"> <option value="">Choisissez...</option> <option value="Ariculteur">Ariculteur</option> <option value="Chef d'entreprise">Chef d'entreprise</option> <option value="Cadre, profession libérale">Cadre, profession libérale</option> <option value="Employé">Employé</option> <option value="Etudiant">Etudiant</option> <option value="Ouvrier">Ouvrier</option> <option value="Profession intermédiaire">Profession intermédiaire</option> <option value="Retraité">Retraité</option> <option value="Sans activité professionnelle">Sans activité professionnelle</option> <option value="Autre">Autre</option> <option value="Information privé">Information privé</option> </select> </div> </div> <div class="form-group row"> <label for="fumeur" class="col-sm-3 col-form-label">Fumeur</label> <div class="col-sm-9"> <select class="form-control-sm form-control" name="fumeur" id="fumeur"> <option value="">Choisissez...</option> <option value="Non fumeur">Non fumeur</option> <option value="Fumeur occasionnel">Fumeur occasionnel</option> <option value="Fumeur">Fumeur</option> <option value="Vapoteur">Vapoteur</option> </select> </div> </div> <div class="form-group row"> <label for="origine" class="col-sm-3 col-form-label">Origine</label> <div class="col-sm-9"> <select class="form-control-sm form-control" name="origine" id="origine"> <option value="">Choisissez...</option> <option value="Africaine">Africaine</option> <option value="Antillaise">Antillaise</option> <option value="Arabe">Arabe</option> <option value="Asiatique">Asiatique</option> <option value="Européenne">Européenne</option> <option value="Hispanique">Hispanique</option> <option value="Indienne">Indienne</option> <option value="Latino">Latino</option> <option value="Méditéranéenne">Méditéranéenne</option> <option value="Métisse">Métisse</option> <option value="Autre">Autre</option> <option value="Information privé">Information privé</option> </select> </div> </div> <div class="form-group row"> <label for="sexualite" class="col-sm-3 col-form-label">Orientation sexuelle</label> <div class="col-sm-9"> <select class="form-control-sm form-control" name="sexualite" id="sexualite"> <option value="">Choisissez</option> <option value="Hétéro">Hétéro</option> <option value="Bi">Bi</option> <option value="Bi-curieux">Bi-curieux</option> <option value="Homo">Homo</option> <option value="Trav / Trans">Trav / Trans</option> </select> </div> </div> <div class="form-group row"> <label for="statut" class="col-sm-3 col-form-label">Statut conjugal</label> <div class="col-sm-9"> <select class="form-control-sm form-control" name="statut" id="statut"> <option value="">Choisissez...</option> <option value="Célibataire">Célibataire</option> <option value="Union libre">Union libre</option> <option value="Marié(e)">Marié(e)</option> <option value="Veuf / Veuve">Veuf / Veuve</option> <option value="Divorcée">Divorcé(e)</option> </select> </div> </div> <div class="form-group row"> <label for="enfant" class="col-sm-3 col-form-label">Enfants</label> <div class="col-sm-9"> <select class="form-control-sm form-control" name="enfant" id="enfant"> <option value="">Choisissez...</option> <option value="Oui">Oui</option> <option value="Non">Non</option> <option value="Information privé">Information privé</option> </select> </div> </div>

en sachant qu'il n'y a aucune obligation de renseigner tous les champs du formulaire

1 réponse

AaFrederic Husson, il y a 6 ans

j'ai corrigé ma requète comme ceci et ça fonctionne:

$db = dbConnect(); $q = $db->prepare('UPDATE description SET naissance = :naissance, yeux = :yeux, cheveux = :cheveux, taille = :taille, poids = :poids, silhouette = :silhouette, profession = :profession, fumeur = :fumeur, origine = :origine, sexualite = :sexualite, statut = :statut, enfant = :enfant WHERE user_id = :user_id'); $q->execute([ 'naissance' => $naissance, 'yeux' => $yeux, 'cheveux' => $cheveux, 'taille' => $taille, 'poids' => $poids, 'silhouette' => $silhouette, 'profession' => $profession, 'fumeur' => $fumeur, 'origine' => $origine, 'sexualite' => $sexualite, 'statut' => $statut, 'enfant' => $enfant, 'user_id' => $_SESSION['user_id'] ]);

par contre j'ai eu droit à une belle erreur sur les champs de type INT si ceux ci étais vide:
Erreur #1366 - Incorrect integer value:

pour ce faire je les ais modifié en varchar