PHP : Erreur Double foreach imbriqué

Résolu
maverickz Messages postés 49 Date d'inscription   Statut Membre Dernière intervention   -  
alain1967 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   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 9 Date d'inscription   Statut Membre Dernière intervention   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 49 Date d'inscription   Statut Membre Dernière intervention   18
 
ca fonctionne, je te remercie ;-)
0