Update MySql dans une boucle

Résolu
ckryo Messages postés 17 Date d'inscription lundi 18 octobre 2004 Statut Membre Dernière intervention 9 mai 2005 - 22 mars 2005 à 15:12
ckryo Messages postés 17 Date d'inscription lundi 18 octobre 2004 Statut Membre Dernière intervention 9 mai 2005 - 23 mars 2005 à 19:45
Bonjour,



J'aurais voulu savoir pourquoi mon update MySql ne fonctionne pas a
l'interieur d'une boucle. qd je sors la commande de la boucle, la mise
a jour est effectuee. Cependant, j'aurai voulu une mise a jour qui se
fassent au fur et a mesure que la boucle s'implemente.



Voici le code :



En rose l'update en question



for ($i= 0 ; $i < count($match[0]) ; $i++)

{

$new_match2 = str_replace (',','.',$match[2][$i]);

echo " name: ".$match[1][$i]."\n";

echo " 1er Prix: ".$new_match2."\n";

echo " 2e prix: ".$match[3][$i]."\n";

echo " 3e prix: ".$match[4][$i]."\n";

echo "
";

echo "
";

$query1 "update trinkaus set 2eprix '5.4' where webname = 'Concombre'";

$result1 = mysql_query($query1);



}


Les $match[X][$i] sont les occurrences d'expressions regulieres.

Quelqu'un aurait une idee ? Merci de votre aide.


Ckryo

13 réponses

ckryo Messages postés 17 Date d'inscription lundi 18 octobre 2004 Statut Membre Dernière intervention 9 mai 2005
23 mars 2005 à 19:45
Sorry (je suis en irlande..) j'ai oublie d'appliquer tes conseils malalam... Ce sera pour le prochain programme...

Ckryo
3
arnal69130 Messages postés 445 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 22 mars 2007 2
22 mars 2005 à 16:02
Salut,
Ta requête ne dépend pas de $i, c'est donc la même à chaque passage de la boucle ;o)

Arno
0
tardigrade Messages postés 208 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 décembre 2008
22 mars 2005 à 16:37
Euh j'ai pas compris grand chose. mais peut etre que:




for ($i= 0 ; $i < count($match[0]) ; $i++)

{

$new_match2 = str_replace (',','.',$match[2][$i]);

echo " name: ".$match[1][$i]."\n";

echo " 1er Prix: ".$new_match2."\n";

echo " 2e prix: ".$match[3][$i]."\n";

echo " 3e prix: ".$match[4][$i]."\n";

echo "
";

echo "
";

$query1 "update trinkaus set 2eprix '5.4' where webname = 'Concombre'";

$result1 = mysql_query($query1);



echo(
str_repeat(' ',2048)); // ou 4096????

flush();

sleep(3);




}



ca permet de jouer entre l'affichage et l'avancement de tes mises a jour...
0
tucsoufle Messages postés 1250 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 30 septembre 2007 1
22 mars 2005 à 17:19
salut

ce que arnal a voulu dire, c'est a quoi bon faire ta requete dans une boucle

si au fur et à mesure de ta boucle la requete reste la meme

or ici, c'est le cas, si $i= 0 ou si $i=10 : la requete ne change pas !



en conclusion :

ecrire ça :


for ($i=0 ; $i < count($match[0]) ; $i++)

{

$new_match2 = str_replace (',','.',$match[2][$i]);

echo " name: ".$match[1][$i]."\n";

echo " 1er Prix: ".$new_match2."\n";

echo " 2e prix: ".$match[3][$i]."\n";

echo " 3e prix: ".$match[4][$i]."\n";

echo "
";

echo "
";

$query1 "update trinkaus set 2eprix '5.4' where webname = 'Concombre'";

$result1 = mysql_query($query1);



}




ou ca :


for ($i=0 ; $i < count($match[0]) ; $i++)

{

$new_match2 = str_replace (',','.',$match[2][$i]);

echo " name: ".$match[1][$i]."\n";

echo " 1er Prix: ".$new_match2."\n";

echo " 2e prix: ".$match[3][$i]."\n";

echo " 3e prix: ".$match[4][$i]."\n";

echo "
";

echo "
";

}


$query1 "update trinkaus set 2eprix '5.4' where webname = 'Concombre'";

$result1 = mysql_query($query1);




c'est la meme chose

Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
Mon site Internet
0

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

Posez votre question
ckryo Messages postés 17 Date d'inscription lundi 18 octobre 2004 Statut Membre Dernière intervention 9 mai 2005
22 mars 2005 à 17:40
oh la la !! desole je me suis trompe ! en fait le code est :




for ($i= 0 ; $i < count($match[0]) ; $i++)

{

$new_match2 = str_replace (',','.',$match[2][$i]);

echo " name: ".$match[1][$i]."\n";

echo " 1er Prix: ".$new_match2."\n";

echo " 2e prix: ".$match[3][$i]."\n";

echo " 3e prix: ".$match[4][$i]."\n";

echo "
";

echo "
";

$query1 "update trinkaus set 2eprix '5.4' where webname = '
$match[1][$i]
'";

$result1 = mysql_query($query1);



}




