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
Auteur
Réponse acceptée

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