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
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