Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/10/2011, 18h24   #1
Invité de passage
 
Inscription : novembre 2008
Messages : 35
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 35
Points : 4
Points : 4
Par défaut UPDATE insertion multiple

Re-bonjour à nouveau à tous,
Voilà je me retourne encore vers vous pour régler un problème que je conceptualise très bien mais que je n'arrive pas à mettre en oeuvre.

J'ai un formulaire avec ce code :
Code :
1
2
3
4
5
6
7
8
9
10
 
<td name="num_item" value="<?php echo $donnees['num_item_exercice'];?>"><?php echo $donnees['nom_item'];?></td>
<td name="num_exercice" value="<?php echo $donnees['num_exercice'];?>"><?php echo $donnees['num_exercice']?> - <?php echo $donnees['nom_exercice']?></td>
<td name="num_age" value="<?php echo $donnees['num_age'];?>"><?php echo $donnees['nom_age'];?></td>
<td><select name="guidance">
<option value="1" selected>Guidance Totale</option>
<option value="2">Guidance Partielle</option>
<option value="3" >Sans aide</option>
</select></td>
<td><textarea rows="2" cols="20" name="observations"></textarea></td>
Ce formulaire fonctionne parfaitement. Ce que je souhaite c'est faire un UPDATE multiple de tous les enregistrements dans une seule requête. C'est-à-dire : l'utilisateur manipule comme il l'entend les données sur le formulaire et enfin clique sur le bouton sauvegarder et hop...update multiple pour tout mettre à jour.

