Boucle mystérieuse

Eléphanteau du PHP | 15 Messages

18 janv. 2008, 16:51

$requete = mysql_query("SELECT Photo1,Photo2,Photo3,Photo4
					      FROM Annonce;");
					
	$cpt=1;			
	while($champ = mysql_fetch_array($requete) and $cpt!=4)
	{
	echo"$cpt<br>";
	$photo.$cpt=$champ["Photo$cpt"];
	echo"nom:$photo$cpt<br>";
	if($photo.$cpt=="non_disponible.gif")
		{
		$cpt++;
		
		}
	
	 }	
Ca m'affiche :

1
nom:63532800 1200590473.jpeg

Le boucle s'arrete à la premiere image, je ne comprend pas pourquoi!!!!
Auriez vous une réponse logique amon probléme????
Modifié en dernier par Oxley le 18 janv. 2008, 17:18, modifié 1 fois.

d0m
Mammouth du PHP | 1141 Messages

18 janv. 2008, 16:56

essaie avec des opérateurs PHP corrects :
//pas bon
while($champ = mysql_fetch_array($requete) and $cpt!=4) 

//bon
while($champ = mysql_fetch_array($requete) && ($cpt!=4)) 

Eléphanteau du PHP | 15 Messages

18 janv. 2008, 17:02

Salut et merci,

Si je suis ta méthode ca me renvoie ceci :

1
nom:

Je pense qu'il doit y avoir un probléme avec mes ' ' ou " "

Dans cette ligne $photo.$cpt=$champ["Photo$cpt"];

Non?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 janv. 2008, 18:00

Ta boucle parcours les enregistrements ("lignes") retournés par ta requête, ce qui est différent de la liste des valeurs qu'ils contiennent... Tu as vraissemblablement donc 1 seul enregistrement retourné, contenant 4 champs, et ce sont ces 4 champs qu'il te faut parcourir après avoir lu le ou les enregistrements.. :)
Fais un print_r() de $champ, tu verras qu'il s'agit d'un tableau contenant les valeurs de chaque enregistrement qu'il te suffit d'afficher (à l'aide d'une boucle ou non) $champ['Photo1'], $champ['Photo2'], ...


@d0m : utiliser "and" à la place de "&&" n'est pas faux, il s'agit de deux opérateurs logiques différents, la différence se situant au niveau de leur priorité, principallement par rapport à l'affectation :
($champ = mysql_fetch_array($requete) and $cpt!=4) 
// équivaut à écrire
$champ = (mysql_fetch_array($requete) && $cpt!=4)
Ce n'est pas faux, ce n'est juste pas pareil ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 15 Messages

18 janv. 2008, 18:13

Oui merci ryle, je savais qu'on pouvait parcourir le tableau comme tu l'as indiqué, mais je veux faire une boucle pour compte le nombre de photo enregistrer

donc quand le nom de la photo est "non disponible" le compteur s'incrémente de 1, et a la fin si il y a par exemple le compteur a 2, ceci voudra dire qu'on pourra rajouter encore 2 photos.

Je voulais passer par une boucle pour eviter de refaire 4 if.

Je pense que ça doit etre possible avec une boucle car le pauvre qui veut faire pareil avec 100photos il est pas couché:p

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 janv. 2008, 18:23

vivi, c'est possible avec une boucle, mais il te faut distinguer la boucle qui parcours les enregistrements trouvés en base (ce que fait actuellement ton while) et une seconde boucle qui parcourerait les champs de cet enregistrement :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 15 Messages

18 janv. 2008, 19:07

Ah d'accord!!!!!!!!!!!!!

Bon voila le resultat final:
	while($champ = mysql_fetch_array($requete) and $cpt!=4)
	{
	$cpt=0;	
		for($i=0;$i<5;$i++)
		{
			
			if($champ[$i]=="non_disponible.gif")
				{
				$cpt++;
				}
			
		}
		
	
	}		

Tout est nikel merci beaucoup :D