Page 1 sur 1

affichage de n résultats par ligne

Posté : 08 juil. 2005, 14:55
par bénédicte
Bonjour,

J'interroge ma base de données et je voudrais contraindre l'affichage: 3 résultats par ligne.

J'ai crée 2 variables :

$nb=3;

$total qui récupère le nb de résultats dans ma base.

Je pense qu'il faut 1 compteur du type :
a) for ($i=1; $i<=$total; $i++)

mais il me manque à lui faire comprendre le principal: afficher 3 résultats par ligne

Voici mon code:

<html>
<head>
</head>
<body>
<?php

//Connexion à la base
include("connect.inc.php");

//déclaration de quelques variables
$nb=3;

/* connection avec MySQL */
mysql_connect($host,$user) or die("Impossible de se connecter à la base de données");
mysql_select_db("$bdd") or die("Base de données inconnue $bdd");

/*Compte le nb de resultat pour afficher 3 résultats par ligne*/
$countres="SELECT COUNT(*) AS qte FROM produits WHERE code_gamme=\"bag\"";
$p = @mysql_query($countres);
$total = @mysql_result($p,'0','qte');

 
$req= "SELECT * FROM produits WHERE code_gamme=\"bag\"";
$res= mysql_query($req);
?>
<table cellpadding="0" cellspacing="0" width="400">
<tr>
<?
      while ($ligne = @mysql_fetch_array($res))
      {
      ?>
      <td> 
      <table cellspacing='0' cellpadding='0' width="150">
      <tr>
      <td><img src="../images/vignettes/<? Print $ligne['produit_vignette']; ?>" width="<? Print $ligne['produit_vignette_largeur']; ?>" height="<? Print $ligne['produit_vignette_hauteur']; ?>" alt="<? Print $ligne['produit_libelle']; ?>"></td>
      </tr>
      <tr>
      <td><? Print $ligne['produit_libelle']; ?></td>
      </tr>
      <tr>
      <td><? Print $ligne["produit_prix"]; ?> €</td>
      </tr>
      </table>
      </td>
      <?}?>
</tr>
</table>
</body>
</html> 
Merci pour votre aide.

Posté : 08 juil. 2005, 15:13
par ouckileou
oui, prend le système du compteur, et utilise le modulo
if ($i%3 == 0) {
   // changer de ligne
}

Posté : 08 juil. 2005, 15:14
par jeff
salut
il a plein de sujet sur ce forum qui traite de ca
sinon regarde la fonction modulo %

affichage de n résultats par ligne

Posté : 08 juil. 2005, 15:25
par bénédicte
Merci ,

J'ai visité le forum et suis tombée sur des sujets mais je n'ai pas tout saisi.

Justement je ne comprends pas la ligne d'écriture
if ($i%3 == 0) { 
   // changer de ligne 
} 
Que dit-elle exactement?

Posté : 08 juil. 2005, 15:29
par ouckileou
le modulo renvoie le reste de la division

2%2 = 0 car 2/2 = 1
3%2 = 5 car 3/2 = 1,5

donc $i%3 vaudra 0 dès que $i sera multiple de 3
donc 0,3,6,9.. etc

donc tous les trois nombres, tu pourras sauter une ligne

c'est ce qu'on utilise aussi pour afficher un tableau avec des rayures par exemple

qaund tu ne comprends pas quelque chose, fais un petit tour dans la doc c'est souvent suffisament bien expliqué :
http://fr.php.net/manual/fr/language.op ... hmetic.php pour le modulo
et plus généralement :
http://fr.php.net/manual/fr/language.operators.php pour tous les opérateurs

affichage de n résultats par ligne

Posté : 08 juil. 2005, 15:43
par bénédicte
C'est vrai que je n'ai pas le réflexe de lire la doc.

A quel endroit faut-il que je mette mes compteurs?

Posté : 08 juil. 2005, 15:45
par ouckileou
et bien pour ce système il faut que tu saches combien de lignes ont été affichées

donc tu initialises ton compteur à 0, et à chaque ligne affichée tu l'incrémentes de 1
et tu insères avant l'affichage de tes données de quoi passer à la ligne suivante, avec ce test pour ne le faire qu'une fois sur trois.

affichage de n résultats par ligne

Posté : 11 juil. 2005, 16:41
par bénédicte
J'ai résolu mon problème en m'aidant en plus de ce Sujet car la méthode n'y était pas:
http://www.phpfrance.com/forums/voir_su ... -image.php

<?php
//Connexion à la base
include("connect.inc.php");

/* connection avec MySQL */
mysql_connect($host,$user) or die("Impossible de se connecter à la base de données");
mysql_select_db("$bdd") or die("Base de données inconnue $bdd");

/*Compte le nb de resultat pour afficher 3 résultats par ligne*/
$countres="SELECT COUNT(*) AS qte FROM produits WHERE code_gamme=\"bag\"";
$p = @mysql_query($countres);
$total = @mysql_result($p,'0','qte');


$req= "SELECT * FROM produits WHERE code_gamme=\"bag\"";
$res= mysql_query($req);

//déclaration de quelques variables
$nb=3;// Nombre de photos souhaiter par ligne
$i=0;
?>
<?    
     if ($total > 0)
     { 
?>
       <table cellpadding="10" cellspacing="0" width="400">
<?        
        while ($ligne = @mysql_fetch_array($res))
        {
           if ($i % $nb == 0)
           {
?>
       <tr>
<?
           }
?>       <td>   
            <table cellspacing="1" cellpadding="0" width="150">
            <tr>
            <td><img src="../images/vignettes/<? Print $ligne['produit_vignette']; ?>" width="<? Print $ligne['produit_vignette_largeur']; ?>" height="<? Print $ligne['produit_vignette_hauteur']; ?>" alt="<? Print $ligne['produit_libelle']; ?>"></td>
            </tr>
            <tr>
            <td><a href="javascript:openwindow('fiche.php?code=<? Print $ligne['code_produit']; ?>')"><? Print $ligne['produit_libelle']; ?></a></td>
            </tr>
            <tr>
            <td>Réf: <? Print $ligne['code_produit']; ?></td>
            </tr> 
            <tr>
            <td><? Print $ligne['produit_prix']; ?> €</td>
            </tr>
            </table>
       </td>
<?         
         
           if ($i % $nb == ($nb - 1))
           {
?>         
       </tr>
<?
           }
           $i++; 
       
        }


        if ($total % $nb == 0)
        {
?>
      </table>
<?      
        }
        else
        {
        $reste = $nb - ($total % $nb
        for ($j = 0; $j < $reste; $j++)
         {
?>
       <td>&nbsp;</td>
<?       
         
         }
?>
       </tr>
       </table>
<?
        } 
     } 
?>

Merci