Et la ca ne marche tjs pas ....



Vraiment desole de l'erreur !

Ckryo
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
22 mars 2005 à 17:47
Hello,



tu as teste ce que contient ton $match[1][$i] apparemment, et il contient bien une valeur correcte pour ton champ ?
0
arnal69130 Messages postés 445 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 22 mars 2007 2
22 mars 2005 à 17:50
Si tu remplace ta requête UPDATE par une requête SELECT, avec la même boucle et la même clause WHERE, as-tu un résultat ? Y'a-t-il des enregistrements correspondant à ces conditions ?

Arno
0
arnal69130 Messages postés 445 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 22 mars 2007 2
22 mars 2005 à 17:52
ok malam, même idée ;o)
0
ckryo Messages postés 17 Date d'inscription lundi 18 octobre 2004 Statut Membre Dernière intervention 9 mai 2005
22 mars 2005 à 20:21
Premierement merci pour ces reponses !



Oui j'ai bien teste ce que contient $match[1][$i] et j'ai bien les valeurs que j'espere...

J'arrive pas trop a comprendre car si je retire la requete de la boucle et que je fais un test particulier du genre

$query1 "update trinkaus set 2eprix '5.4' where webname = 'Concombre'";

et ben ca marche....

mais la requete dans une boucle avec la variable $match[1][$i] (qui par
definition doit changer tout le temps) ne fonctionne pas du tout...

Je suis tt pres de finir ce programme et j'arrive pas a trouver le dernier element !!!






Ckryo
0
arnal69130 Messages postés 445 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 22 mars 2007 2
23 mars 2005 à 09:06
Je me permets d'insister, mais es-tu sur que tu as les valeurs que tu veux dans $match[1][$i] ? il n'y a pas un espace en trop à droite ou à gauche ?
=> as-tu essayer de faire des SELECT ?

Arno
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
23 mars 2005 à 09:42
Oui, insistons, lol ;-)

Ckryo, $match[n][m] est un tableau multidimensionnel.

Il existe donc avant que tu ne le parcoures dans ta bloucle.

Fais donc, hors de ta boucle, des tests pour faire ta requete sur $match[1][0], $match[1][1] etc...

Pour debugger ton script, verifie bien que $i ne depasse pas la taille
de ton tableau sur $match[1]. (par exemple, fais des echo $i).



Au passage : on ecrit
, on ferme les balises
, les balises doivbent toujours etre en majuscule, et on ne
met jamais au grand jamais de count() dans une boucle.

Pourquoi ? Le for () evalue a chaque iteration l'expression qu'on lui donne. Donc le count() est refait i fois.

Alors qu'un simple :

$cpt = count ($match[0]);

for ($i = 0; $i < $cpt; $i ++)

est beaucoup plus optimise.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
23 mars 2005 à 09:42
heu...en MINUSCULE, les balises, en minuscule, pas en majuscule, lol !!
0
ckryo Messages postés 17 Date d'inscription lundi 18 octobre 2004 Statut Membre Dernière intervention 9 mai 2005
23 mars 2005 à 19:43
Je vous remercie de vos conseils !!!

J'ai bien sur verifie que le tableau multidimensionnel possedait les valeurs voulues...

c'est vraiment important pour moi.. j'ai cherche un peu de mon
cote et j'ai resolu le systeme d'une maniere assez bizarre, ce qui me
fait penser que je suis pour l'instant plus un bidouilleur qu'un
programmeur. Vu que je n'arrivais pas a utiliser le tableau
multidimensionnel, j'ai utilise une pichenette en desespoir de cause et
cela a marche. Pourquoi ? alors la, je vous jure je ne sais pas
pourquoi ....

Voici le code si ca interesse qq'un :



for ($i= 0; $i < count($match[0]) ; $i++)

{

$new_match2 = str_replace (',','.',$match[2][$i]);

$new_match3 = str_replace (',','.',$match[3][$i]);


echo " name: ".$match[1][$i]."\n";


echo " 1er Prix: ".$new_match2."\n";


echo " 2e prix: ".$match[3][$i]."\n";


echo " 3e prix: ".$match[4][$i]."\n";



$new_match10 = $match[1][$i];

$query1 "update trinkaus set bid '$new_match2' where webname = '$new_match10'";

$result1 = mysql_query($query1);

$query2 "update trinkaus set offer '$new_match3' where webname = '$new_match10'";

$result2 = mysql_query($query2);

}



En rouge la ligne rajoutee ...
j'arrive pas vraiment a comprendre pkoi ca marche mais bon, en tout
cas, cette fois ca marche... si quelqu'un peut trouver qqchose ..



Merci encore !






Ckryo
0
Rejoignez-nous