PHP : Erreur Double foreach imbriqué

Résolu
maverickz Messages postés 50 Statut Membre -  
alain1967 Messages postés 10 Statut Membre -
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 603 Statut Membre 85
 
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 10 Statut Membre 3
 
Bonsoir

Si ça peut aider pour les prochains, un exemple de foreach imbriqué : http://www.infosprog.com/php/foreach
1
maverickz Messages postés 50 Statut Membre 18
 
ca fonctionne, je te remercie ;-)
0