Probleme UPDATE et boucle for

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Probleme UPDATE et boucle for

par Rolli » 31 janv. 2007, 11:40

Merci Ryle,

Grâce à tes explications, j'ai résolu mon erreur.
J'ai modifié la clause where:

Code : Tout sélectionner

WHERE Nom_col='$valeur[$i]' AND Id_sportif= '$idSportifSelect'
Le problème est [Résolu]

par Ryle » 30 janv. 2007, 13:41

Le problème ne vient pas du tableau de données $actiVelo qui est correctement parcouru, mais de ce que tu fais de ces données :)

Si on suit le traitement pas à pas, tu vas récupérer les données du premier enregistrement ($i==0) et faire l'update suivant (je garde tes données d'exemple Num_prog_cycliste = 1 et Id_sportif = 3) :
"UPDATE programme_proposee SET  
Type_activite_velo = '".$actiVelo[0]."',
Consigne = '".$cons[0]."' 
WHERE Num_prog_cycliste=1 AND Id_sportif=3"
A partir de la, toutes les lignes de ta base pour lesquelles Num_prog_cycliste == 1 et Id_sportif == 3 auront les valeurs de la première ligne de ton tableau

Puis on passe à l'itératon suivante ($i==1), ta requête devient :
"UPDATE programme_proposee SET  
Type_activite_velo = '".$actiVelo[1]."',
Consigne = '".$cons[1]."' 
WHERE Num_prog_cycliste=1 AND Id_sportif=3"
Et toutes les lignes de ta base pour lesquelles Num_prog_cycliste == 1 et Id_sportif == 3 (donc celles précédemment mises à jour) vont maintenant prendre les valeurs de la 2ème ligne de ton tableau, écrasant ainsi les données précédement enregistrées.

Idem pour la 3ème, 4ème, ... jusqu'à la dernière. Tu obtiens donc partout le résultat de la dernière ligne du tableau, qui vient écraser toutes les autres.


En fait, il doit te manquer une condition dans le WHERE pour que chaque ligne du tableau impacte une seule ligne de ta base et ne soit pas écrasée par l'update suivant... :)

par Rolli » 29 janv. 2007, 22:11

Je ne comprend pas ce que tu veux dire...

Dans ma clause where, Num_prog_cycliste=$numProgPropSelect (pour l'exemple =1) et Id_sportif= $idSportifSelect (pour l'exemple =3).
Bref, j'ai 7 lignes qui correspondent à cette requête.

La variable $actiVelo est un array avec 7 éléments différents.

Comment faire pour que le 1er update prenne en compte le premier élément du tableau $actiVelo, le 2ème update le 2ème élément du tableau,...

par Ryle » 29 janv. 2007, 15:01

Le problème vient du fait que ce sont toujours les mêmes lignes que tu mets à jour :
WHERE Num_prog_cycliste='$numProgPropSelect' 
AND Id_sportif= '$idSportifSelect'
Donc tous les updates sont bien passés, mais seul le dernier sera visible. Ne devrais-tu pas dans ta clause where, avoir un paramètre en rapport avec le $i de la ligne que tu souhaites modifier ? :)

Probleme UPDATE et boucle for

par Rolli » 29 janv. 2007, 14:17

Bonjour,

J'ai un souci pour modifier des données dans une table.
Je m'explique, je souhaite modifier une ou n valeurs dans plusieurs lignes de la table en même temps.
par exemple la valeur $actiVelo.
$actiVelo est un array qui récupère n champs d'un formulaire.
Voici le code que j'essayeactuellement:

Code : Tout sélectionner

$actiVelo = $_POST['ActVeloSaisie']; for($i=0; $i<7; $i++){ $sqlModif = "UPDATE programme_proposee set Type_activite_velo='$actiVelo[$i]',Consigne ='$cons[$i]'WHERE Num_prog_cycliste='$numProgPropSelect' AND Id_sportif= '$idSportifSelect'"; $resultat = mysql_query($sqlModif); }
Le résultat de ce code est que toutes les lignes de la table sont modifiées, mais qu'avec la valeur du dernier champ de saisie de ActVeloSaisie.
Donc je suppose qu'il y a un couac dans la boucle for...

J'espère avoir été clair et si vous avez une idée, je suis preneur.
Merci