Syntaxe pour updater plusieurs colonnes
Résoludanielos77 Messages postés 108 Date d'inscription Statut Membre Dernière intervention -
Bonjour à toutes et à tous,
J'ai un formulaire qui me permet de récupérer les valeurs pour un ID donné et ensuite de pointer l'arrivée de documents.
Lorsque je valide ce formulaire pour updater les choix, les tests d'affichage montre bien les différentes saisies, mais j'ai ce message d'erreur qui m'est totalement incompréhensible.
"Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in /home/anegjxuk/public_html/ADT/Envoi_pointage.php:62 Stack trace: #0 /home/anegjxuk/public_html/ADT/Envoi_pointage.php(62): PDOStatement->execute(Array) #1 {main} thrown in /home/anegjxuk/public_html/ADT/Envoi_pointage.php on line 62"
Comment lever cette erreur ?
Merci d'avance aux contributeurs
<?php //activation de l'affichage des erreurs PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //TEST echo'TEST<br>'; // vérification des données arrivées var_dump($_POST); // affichage avec print_r echo '<br>'; echo '<pre>'; print_r($_POST); echo '</pre>'; echo '<br>'; $NumMembre=$_POST['NumMembre']; $Brevetmod=$_POST['Brevetmod']; $Paiementmod=$_POST['Paiementmod']; $CNImod=$_POST['CNImod']; $Assurancemod=$_POST['Assurancemod']; $CarteJaunemod=$_POST['CarteJaunemod']; $LSAmod=$_POST['LSAmod']; $LicenceFFPLUMmod=$_POST['LicenceFFPLUMmod']; $Engagementmod=$_POST['Engagementmod']; $Autremod=$_POST['Autremod']; echo $NumMembre.'<br>'; echo $Brevetmod.'<br>'; echo $Paiementmod.'<br>'; echo $CNImod.'<br>'; echo $Assurancemod.'<br>'; echo $CarteJaunemod.'<br>'; echo $LSAmod.'<br>'; echo $LicenceFFPLUMmod.'<br>'; echo $Engagementmod.'<br>'; echo $Autremod.'<br>'; //on inclut le fichier de connexion à la bdd require_once "../secure/cnxBddADT.php"; //$sth appartient à la classe PDOStatement $sth = $bdd->prepare("UPDATE Inscriptions_rallye SET Brevet = :Brevetmod, Paiement = :Paiementmod, CNI = :CNImod, Assurance = :Assurancemod, CarteJaune = :CarteJaunemod, LSA = :LSAmod, LicenceFFPLUM = :LicenceFFPLUMmod, Engagement = :Engagementmod, Autre = :Autremod where NumMembre=$NumMembre"); $sth->execute(array(':Brevet'=>$Brevetmod, ':Paiement'=>$Paiementmod, ':CNI'=>$CNImod, ':Assurance'=>$Assurancemod, ':CarteJaune'=>$CarteJaunemod,':LSA'=>$LSAmod, ':LicenceFFPLUM'=>$LicenceFFPLUMmod, ':Engagement'=>$Engagementmod, ':Autre'=>$Autremod)); //$sth->execute(); //On affiche le nb d'entrées mise à jour $count=$sth->ColumnCount(); print('Mise à jour de '.$count.' entrée(s)'); ?>
Windows / Firefox 103.0
- Syntaxe pour updater plusieurs colonnes
- Classer par ordre alphabétique excel plusieurs colonnes - Guide
- Comment faire des colonnes sur word - Guide
- Updater - Télécharger - Édition & Programmation
- Software updater - Télécharger - Optimisation
- Iobit software updater - Télécharger - Pilotes & Matériel
5 réponses
Bonjour Jordane45,
Non CNI est le nom de la colonne et CNImod est la valeur à donner pour l'ID correspondant au NumMembre.
ligne 27 par exemple, je donne à la variable $CNImod la valeur reçue (qui est dans $_POST['CNImod']).
Ensuite dans la requête, je demande l'update pour la colonne CNI avec la valeur de :CNImod pour l'ID souhaité. et dans l'execute, je dééclare que :CNImod est le contenu de la variable $CNImod...
Du moins c'est ce que je pensais faire mais je constate (comme ça ne marche pas) que je dois me planter.
CNI est bien le nom de la colonne, :CNImod est le nom du marqueur dans ta requête sql.
Dans ton tableau passé en paramètre de execute, il faut renseigner le nom du marqueur et pas le nom de la colonne.
Au passage, il faut utiliser la méthode rowCount au lieu de columnCount pour récupérer le nombre de ligne mises à jour par la requête update.
Bonjour Pitet,
Merci pour ton post.
J'utilise ColumnCount car je n'ai pas plusieurs lignes de modifiées mais une seule par contre, ily a plusieurs colonnes de modifiées.Count n'est pas le nombre de lignes modifiées dans la base mais le nombre de lignes mises à jour par la requête....ok.
Et pour les marqueurs, je vais corriger tout ça.
J'ai corrigé mais l'erreur est toujours là. ;-(
<?php //activation de l'affichage des erreurs PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //TEST echo'TEST<br>'; // vérification des données arrivées var_dump($_POST); // affichage avec print_r echo '<br>'; echo '<pre>'; print_r($_POST); echo '</pre>'; echo '<br>'; $NumMembre=$_POST['NumMembre']; $Brevetmod=$_POST['Brevetmod']; $Paiementmod=$_POST['Paiementmod']; $CNImod=$_POST['CNImod']; $Assurancemod=$_POST['Assurancemod']; $CarteJaunemod=$_POST['CarteJaunemod']; $LSAmod=$_POST['LSAmod']; $LicenceFFPLUMmod=$_POST['LicenceFFPLUMmod']; $Engagementmod=$_POST['Engagementmod']; $Autremod=$_POST['Autremod']; echo $NumMembre.'<br>'; echo $Brevetmod.'<br>'; echo $Paiementmod.'<br>'; echo $CNImod.'<br>'; echo $Assurancemod.'<br>'; echo $CarteJaunemod.'<br>'; echo $LSAmod.'<br>'; echo $LicenceFFPLUMmod.'<br>'; echo $Engagementmod.'<br>'; echo $Autremod.'<br>'; //on inclut le fichier de connexion à la bdd require_once "../secure/cnxBddADT.php"; //$sth appartient à la classe PDOStatement $sth = $bdd->prepare("UPDATE Inscriptions_rallye SET Brevet = :Brevetmod, Paiement = :Paiementmod, CNI = :CNImod, Assurance = :Assurancemod, CarteJaune = :CarteJaunemod, LSA = :LSAmod, LicenceFFPLUM = :LicenceFFPLUMmod, Engagement = :Engagementmod, Autre = :Autremod where NumMembre=$NumMembre"); $sth->execute([ ':Brevetmod'=>$Brevetmod, ':Paiementmod'=>$Paiementmod, ':CNImod'=>$CNImod, ':Assurancemod'=>$Assurancemod, ':CarteJaunemod'=>$CarteJaunemod, ':LSAmod'=>$LSAmod, ':LicenceFFPLUMmod'=>$LicenceFFPLUMmod, ':Engagementmod'=>$Engagementmod, ':Autre'=>$Autremod ]); //On affiche le nb d'entrées mise à jour $count=$sth->rowCount(); print('Mise à jour de '.$count.' entrée(s)'); ?>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question