PHP : Erreur Double foreach imbriqué

Résolu/Fermé
maverickz Messages postés 49 Date d'inscription lundi 12 octobre 2009 Statut Membre Dernière intervention 10 août 2011 - 22 oct. 2009 à 13:29
alain1967 Messages postés 9 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 22 septembre 2010 - 7 janv. 2010 à 21:49
Bonjour,

J'ai un petit souci avec l'imbrication d'un double foreach qui me donne l'erreur :

Warning: Invalid argument supplied for foreach() in C:\wamp\www\prog\products\show.php on line 26


Je vous donne le contenu du fichier "show.php" qui affiche le tableau et de "functions.php" pour l'appel de la fonction venant de la DB.

show.php
---------------

$tab=showProduct();

echo "<table border='1'>
  	 	  <caption> Products </caption>

	  		<tr>
			 	 <th> ID </th>
			 	 <th> Product Name </th>
			  	 <th> Quantity </th>
			 	 <th> UnitPrice </th>
				 <th> Description </th>
			 	 <th> Edit </th>
				 <th> Delete </th>
		 	</tr>
		 	
		 	"; 

	for ($i = 0; isset($tab[$i]); $i+=sizeof($tab)) {  		
	  		$productID=$tab[$i];
	  			foreach ($tab as $tab[$i] => $row) {
					foreach ($row as $cell) {        <= Ligne 26
		  				
                                             echo "<th> $cell </th>";
					}
				}
		
		echo '<th> <a href="../products/edit.php?productID='.$productID.' "<img border=0 
                                   src="../images/edit.png"/> </a></th>';

              echo '<th> <a href="../products/delete.php?productID='.$productID.' "<img border=0 
                                  src="../images/delete.gif"/> </a></th>'; 			

	  			  	 
	}	
	 	
	echo '</table>'; 




Voila l'appel de la fonction dans la DB du fichier functions.php, elle , elle marche mais elle serait plus propre avec un foreach aussi sans doute ?:-)

// Permet d'afficher la liste complète de tous les produits.
function showProduct() {
	$connect=MySQLConnect();
	$cpt=0;
	$request = mysql_query('SELECT * FROM products');
	while($result = mysql_fetch_array($request)) {	
		$size=mysql_num_fields($request);
			$tab[$size*$cpt] = $result['productID'];
			$tab[$size*$cpt+1] = $result['productName'];
			$tab[$size*$cpt+2] = $result['quantity'];
			$tab[$size*$cpt+3] = $result['unitPrice'];
			$tab[$size*$cpt+4] = $result['description'];
		$cpt++;
	}
	return $tab;
	mysql_close($connect);		
}



Le but du jeu serait que <th> $cell </th> m'affiche chaque produit ligne par ligne dans le tableau et si possible avec les deux échos des liens EDIT et DELETE qui pour le moment sont encore en dehors de la boucle.

Pour ces deux echos, je n'ai pas trouvé comment faire pour que la variable $productID prenne l'ID du produit de chaque ligne, j'ai pensé enlever cette variable et faire un explode($cell) mais sans succès vu l'erreur ;-)


Merci a vous pour votre coup de main et d'avoir pris la peine de me lire.
A voir également:

3 réponses

P@t@ch0n Messages postés 565 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 84
22 oct. 2009 à 13:44
Bonjour,

La structure de ton array à la base n'est pas top.

Tu devrais plutôt t'arranger pour obtenir quelque chose comme :

function showProduct() {
	$tab = array();
	$request = mysql_query('SELECT productId, productName, quantity, unitPrice, description FROM products');
	while($result = mysql_fetch_array($request)) {	
			$tab[$result['productID']]['name'] = $result['productName'];
			$tab[$result['productID']]['quantity'] = $result['quantity'];
			$tab[$result['productID']]['price'] = $result['unitPrice'];
			$tab[$result['productID']]['description'] = $result['description'];
	}
	return $tab;
}
1
alain1967 Messages postés 9 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 22 septembre 2010 3
7 janv. 2010 à 21:49
Bonsoir

Si ça peut aider pour les prochains, un exemple de foreach imbriqué : http://www.infosprog.com/php/foreach
1
maverickz Messages postés 49 Date d'inscription lundi 12 octobre 2009 Statut Membre Dernière intervention 10 août 2011 18
22 oct. 2009 à 15:31
ca fonctionne, je te remercie ;-)
0