Page 1 sur 1

Boucle for dans une boucle while

Posté : 30 août 2007, 12:16
par dread
Bonjour à tous!

Je reviens vers vous car je rencontre certaines difficultés à obtenir ce que je souhaite.

Pour explication, je désire générer un fichier xml dont le résultat est issu d'une requete en php.
L'utilisation du fichier xml sera de faire récupérer son contenu par flash pour une galerie photo.

J'arrive à générer le fichier xml mais ce que je voudrais, c'est incrémenter un numéro de 1 à un certain chiffre déterminé par la fonction COUNT qui me calculerait le nombre d'enregistrement total.

Je présente les enregistrements obtenus par ma première requête dans une boucle while et pour l'incrémentation des numéros, j'utilise une boucle for.

Pour le code, voici ce que cela donne:
// Mes enregistrements
$query_rs_produit= "SELECT nom_produit, url_photo_produit FROM tbl_produit WHERE categorie_id=7";
$rs_produit= mysql_query($query_rs_produit, $conn_audureau) or die(mysql_error());

// le nombre de mes enregistrements
$query_rs_compte= "SELECT COUNT(nom_produit) FROM tbl_produit WHERE categorie_id=7";
$rs_compte= mysql_query($query_rs_compte, $conn_audureau) or die(mysql_error());
$row_rs_compte = mysql_fetch_assoc($rs_compte);


//Ce que j'affiche dans mon fichier xml
$xml = '<?xml version="1.0" encoding="ISO-8859-1"?>'.'<images>';
		
	
			while ($row = mysql_fetch_array($rs_produit)) {
			for($i=1;$i<= $row_rs_compte['COUNT(nom_produit)'] ;$i++){
				
				$xml .= '<produit>';
				$xml .= '<nombre>'.$i.'</nombre>';
				$xml .= '<nom>'.$row['nom_produit'].'</nom>';
				$xml .= '<famille>'.$row['url_photo_produit'].'</famille>';
				$xml .= '</produit>';
			}
	;}
			$xml .= '</images>';
A l'heure actuelle, j'ai deux enregistrements donc la valeur du COUNT est 2.
Le problème intervient dans l'affichage puisque voici ce que cela me donne:

Code : Tout sélectionner

<?xml version="1.0" encoding="ISO-8859-1" ?> - <images> - <produit> <nombre>1</nombre> <nom>visdur</nom> <famille>Images/Produits/tati/01.png</famille> </produit> - <produit> <nombre>2</nombre> <nom>visdur</nom> <famille>Images/Produits/tati/01.png</famille> </produit> - <produit> <nombre>1</nombre> <nom>verrapas</nom> <famille>Images/Produits/tati/02.png</famille> </produit> - <produit> <nombre>2</nombre> <nom>verrapas</nom> <famille>Images/Produits/tati/02.png</famille> </produit> </images>
Vous pouvez constater que le résultat est présent 2 fois de suite alors que je ne voudrais que ça:

Code : Tout sélectionner

<?xml version="1.0" encoding="ISO-8859-1" ?> - <images> - <produit> <nombre>1</nombre> <nom>visdur</nom> <famille>Images/Produits/tati/01.png</famille> </produit> - <produit> <nombre>2</nombre> <nom>visdur</nom> <famille>Images/Produits/tati/02.png</famille> </produit> </images>
Le problème vient de ma boucle for, qui répète les enregistrements autant de fois que le résultat de COUNT alors que j'en ai besoin pour générer les numéros.

Comment faire pour obtenir ce que je souhaite?

Si quelqu'un pouvait me donner quelques indications.

Merci par avance.

Posté : 30 août 2007, 12:25
par Ryle
Ca serait pas plus simple de simplement mettre un compteur d'itération dans ton while plutôt que d'exécuter une boucle for() pour chaque itération du while ?
$compteur = 1; // compteur initialisé à 1

while ($row = mysql_fetch_array($rs_produit)) { 

  $xml .= '<produit>'; 
  $xml .= '<nombre>'.$compteur.'</nombre>'; 
  $xml .= '<nom>'.$row['nom_produit'].'</nom>'; 
  $xml .= '<famille>'.$row['url_photo_produit'].'</famille>'; 
  $xml .= '</produit>'; 

  $compteur++; // incrémentation du compteur
} 

Posté : 30 août 2007, 12:29
par dread
Effectivement, ça à l'air de bien mieux fonctionner.

Je te remercie beaucoup pour ta réponse très très rapide qui va me permettre de continuer d'avancer.

A + et bonne continuation à tout le monde.