boucle for fait planter le navigateur

Eléphanteau du PHP | 31 Messages

23 janv. 2008, 15:25

Bonjour,
Alors voila j'essaye de donner des id différents à mes menus déroulants en exécutant une boucle FOR le problème et qu'elle me fait tout planter. Avant d'implanter cette boucle tout marcher normalement sauf que tous les menus déroulants avais le même id ce qui n'est pas très pratique lorsque je veux récupérer une valeur contenu dans l'un d'eux.
J'exécute donc une requete qui me retourne le nombre de menu qu'il y aura. Puis j'essaye de mettre en place l'affichage des éléments souhaité et c'est là que le probleme apparaît.
<?php
		$link=mysql_connect("localhost","root","")  //Connexion a phpmyadmin
		or die("A pas marché : ".mysql_error());
		
		mysql_select_db("creapassion");  		//Selection de la bdd
		
		$requete="SELECT * FROM `pitchouns`;";		//Selection de la table produits pour l'affichage de chaque produits
		$requete1="SELECT * FROM `coul_pitchouns`;"; //Selection de la table couleur_serv_drap pour la selection d'une couleur des draps et serviettes par les clients
		$requete2="SELECT count(pit_id) FROM `pitchouns`;";
	//	echo $requete; //Affichage de la requete pour vérification
		
		$resultat=mysql_query($requete);	//Execution de la requete
		$result = mysql_query($requete2);
		
		$nbr_menu_deroulant=mysql_fetch_row($result); // Le nombre retourner sera utilisé pour l'identifiant des menu déroulants
		echo $nbr_menu_deroulant[0];
		
		echo "<table>";
		while($ligne=mysql_fetch_assoc($resultat)) {	//Affichage des résultats
			echo "<tr> <td>";
			echo $ligne['pit_nom']," - ",$ligne['pit_prix'],"€ "," - &nbsp; </td>";	//Affichage du nom et du prix
			
			echo "<td>";
			
			$resultat1=mysql_query($requete1);	//Execution de la requete pour la selection des couleurs des serviettes et des draps
			
			for($i=1; $i<=$nbr_menu_deroulant; $i++)
			{
				echo $i;
				echo "<select name=\"id[",$i,"]>";		//Création du menu deroulant
				while($couleur=mysql_fetch_assoc($resultat1))
				{
					echo "<option value=\"",$couleur['coul_pit_nom'],"\">",$couleur['coul_pit_nom'],"</option> \n";
				}
				echo "</select>";
			}
			echo "&nbsp; </td>";
			
			echo "<td><a href=\"",$ligne['pit_img'],"\"><img src=\"",$ligne['pit_vignette'],"\" /></a> &nbsp;</td>";	//Affichage de l'image réduite avec lien sur la taille normal
			echo "<td><a href=\"panier.php?action=ajout&l=",$ligne['pit_nom'],"&q=1&p=",$ligne['pit_prix'],"&po=",$ligne['pit_poids'],"\" onclick=\"window.open(this.href, '', 'toolbar=no, location=no, directories=no, status=yes, scrollbars=yes, resizable=yes, copyhistory=no, width=600, height=350'); return false;\">Ajouter au panier</a></td>";
			echo "</tr> \n";
		}
		echo "</table>";
		
		mysql_close($link);				//Fermeture de la connexion
	?>
J'espère être assez clair et que ce n'est pas un problème idiot.
you are bad

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

23 janv. 2008, 15:38

Tu parles d'id et pourtant tu utilises des name... pas trop grave.

Le plus simple et cohérent est de donner en attribut id l'id qui correspond à la couleur dans la table "coul_pitchouns"... ça c'est pour la pratique.

Mais attention tu as une boucle (couleurs) dans une boucle (produits).
Il te faut donc associer chaque liste au produit et non à la couleur.

Donc :
echo "<select name=\"".$ligne['pit_id']."\">"; // avec le vrai nom du champ id !!
avant la boucle et les options à l'interrieur.
for($i=1; $i<=$nbr_menu_deroulant; $i++) 
Avec ça tu as une liste déroulante de couleurs par produit... c'est bien ce que tu voulais :-k

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

ViPHP
ViPHP | 4039 Messages

23 janv. 2008, 15:42

Tu as vu un peu ce que tu lui fais faire, à ton serveur ? :)
 while($ligne=mysql_fetch_assoc($resultat)) {  
            for($i=1; $i<=$nbr_menu_deroulant; $i++)
                while($couleur=mysql_fetch_assoc($resultat1)) 
D'habitude on dirait que cumuler deux boucles, c'est risqué, mais trois.. :(

de plus, ta requête est effectuée avant ton for, donc dés qu'il est passé une fois, le while à déjà traversé tous les résultats, donc, ben y'en a plus..

Et pour la condition du for, je vois $nbr_menu_deroulant. Or, visiblement, tu sais que c'est un tableau (cf. "echo $nbr_menu_deroulant[0]; "), donc y'a un truc à corriger la.

Pour le surplus, requete1,2,3 résultat1,2,3,N.. y'a de quoi s'embrouiller non ?
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphanteau du PHP | 31 Messages

23 janv. 2008, 16:06

Merci pour vos réponse rapide.

@Truc : Avec ta solution de mettre :
echo "<select name=\"".$ligne['pit_id']."\">"; // avec le vrai nom du champ id !!
Mes menu déroulant prennent bien les id voulu et je n'ai plus besoin de ma boucle for. (pit_id étais le vrai nom de mes id)
Je te remercie pour ton aide.

@Berzemus : Je sais qu'il n'est pas bon d'imbriqué beaucoup de boucle mais n'étant pas un expert je fait du mieux que je peut.
Pour le nom des requêtes et résultats je sais qu'ils ne sont pas explicite c'est pour cela que je met pleins de commentaires dans mon code comme ca lorsque je relie je sais à quoi ca correspond.

En tout cas mon problème et résolu et je vous en remercie.
you are bad