Page 1 sur 1

modulo avec une table

Posté : 20 sept. 2008, 16:13
par x@v
Bonjour,
j'essaie de faire un tableau qui affiche maximum 3 colonnes sur autant de ligne qu'il y a de valeur dans ma base de donnée
<div style="border:1px solid red;" paddding:10px;>
	<table>
<?php
$NbrCol = 3; // le nombre de colonnes
$NbrLigne = 9; // le nombre de lignes
for ($i=1; $i<=$NbrLigne; $i++) 
{
   echo '<tr>';
   for ($j=1; $j<=$NbrCol; $j++) 
   {
         // le but est de ne pas afficher le tableau si la requette ne renvoie rien
         $sql="SELECT * FROM produits WHERE id_categorie=$idCategorie";
         $result = $connection->selectTableau($sql);
         if ((!count($result) > 0))
         	echo 'Cette catégorie ne contient pas encore de produit';
         else 
         {
         	$sql="SELECT id, image, nom, prix, description,stockMinimum  FROM produits WHERE id_categorie=$idCategorie";
         	$result = $connection->select($sql);
         	foreach ($result as $row)
         	{
         		$id=$row['id'];
         		$image=$row['image'];
         		$nom=$row['nom'];
         		$prix=$row['prix'];
         		$description=$row['description'];
         		$stockMinimum=$row['stockMinimum'];?>
         		
				<td style="text-align:center; postion:absolute; margin-top:200px;">
         	    	<strong style="text-align:center; postion:absolute; left:0;">
         	    	   <?php echo $nom;?>
         			</strong><br /><?php 
         	    	$tabImage= explode(' ', $image);
         	    	if(isset($tabImage[0]) && !empty($tabImage[0]))
         	    	{
         				echo '
         				<a href="?page=detailProduit&idProduit=<?php echo $id;?>&categorie=<?php echo $idCategorie;?>">
         					<img src="images/'.$tabImage[0].'" 
         					style="border:3px solid #6495ED; height:100px; width:100px;" alt="produit $tabImage[0]" />
         				</a><br />';
         			}
         			else
         			   echo '<img src="img/noImage.jpg" style="height:100px; width:100px;" alt="Aucune image de description" /><br />';?>
         			<strong>
         				<a href="?page=detailProduit&idProduit=<?php echo $id;?>&categorie=<?php echo $idCategorie;?>">Détail de ce produit</a>
         			</strong>
         			
         	    	<strong><?php echo $prix;?>&nbsp;&euro;</strong><br />
         	    	<p>
         	    	   <?php echo nl2br($model->debutTexte($description, 20));?>
         	    	</p>
         			<?php //$panier->setFormulaireAjout('nombre'.$id, $id);?>
         			Nombre de produit en stock < <?php echo $stockMinimum;?>
         			<br /> livraison sour 48h
      			</td>
      <?php }
      }
   }           
            echo '</tr>';
            $j=1;
}?>
</table></div>

Posté : 20 sept. 2008, 18:53
par savageman
Bonjour,

C'est quoi ton problème ? Tu as une erreur ? Tu n'y arrives pas (dans ce cas, précise un peu : qu'est-ce que tu n'arrives pas à faire) ?

Posté : 20 sept. 2008, 21:48
par x@v
sa ne fonctionne pas
je comprend pas trop le concept
<div style="border:1px solid red; paddding:10px;">
	<table>
<?php
         // le but est de ne pas afficher le tableau si la requette ne renvoie rien
         $sql="SELECT * FROM produits WHERE id_categorie=$idCategorie";
         $result = $connection->selectTableau($sql);
         if ((!count($result) > 0))
         	echo 'Cette catégorie ne contient pas encore de produit';
         else 
         {                                
         	$sql="SELECT id, image, nom, prix, description,stockMinimum  FROM produits WHERE id_categorie=$idCategorie";
         	$result = $connection->select($sql);
         	foreach ($result as $row)
         	{
         		$id=$row['id'];
         		$image=$row['image'];
         		$nom=$row['nom'];
         		$prix=$row['prix'];
         		$description=$row['description'];
         		$stockMinimum=$row['stockMinimum'];?>
         		<tr><?php
                $j=0;
                $nombreCol= 3;
                if($nombreCol % $j == 2) echo '<td style="text-align:center; postion:absolute; margin-top:200px;">'; 
                {?>
         	    	<strong style="text-align:center; postion:absolute; left:0;">
         	    	   <?php echo $nom;?>
         			</strong><br /><?php 
         	    	$tabImage= explode(' ', $image);
         	    	if(isset($tabImage[0]) && !empty($tabImage[0]))
         	    	{
         				echo '
         				<a href="?page=detailProduit&idProduit=<?php echo $id;?>&categorie=<?php echo $idCategorie;?>">
         					<img src="images/'.$tabImage[0].'" 
         					style="border:3px solid #6495ED; height:100px; width:100px;" alt="produit $tabImage[0]" />
         				</a><br />';
         			}
         			else
         			    echo '<img src="img/noImage.jpg" style="height:100px; width:100px;" alt="Aucune image de description" /><br />';?>
         			<strong>
         				<a href="?page=detailProduit&idProduit=<?php echo $id;?>&categorie=<?php echo $idCategorie;?>">Détail de ce produit</a>
         			</strong>
         			
         	    	<strong><?php echo $prix;?>&nbsp;&euro;</strong><br />
         	    	<p>
         	    	   <?php echo nl2br($model->debutTexte($description, 20));?>
         	    	</p>
         			<?php //$panier->setFormulaireAjout('nombre'.$id, $id);?>
         			Nombre de produit en stock < <?php echo $stockMinimum;?>
         			 livraison sour 48h
      				<?php
                 }
                     if($nombreCol % $j == 2) 
                        echo '</td>';         
            echo '
            </tr>';
            $j++;       
         }
   }?>
</table></div>

Posté : 21 sept. 2008, 01:00
par sadeq
T'as pas besoin du modulo pour ça, le concept d'affichage par colonnes fixes est simple, je te l'explique:
Dans la boucle qui lit le résultat SQL, on doit en principe gérer un enregistrement à la fois qui doit être placé dans une colonne de la table. Le principe est de compter le nombre de colonnes affichées jusqu'à arriver au nombre maxi de colonnes prévu, puis revenir à la ligne dans la table.

L'algorithme est donc le suivant :
  • 0 : Déterminer la limite max de colonnes à afficher par une constante
    1. Initialiser un compteur i à 1 avant la boucle de lecture du résultat SQL
    2. Dans la boucle, commencer par tester si le compteur est à 1, et dans ce cas placer un début de ligne de table <tr>
    3. Afficher une colonne de table <td> avec son contenu qui est la donnée lue du résultat SQL
    4. Incrémenter le compteur i de 1
    5. Tester si le compteur incrémenté dépasse la limite max de colonnes à afficher, et dans ce cas, afficher une fin de ligne de table </tr> puis réinitialiser le compteur à 1
    6. Reboucler
Et voilà, il te reste maintenant à coder cet algorithme en php :wink: