Deux boucles while

Deux boucles while - PHP - Programmation

Marsh Posté le 24-08-2005 à 03:00:38    

Salut !
 
Alors voilà je voudrais faire 2 boucles while avec les membres infos...
Mais sa ne marche pas ! La 1ere se fait, la 2e ne s'affiche pas !
 
Y'a moyen de faire que sa marche ?
 
Merci

Reply

Marsh Posté le 24-08-2005 à 03:00:38   

Reply

Marsh Posté le 24-08-2005 à 03:03:36    

Un exemple de code par hasard ? Non, parce que c'est pas que ta question n'est pas claire, mais quand même :D

Reply

Marsh Posté le 24-08-2005 à 03:16:54    

while($recupere_membre = mysql_fetch_assoc($envoi_membre))
{
 $NombreDeTrouves = $NombreDeTrouves-1;
}
 
echo $NombreDeTrouves; //Affiche un nombre en fonction du nombre de boucles...
 
while($recupere_membre = mysql_fetch_assoc($envoi_membre))
{
 echo "blabla"; //Affiche differentes informations...
}

Reply

Marsh Posté le 24-08-2005 à 03:36:08    

Bon, déjà, j'en connais qui te diront que si tu dois utiliser deux boucles identiques (pour la condition), tu peux probablement obtenir le même résultat en une seule :)
 
Sinon, mysql_fetch_x lit une ligne du résultat d'une requête et la renvoit, jusqu'à ce qu'il n'y ait plus de lignes auquel cas il retourne false. C'est exactement ce qui se produit dans ta deuxième boucle : la première a parcouru tout les résultats de la requête, mysql_fetch_assoc n'a donc plus rien à renvoyer :)
 
Solution : retourner au début du dataset avec mysql_data_seek :)
 
Ceci dit, telle qu'elle est écrite là, ta première boucle est un peu inutile, mysql_num_rows ou un count sql t'aurait donné le même résultat de manière plus rapide :)

Reply

Marsh Posté le 24-08-2005 à 03:39:14    

T'as un exemple à donner ? :D

Reply

Marsh Posté le 24-08-2005 à 03:46:40    

le manuel en est rempli :D
 

Code :
  1. while ($kkwet = mysql_fetch_array($dataset)){
  2. // blabla
  3. }
  4. mysql_data_seek($dataset,mysql_num_rows($dataset)-2) // repositionne sur l'avant dernier résultat de la requête
  5. while ($kkwet = mysql_fetch_array($dataset)){
  6. // blabla
  7. }


 
Hop, les 2 en 1 :D
 
//edit pour correction de conneries dues au manque de sommeil :D


Message édité par naceroth le 24-08-2005 à 03:59:12
Reply

Marsh Posté le 24-08-2005 à 03:56:10    

C'est bon sa marche (ouff...)
 
Et sinon, pour repositionner au tout début j'fais comment ?...
 
Merci ^^


Message édité par Tilix le 24-08-2005 à 04:03:44
Reply

Marsh Posté le 24-08-2005 à 04:03:21    

Ola oui, il est temps que j'aille dormir moi...
 
Bon, le code est corrigé, pour ton autre question : RTFM, la réponse est marquée en toute lettre (enfin, en chiffre) dans le manuel, un peu de bonne volonté que diantre :D
 

Reply

Marsh Posté le 24-08-2005 à 04:09:34    

J'ai fais : mysql_data_seek($envoi_membre,0);
 
Sa va plus vite pour reprendre à zero... sans me servir de mysql_num_rows()

Reply

Marsh Posté le 24-08-2005 à 15:41:56    

Ouais. Enfin, c'était pas vraiment le but de mon exemple non plus, je voulais plutôt te montrer un exemple d'utilisation pour remplacer ta première boucle :)

Reply

Marsh Posté le 24-08-2005 à 15:41:56   

Reply

Marsh Posté le 24-08-2005 à 15:52:43    

Plus propre (et encore...) :

Code :
  1. $tab = mysql_fetch_assoc($query);
  2. foreach($tab AS $one){
  3. // ...
  4. }
  5. foreach($tab AS $one){
  6. // ...
  7. }


 
Edit : j'suis allé trop vite (merci naceroth), le bon truc c'est :

Code :
  1. while($tab[] = mysql_fetch_assoc($query));
  2. foreach($tab AS $one){
  3. // ...
  4. }
  5. foreach($tab AS $one){
  6. // ...
  7. }


Message édité par kalex le 24-08-2005 à 16:11:27
Reply

Marsh Posté le 24-08-2005 à 15:54:40    

Ouais, dommage que ça donne pas le même résulat :D

Reply

Marsh Posté le 24-08-2005 à 15:56:23    

Où est la diff ?

Reply

Marsh Posté le 24-08-2005 à 16:00:05    

Sa boucle parcourt tous les résultats d'un dataset, la tienne tous les champs d'un seul résultat (ce qui est un peu idiot puisque l'utilisation de mysql_fetch_assoc implique que tu connaîs le nom des champs...) :)


Message édité par naceroth le 24-08-2005 à 16:00:36
Reply

Marsh Posté le 24-08-2005 à 16:05:13    

:o
Ah ouais, remplacez la 1ere ligne par
 
while($tab[] = mysql_fetch_assoc($query));


Message édité par kalex le 24-08-2005 à 16:06:18
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed