Syntaxe pour updater plusieurs colonnes

Résolu/Fermé
danielos77 Messages postés 108 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 16 janvier 2024 - 5 août 2022 à 15:59
danielos77 Messages postés 108 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 16 janvier 2024 - 5 août 2022 à 19:31

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

A voir également:

5 réponses

jordane45 Messages postés 38427 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 février 2025 4 734
5 août 2022 à 16:20

CNI n'est pas la même chose que CNImod


0
danielos77 Messages postés 108 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 16 janvier 2024 2
5 août 2022 à 16:50

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.

0

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.

1
danielos77 Messages postés 108 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 16 janvier 2024 2
5 août 2022 à 17:43

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.

0
danielos77 Messages postés 108 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 16 janvier 2024 2
5 août 2022 à 18:01

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)');
         	
?>
 

0
jordane45 Messages postés 38427 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 février 2025 4 734
5 août 2022 à 19:25
Autremod n'est pas Autre. ...
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
danielos77 Messages postés 108 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 16 janvier 2024 2
5 août 2022 à 19:31

Il n'y a pas à dire un regard extérieur apporte beaucoup.
C'est super [car ça marche en plus ;-)]
Merci Jordane45

0