Je récupère mes données via un $_POST['nom_variable'] (mais est-ce qu'il récupère toutes les valeurs dans un array ???), je fais une boucle foreach ou while pour traiter chaque UPDATE et le tour est joué...quelqu'un peut-il m'aider ?

Merci d'avance.
Jérôme
jeje_974 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 19h14   #2
Membre éclairé
 
Avatar de firehist
 
Homme Benjamin Longearet
Intégrateur Web Freelance
Inscription : février 2008
Messages : 153
Détails du profil
Informations personnelles :
Nom : Homme Benjamin Longearet
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Intégrateur Web Freelance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2008
Messages : 153
Points : 357
Points : 357
Envoyer un message via Skype™ à firehist
Qu'est ce que tu entends par UPDATE MULTIPLE.

Est-ce que tu peux montrer la table qui est censé être mise à jour. Si tous ces champs sont dans une table, un seul UPDATE suffit.

Peut-tu nous en dire un peu plus!
__________________
Ingénieur Web Freelance - Firehist Studio
Profil Viadeo Benjamin Longearet
Geekos.fr : Blog technique sur les technologies du Web
---
Citation:
De l'innovation nait la solution et inversement
firehist est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 19h31   #3
Invité de passage
 
Inscription : novembre 2008
Messages : 35
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 35
Points : 4
Points : 4
Citation:
Qu'est ce que tu entends par UPDATE MULTIPLE.

Est-ce que tu peux montrer la table qui est censé être mise à jour. Si tous ces champs sont dans une table, un seul UPDATE suffit.

Peut-tu nous en dire un peu plus!
Par update multiple je veux dire mettre à jour plusieurs enregistrements en même temps en cliquant sur un bouton Mettre à jour par exemple.

La table concernée :

Code :
1
2
3
4
5
6
7
8
9
10
11
 
CREATE TABLE IF NOT EXISTS `ime_constituer` (
  `num_enfant_C` int(4) NOT NULL,
  `num_item_C` int(5) NOT NULL,
  `num_exercice_C` int(4) NOT NULL,
  `guidance_C` tinyint(1) NOT NULL,
  `obs_C` text NOT NULL,
  PRIMARY KEY (`num_enfant_C`,`num_item_C`,`num_exercice_C`),
  KEY `num_exercice_C` (`num_exercice_C`),
  KEY `num_item_C` (`num_item_C`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Effectivement tous les champs sont dans une seule table (ime_constituer) et je récupère mes enregistrements de mon formulaire (voir mon post précédent). Comment fait-on ? Merci pour vos lumières.

Jérôme
jeje_974 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 21h26   #4
Membre éclairé
 
Avatar de firehist
 
Homme Benjamin Longearet
Intégrateur Web Freelance
Inscription : février 2008
Messages : 153
Détails du profil
Informations personnelles :
Nom : Homme Benjamin Longearet
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Intégrateur Web Freelance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2008
Messages : 153
Points : 357
Points : 357
Envoyer un message via Skype™ à firehist
Le formulaire que tu nous montre ne concerne qu'un seul enregistrement. Tu veux donc mettre à jour tous les champs de ce formulaire dans ta table?

Si c'est le cas tu construit ta requête simplement:
Code :
UPDATE ime_constituer SET champ1 = "val1", etc WHERE num_enfant_C = "val1" AND num_item_C = "val2" AND num_exercice_C = "";
En pensant à bien vérifier tes données dans le $_POST (protéger de la faille d'injection SQL et blablabla et blablabli).

Bon dév'
__________________
Ingénieur Web Freelance - Firehist Studio
Profil Viadeo Benjamin Longearet
Geekos.fr : Blog technique sur les technologies du Web
---
Citation:
De l'innovation nait la solution et inversement
firehist est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 07h04   #5
Invité de passage
 
Inscription : novembre 2008
Messages : 35
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 35
Points : 4
Points : 4
Citation:
Le formulaire que tu nous montre ne concerne qu'un seul enregistrement. Tu veux donc mettre à jour tous les champs de ce formulaire dans ta table?
Non, j'ai une boucle sur ce formulaire. Voici le code avec la boucle :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
while ($donnees = $req->fetch())
{
echo '<tr class="prem '.( ($i % 2 == 0) ? 'classe1' : 'classe2' ).'">';
$i++;
?>	
<td name="num_item" value="<?php echo $donnees['num_item_exercice'];?>"><?php echo $donnees['nom_item'];?></td>
<td name="num_exercice" value="<?php echo $donnees['num_exercice'];?>"><?php echo $donnees['num_exercice']?> - <?php echo $donnees['nom_exercice']?></td>
<td name="num_age" value="<?php echo $donnees['num_age'];?>"><?php echo $donnees['nom_age'];?></td>
<td><select name="guidance">
	<option value="1" selected>Guidance Totale</option>
	<option value="2">Guidance Partielle</option>
	<option value="3" >Sans aide</option>
</select></td>
<td><textarea rows="2" cols="20" name="observations[]"></textarea></td>
 
		</tr>
Cela va donc créer plusieurs lignes dans le formulaire que l'utilisateur va modifier comme il l'entend et clique sur un seul bouton METTRE A JOUR pour executer ce que j'appel un "UPDATE MULTIPLE"

Merci pour votre aide.
Jérôme
jeje_974 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 07h40   #6
Membre éclairé
 
Avatar de firehist
 
Homme Benjamin Longearet
Intégrateur Web Freelance
Inscription : février 2008
Messages : 153
Détails du profil
Informations personnelles :
Nom : Homme Benjamin Longearet
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Intégrateur Web Freelance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2008
Messages : 153
Points : 357
Points : 357
Envoyer un message via Skype™ à firehist
Salut,

Dans ce cas il faut que tu formate un peu mieux ton formulaire:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php $i = 0; ?>
 <?php while ($donnees = $req->fetch()): ?>
	<tr class="prem <?php echo ( ($i % 2 == 0) ? 'classe1' : 'classe2' ) ?>">
		<td>
			<input type="hidden" name="ime[<?php echo $i ?>][num_item]]" value="<?php echo $donnees['num_item_exercice']; ?>" />
			<?php echo $donnees['nom_item'];?>
		</td>
		<td>
			<input type="hidden" name="ime[<?php echo $i ?>][num_exercice]" value="<?php echo $donnees['num_exercice']; ?>" />
			<?php echo $donnees['num_exercice']?> - <?php echo $donnees['nom_exercice']?>
		</td>
		<td>
			<input type="hidden" name="ime[<?php echo $i ?>][nom_age]" value="<?php echo $donnees['nom_age']; ?>" />
			<?php echo $donnees['nom_age'];?>
		</td>
		<td>
			<select name="ime[<?php echo $i ?>][guidance]">
				<option value="1" selected>Guidance Totale</option>
				<option value="2">Guidance Partielle</option>
				<option value="3" >Sans aide</option>
			</select>
		</td>
		<td>
			<textarea rows="2" cols="20" name="ime[<?php echo $i ?>][observations]"></textarea>
		</td>
	</tr>
	<?php $i++; ?>
<?php endwhile; ?>
Tu récupère ainsi dans ton $_POST un tableau de ce type:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Array (
    [ime] => Array (
            [0] => Array (
                    [num_item] => 3
                    [num_exercice] => 4
                    [nom_age] => 18
                    [guidance] => 3
                    [observations] => Blablablablablablabla
                )
            [1] => Array (
                    [num_item] => 3
                    [num_exercice] => 5
                    [nom_age] => 16
                    [guidance] => 2
                    [observations] => Blablablablablablabla 2
                )
        )
)
Bon dév'
__________________
Ingénieur Web Freelance - Firehist Studio
Profil Viadeo Benjamin Longearet
Geekos.fr : Blog technique sur les technologies du Web
---
Citation:
De l'innovation nait la solution et inversement
firehist est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/10/2011, 10h04   #7
Invité de passage
 
Inscription : novembre 2008
Messages : 35
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 35
Points : 4
Points : 4
Ok merci à toi firehist.
Je vais tester ton code et je te tiens au courant.
@+
Jérôme
jeje_974 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 10h28   #8
Invité de passage
 
Inscription : novembre 2008
Messages : 35
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 35
Points : 4
Points : 4
Ok firehist : ton code fonctionne à merveille et j'ai compris...en fait cela crée un tableau que je récupère par l'intermédiaire du $_POST et je traite le tout dans un UPDATE avec une boucle pour parcourir tout le tableau...arrête moi si je me trompe ! ! !

Mais voilà, autant je sais le faire avec un enregistrement unique (ci-dessous un exemple avec la table ime_enfant où j'ai récupéré chaque valeur par un $_POST et que je traite par une requête préparée en PDO)...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
$req = $bdd->prepare('UPDATE ime_enfant SET
nom_enfant = :nom_enfant,
prenom_enfant = :prenom_enfant,
DDN_enfant = :DDN_enfant,
SF_enfant = :SF_enfant,
Date_entree_enfant = :Date_entree_enfant,
Date_debut_contrat_sejour_enfant = :Date_debut_contrat_sejour_enfant,
Date_fin_contrat_sejour_enfant = :Date_fin_contrat_sejour_enfant,
MDPH_date_debut_enfant = :MDPH_date_debut_enfant,
MDPH_date_fin_enfant = :MDPH_date_fin_enfant,
Diagnostic_psy_enfant = :Diagnostic_psy_enfant,
Diagnostic_cria_enfant = :Diagnostic_cria_enfant,
Infos_medicales_enfant = :Infos_medicales_enfant,
Suivi_externe_enfant = :Suivi_externe_enfant,
Suivi_interne_enfant = :Suivi_interne_enfant WHERE num_enfant = :num_enfant');
 
$req->execute(array(
	'nom_enfant' => $nom_enfant,
	'prenom_enfant' => $prenom_enfant,
	'num_enfant' => $num_enfant,
	'DDN_enfant' => $DDN_enfant,
	'SF_enfant' => $SF_enfant,
	'Date_entree_enfant' => $Date_entree_enfant,
	'Date_debut_contrat_sejour_enfant' => $Date_debut_contrat_sejour_enfant,
	'Date_fin_contrat_sejour_enfant' => $Date_fin_contrat_sejour_enfant,
	'MDPH_date_debut_enfant' => $MDPH_date_debut_enfant,
	'MDPH_date_fin_enfant' => $MDPH_date_fin_enfant,
	'Diagnostic_psy_enfant' => $Diagnostic_psy_enfant,
	'Diagnostic_cria_enfant' => $Diagnostic_cria_enfant,
	'Infos_medicales_enfant' => $Infos_medicales_enfant,
	'Suivi_externe_enfant' => $Suivi_externe_enfant,
	'Suivi_interne_enfant' => $Suivi_interne_enfant	
	));
...autant je ne vois pas où placer la boucle pour parcourir tout le tableau...merci pour votre aide.

Jérôme
jeje_974 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 11h14   #9
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
Dans la discussion précédente, je t'ai donné un lien vers une discussion qui indique comment utiliser les requêtes préparées.

Donc tu fais le "prepare" hors de la boucle et le "execute" dans la boucle.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 11h40   #10
Invité de passage
 
Inscription : novembre 2008
Messages : 35
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 35
Points : 4
Points : 4
Merci CinePhil pour ton indication sur la boucle...et il est vrai que j'ai regardé d'un peu trop loin ton lien sur les requêtes préparées...je m'y mets pour essayer de piger le truc.

Encore un grand merci à vous deux pour votre aide.
@+
Jérôme
jeje_974 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 12h07   #11
Invité de passage
 
Inscription : novembre 2008
Messages : 35
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 35
Points : 4
Points : 4
Voilà le code suivant qui indique comment on effectue une requête INSERT en y substituant un nom et une valeur pour les marqueurs nommés (cf site php.net) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
 
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);
 
// insertion d'une ligne
$name = 'one';
$value = 1;
$stmt->execute();
 
// insertion d'une autre ligne avec des valeurs différentes
$name = 'two';
$value = 2;
$stmt->execute();
?>
Je vois bien l'insertion des deux lignes et c'est là que je fais ma boucle while...mais pourriez-vous m'indiquer le code à réaliser...je n'ai pas trouver d'exemples prècis

Merci
@+
Jérôme
jeje_974 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 12h15   #12
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
Il faut te mâcher le boulot toi !

Tu démarres la boucle sur ton tableau entre ceci :
Code :
1
2
3
4
5
$req = $bdd->prepare('UPDATE ime_enfant SET
nom_enfant = :nom_enfant,
prenom_enfant = :prenom_enfant,
DDN_enfant = :DDN_enfant,
// ...
et cela :
Code :
1
2
3
4
5
$req->execute(array(
	'nom_enfant' => $nom_enfant,
	'prenom_enfant' => $prenom_enfant,
	'num_enfant' => $num_enfant,
// ...
Et bien sûr tu fermes la boucle après !
Et n'oublie pas avant le "prepare" le paramètre marqué dans le lien que je t'ai donné :
Code :
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 13h37   #13
Invité de passage
 
Inscription : novembre 2008
Messages : 35
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 35
Points : 4
Points : 4
Citation:
Il faut te mâcher le boulot toi !
Excuse moi d'être une vraie "buse" mais je ne sais pas comment m'y prendre...c'est pas pour vous faire chier mais je développe cette petite application bénévolement et je débute en php !

Je vais essayer...je vous tiens au courant

Merci
@+
Jérôme
jeje_974 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 19h48   #14
Invité de passage
 
Inscription : novembre 2008
Messages : 35
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 35
Points : 4
Points : 4
Bonsoir à tous,
Toujours en galère avec cette @@@@@ de boucle...
Quelqu'un peut il me mettre sur la piste...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 
<?php
 
session_start();
if (isset($_SESSION['user']) && (!empty($_SESSION['user'])))
{
 
include('../param_conn.php');
 
$bdd->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
 
$req = $bdd->prepare('UPDATE ime_constituer SET
num_enfant_C = :num_enfant_C,
num_item_C = :num_item_C,
num_exercice_C = :num_exercice_C,
guidance_C = :guidance_C,
obs_C = :obs_C');
 
//ici la boucle...mais de quel type ??? comment ??? quelqu'un peut-m'aider SVP...
 
$req->execute(array(
	'num_enfant_C' => $num_enfant_C,
	'num_item_C' => $num_item_C,
	'num_exercice_C' => $num_exercice_C,
	'guidance_C' => $guidance_C,
	'obs_C' => $obs_C	
	));
 
header('Location: index.php');
 
}
else
{
// pas de login en session : proposer la connexion
echo '<a href="../identification.php" title="Accès à la page de connexion">Connexion</a>';
}
 
?>
@+
Jérôme
jeje_974 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 21h45   #15
Invité de passage
 
Inscription : novembre 2008
Messages : 35
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 35
Points : 4
Points : 4
Bon, j'ai un peu progressé mais il me reste un problème qui je crois est simple à résoudre mais je bloque et j'ai besoin d'un oeil neuf.
Comment je formatte le tableau ?

Par exemple :
$_POST['$ime[$i]$num_enfant'] n'est pas bon...

Pouvez-vous m'aider ?
Merci
Jérôme



Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 
<?php
 
	session_start();
	if (isset($_SESSION['user']) && (!empty($_SESSION['user'])))
	{
 
include('../param_conn.php');
 
$bdd->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
 
$req = $bdd->prepare('UPDATE ime_constituer SET
num_enfant_C = :num_enfant_C,
num_item_C = :num_item_C,
num_exercice_C = :num_exercice_C,
guidance_C = :guidance_C,
obs_C = :obs_C');
 
$i=0;
while ($i < $_POST['nb_post'])
{
 
$req->execute(array(
	'num_enfant_C' => $_POST['$ime[$i]$num_enfant'],
	'num_item_C' => $_POST['ime[$i]num_item'],
	'num_exercice_C' => $_POST['ime[$i]num_exercice'],
	'guidance_C' => $_POST['ime[$i]guidance_C'],
	'obs_C' => $_POST['ime[$i]observations']	
	));
 
$i++;
}
 
//header('Location: index.php');
 
}
	else
	{
		// pas de login en session : proposer la connexion
		echo '<a href="../identification.php" title="Accès à la page de connexion">Connexion</a>';
	}
 
?>
jeje_974 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2011, 09h15   #16
Invité de passage
 
Inscription : novembre 2008
Messages : 35
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 35
Points : 4
Points : 4
Bonjour à tous,
Voilà j'ai presque réussi à faire fonctionner mon code ci-dessous...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 
<?php
 
	session_start();
	if (isset($_SESSION['user']) && (!empty($_SESSION['user'])))
	{
 
include('../param_conn.php');
 
$bdd->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
 
$req = $bdd->prepare('UPDATE ime_constituer SET
num_enfant_C = :num_enfant_C,
num_item_C = :num_item_C,
num_exercice_C = :num_exercice_C,
guidance_C = :guidance_C,
obs_C = :obs_C WHERE num_enfant_C = :num_enfant_C and num_item_C = :num_item_C and num_exercice_C = :num_exercice_C
');
 
$i=0;
while ($i < $_POST['nb_post'])
{
 
$req->execute(array(
	'num_enfant_C' => $_POST['ime'][$i]['num_enfant'],
	'num_item_C' => $_POST['ime'][$i]['num_item'],
	'num_exercice_C' => $_POST['ime'][$i]['num_exercice'],
	'guidance_C' => $_POST['ime'][$i]['guidance_C'],
	'obs_C' => $_POST['ime'][$i]['observations']	
	));
 
$i++;
}
 
//header('Location: index.php');
 
}
	else
	{
		// pas de login en session : proposer la connexion
		echo '<a href="../identification.php" title="Accès à la page de connexion">Connexion</a>';
	}
 
?>
... mais il me renvoi l'erreur suivante :

Citation:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number' in C:\wamp\www\imebaobab\evaluation\evaluation_cible.php on line 29

PDOException: SQLSTATE[HY093]: Invalid parameter number in C:\wamp\www\imebaobab\evaluation\evaluation_cible.php on line 29
Si quelqu'un a une idée je suis preneur...merci
@+
Jérôme
jeje_974 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2011, 09h45   #17
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
Pas sûr que ce soit la cause de l'erreur mais ta requête ne va pas :
Citation:
Code SQL :
1
2
3
4
5
6
7
8
9
10
UPDATE ime_constituer 
SET
    num_enfant_C = :num_enfant_C,
    num_item_C = :num_item_C,
    num_exercice_C = :num_exercice_C,
    guidance_C = :guidance_C,
    obs_C = :obs_C 
WHERE num_enfant_C = :num_enfant_C 
    AND num_item_C = :num_item_C 
    AND num_exercice_C = :num_exercice_C
Tu demandes à mettre à jour avec des valeurs qui sont celles qui te servent à sélectionner les lignes de la tables qui doivent être mises à jour.
Dans ta requête, il n'y a que "guidance_C" et "obs_C" qui peuvent changer de valeur !

Si tu sélectionnes les lignes avec les conditions que tu a mises dans le WHERE, supprime ces colonnes du SET :
Code SQL :
1
2
3
4
5
6
7
8
UPDATE ime_constituer 
SET
    guidance_C = :guidance_C,
    obs_C = :obs_C 
WHERE 
    num_enfant_C = :num_enfant_C 
    AND num_item_C = :num_item_C 
    AND num_exercice_C = :num_exercice_C
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2011, 10h01   #18
Invité de passage
 
Inscription : novembre 2008
Messages : 35
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 35
Points : 4
Points : 4
Merci CinePhil pour ta solution, je venais juste de me rendre compte de ce problème avec un autre code que j'avais déjà fait.
Maintenant ma page fonctionne nickel.
Encore un grand merci à tous ceux qui m'ont aidé à réaliser ce travail.
@+
Jérôme

PS : Pour info je remets le code (cela peut toujours servir à quelqu'un) :

Le formulaire de départ :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
 
<form method="post" action="evaluation_cible.php">
 
<p>
    <table align=center border="1" cellpadding="10" cellspacing="5">
		<tr>
			<td>Items</td>
			<td>Exercices</td>
			<td>Tranche d'âge</td>
			<td>Choix d'une guidance</td>
			<td>Observations</td>
		</tr>
 
		<?php
		$j = 0;
		$i = 0;
		$nb_post = 0;
		$ime = array(array()) ;
		while ($donnees = $req->fetch()):
		$nb_post++;
		?>
 
		<tr class="prem <?php echo ( ($j % 2 == 0) ? 'classe1' : 'classe2' ) ?>">
		<?php $j++;?>
 
		<input type="hidden" name="ime[<?php echo $i ?>][num_enfant]" value="<?php echo $donnees['num_enfant_C']; ?>" />
 
		<td><input type="hidden" name="ime[<?php echo $i ?>][num_item]" value="<?php echo $donnees['num_item_exercice']; ?>" />
		<?php echo $donnees['nom_item'];?></td>
 
		<td><input type="hidden" name="ime[<?php echo $i ?>][num_exercice]" value="<?php echo $donnees['num_exercice']; ?>" />
			<?php echo $donnees['num_exercice']?> - <?php echo $donnees['nom_exercice']?></td>
 
		<td><input type="hidden" name="ime[<?php echo $i ?>][nom_age]" value="<?php echo $donnees['nom_age']; ?>" />
		<?php echo $donnees['nom_age'];?></td>
 
		<td>
			<select name="ime[<?php echo $i ?>][guidance_C]">
				<?php
				$req_option = $bdd->prepare('SELECT * FROM ime_param');
				$req_option->execute(array());
				while ($donnee = $req_option->fetch())
				{
				if ($donnee['guidance_param'] == $donnees['guidance_C'])
				{
				?>
				<option value="<?php echo $donnees['guidance_C'];?>" selected><?php echo $donnee['nom_guidance']; ?></option>
				<?php
				}
				else
				{
				?>
				<option value="<?php echo $donnee['guidance_param']; ?>"><?php echo $donnee['nom_guidance']; ?></option>
				<?php
				}
				}
				?>
			</select>
		</td>
		<td><textarea rows="2" cols="20" name="ime[<?php echo $i ?>][observations]"></textarea></td>
	</tr>
	<?php $i++; ?>
<?php endwhile;
 
		$req->closeCursor();
		?>
		<input type="hidden" name="nb_post" value="<?php echo $nb_post ?>" />
		</tr>
		<tr>
			<td><input type="button" value="RETOUR" align=right onClick="history.back()" /></td>
			<td><button onClick="return confirm('Confirmer votre modification ?'); return false;">SAUVEGARDER</button></td>
		</tr>
	</table>
</p>
 
</form>
Le code qui traite le tableau ime :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
<?php
 
	session_start();
	if (isset($_SESSION['user']) && (!empty($_SESSION['user'])))
	{
 
include('../param_conn.php');
 
$bdd->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
 
$req = $bdd->prepare('UPDATE ime_constituer SET
 
guidance_C = :guidance_C,
obs_C = :obs_C
WHERE num_enfant_C = :num_enfant_C
and num_item_C = :num_item_C
and num_exercice_C = :num_exercice_C
');
 
$i=0;
while ($i < $_POST['nb_post'])
{
 
$req->execute(array(
	'num_enfant_C' => $_POST['ime'][$i]['num_enfant'],
	'num_item_C' => $_POST['ime'][$i]['num_item'],
	'num_exercice_C' => $_POST['ime'][$i]['num_exercice'],
	'guidance_C' => $_POST['ime'][$i]['guidance_C'],
	'obs_C' => $_POST['ime'][$i]['observations']	
	));
 
$i++;
}
 
header('Location: enfant_item_evaluation.php?num_enfant=');
 
}
	else
	{
		// pas de login en session : proposer la connexion
		echo '<a href="../identification.php" title="Accès à la page de connexion">Connexion</a>';
	}
 
?>
jeje_974 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h16.


 
 
 
 
Partenaires

Hébergement Web