Update MySql dans une boucle [Résolu]

Signaler
Messages postés
17
Date d'inscription
lundi 18 octobre 2004
Statut
Membre
Dernière intervention
9 mai 2005
-
Messages postés
17
Date d'inscription
lundi 18 octobre 2004
Statut
Membre
Dernière intervention
9 mai 2005
-
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

Messages postés
17
Date d'inscription
lundi 18 octobre 2004
Statut
Membre
Dernière intervention
9 mai 2005

Sorry (je suis en irlande..) j'ai oublie d'appliquer tes conseils malalam... Ce sera pour le prochain programme...

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

Arno
Messages postés
208
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 décembre 2008

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...
Messages postés
1250
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
30 septembre 2007
1
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
Messages postés
17
Date d'inscription
lundi 18 octobre 2004
Statut
Membre
Dernière intervention
9 mai 2005

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
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Hello,



tu as teste ce que contient ton $match[1][$i] apparemment, et il contient bien une valeur correcte pour ton champ ?
Messages postés
445
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
22 mars 2007
1
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
Messages postés
445
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
22 mars 2007
1
ok malam, même idée ;o)
Messages postés
17
Date d'inscription
lundi 18 octobre 2004
Statut
Membre
Dernière intervention
9 mai 2005

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
Messages postés
445
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
22 mars 2007
1
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
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
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.
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
heu...en MINUSCULE, les balises, en minuscule, pas en majuscule, lol !!
Messages postés
17
Date d'inscription
lundi 18 octobre 2004
Statut
Membre
Dernière intervention
9 mai 2005

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