Syntaxe pour updater plusieurs colonnes

Résolu
danielos77 Messages postés 108 Date d'inscription   Statut Membre Dernière intervention   -  
danielos77 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

A voir également:

5 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 

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


0
danielos77 Messages postés 108 Date d'inscription   Statut Membre Dernière intervention   2
 

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
Pitet
 

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   Statut Membre Dernière intervention   2
 

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   Statut Membre Dernière intervention   2
 

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 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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   Statut Membre Dernière intervention   2
 

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

0