problème avec le foreach

Eléphant du PHP | 77 Messages

22 sept. 2009, 16:16

Bonjour,

J'ai un problème avec le foreach, voici mon code php:
// valeurs par défaut
		if(!is_array($parametre))
			$parametre = array();
			
		// valeur par défaut: langue
		if (!isset($parametre['langue']))
			$parametre['langue'] = $this->langue;	
			
		// valeur par défaut: produit actif				
		if (!isset($parametre['enLigne']))
			$parametre['enLigne']= 'on';
			
		// valeur par défaut des champs à sélectionner
		if (!isset($parametre['champs']))
			$parametre['champs'] = "*";

		// valeur par défaut des tables à sélectionner
		if (!isset($parametre['tables']))
			$parametre['tables'] = "$table_bijou, $table_description, $table_photos, $table_matiere, $table_type, $table_composer  ";
			
		// condition: langue
		if(strlen($parametre['langue']) == 2)
			$condition[] = "and $table_description.langue like '".$parametre['langue']."'";
					
		// conditions: collection
		$condition[] = "and $table_bijou.numCollection = $table_collection.numCollection";
		
		if(!eregi($table_collection, $parametre['tables']))
			$parametre['tables'] .= ",$table_collection";
		
		// condition: type
		$condition[] = "and $table_bijou.numType = $table_type.numType";
		
		// condition: matiere
		$condition[] = "and $table_matiere.numMatiere = $table_composer.numMatiere";
			
		// condition: descriptif
		$condition[] = "and $table_description.numBijoux = $table_bijou.numBijoux";
		
		// condition: composer
		$condition[] = "and $table_bijou.numBijoux = $table_composer.numBijoux";
		
		
		if (isset($parametre['nomCollection']))
			$condition[] = "and libCollection = '" .$parametre['nomCollection']. "'";
		
		// condition: produit actif
		if(isset($parametre['actif']))
			$condition[] = "and $table_bijou.enLigne = 'On'";
			
		// conditions: photos
		$condition[] = "and $table_photos.numBijoux = $table_bijou.numBijoux";
		
		// requete sql
		$commande = "select distinct " .$parametre['champs']. " from " .$parametre['tables']. " where 1 ";
		
		// requete sql: ajout des conditions
		foreach($condition as $cle=>$lesConditions)
		{
			$commande .= ' ' .$lesConditions;
		}	
		
		//echo $commande;
		
		// requete sql: recherche des enregistrements et stockage dans un tableau
		$resultat = $this->req_sql($this->db_NaT, $commande);
		
                [i]foreach($resultat as $cle=>$valeur)
		{
			echo $resultat[$cle]['nomBijoux'];
		} 
		[/i]
		

Voici mon erreur:
Warning: Invalid argument supplied for foreach() in C:\Program Files\EasyPHP 3.0\www\nbijoux\classe_boutique.php on line 301
Array

Merci de votre aide

Eléphant du PHP | 77 Messages

22 sept. 2009, 16:35

J'arrive à afficher la dernière occurrence du résultat de ma requête. Lorsque je fais ma requête dans my sql il y a 30 occurrences. Donc...où sont passés les 29 autres occurrences.

Voici la boucle que j'ai fais:
	
		while($ligne = mysql_fetch_array($resultat, MYSQL_ASSOC)) 
		{
			$cle = $ligne['numBijoux'];
			$tableau["$cle"] = $ligne;				
		}
		
		foreach($tableau as $cle => $valeur)
		{
			echo $cle.'<br>';
			
		foreach($valeur as $value)
			echo $value. '<br>';
		}
	
Merci de votre aide

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

22 sept. 2009, 16:36

Hmm... et si tu fais un var_dump de ta variable $condition ?

Sinon tu peux essayer avec un implode à la place du foreach, mais si le problème vient de la variable, tu auras sans doute le même type d'erreur...
                // requete sql: ajout des conditions
                $commande .= implode(' ', $condition);
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 77 Messages

22 sept. 2009, 16:45

ok, cela permet d'optimiser mon code mais le soucis ne vient pas de là:

Voici d'où vient le problème:
		foreach($tableau as $cle => $valeur)
		{
			echo $cle.'<br>';
			
		foreach($valeur as $value)
			echo $value. '<br>';
		}

Cette syntaxe m'affiche la dernière ligne du résultat de la requête.

Merci de ton aide

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

22 sept. 2009, 17:20

Et que donne dans ce cas un var_dump de ta variable $tableau ?

As-tu vérifié la valeur de $ligne['numBijoux'] ? est-elle bien différente à chaque fois pour ne pas écraser la valeur que tu stockes dans le tableau ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 77 Messages

22 sept. 2009, 18:14

Je ne comprend pas, lorsque je fais:
while($ligne = mysql_fetch_array($resultat, MYSQL_ASSOC)) 
		{
			$cle = $ligne['numBijoux'];
			$tableau["$cle"] = $ligne;
			echo $cpt++;
		}
j'ai 47 occurrences.

Et lorsque je fais:
$cpt = count($tableau);
j'ai 2

Je ne comprend pas.

Merci de votre aide