Array, do, while, break, ou continue ?

Résolu
Bonjour,
alors voila un problème sur lequel je galère depuis 3 jours, je viens demander un peu d'aide =>

je veux afficher un résultat en forme de tableau, sur 2 colonnes horizontale maximum
et tout le résultat en vertical

je dois afficher comme ceci :

result1 - result2
result3 - result4
result5 - result6
etcetc jusqu'au nombre maximal récupéré en base


pour le moment,
j'ai une requête qui recup le nombre maxi:

<?php
$uuuuuuuuuuu = mysql_query("SELECT COUNT(*) AS nomdelacatego from categoriedescodes WHERE premierelettre = 'A' OR premierelettre = 'B' OR premierelettre = 'C' OR premierelettre = 'D' OR premierelettre = 'E' ORDER BY nomdelacatego");
$doggggg = mysql_fetch_array($uuuuuuuuuuu);
$nombredecolonnes= $doggggg['nomdelacatego'];

ok, donc la c'est bon, j'ai le nombre maxi de result ,
ensuite pour recup les result,
<?php
$premsql = mysql_query("select * from categoriedescodes WHERE premierelettre = 'A' OR premierelettre = 'B' OR premierelettre = 'C' OR premierelettre = 'D' OR premierelettre = 'E' ORDER BY nomdelacatego");
$nb1='0';
while ($doone = mysql_fetch_array($premsql) )
{
$nb1++;
// mes result
}
?>

mais comment faire ?

si je fais une boucle normale en while, le tableau s'affiche bien mais sous cette forme:

result1
result2
result3 etcetc

et si je fais un "for"

mon résultat est comme cela:

result1 - result1
result2 - result2
etcetc...

merci de votre aide ;), cdlt...



--
----------------------------------------------------------------------
/ La vie ne vaut rien mais rien ne vaut la vie !!!!! /
----------------------------------------------------------------------

4 réponses

  1. Contributeur
    Et moi je ferai ça :

    $nbResultsPerLine = 2;
    $currentResultIndex = 1;
    $nbOfResults = count(mysql_fetch_array($premsql));
    echo('<table><tr>');
    while($donnee = mysql_fetch_array($premsql)){
       if($currentResultIndex%$nbResultsPerLine != 0){
          echo('<td>'.$donnee['madonnees'].'</td>');
       }else{
          echo('<td>'.$donnee['madonnees'].'</td></tr>');
          if($currentResultIndex < $nbOfResults) echo('<tr>');
       }
       $currentResultIndex++;
    }

    Comme ça en plus tu peux changer le nombre de résultats à mettre par ligne :)
    Je n'ai pas testé y aura p'tete un ou deux effets de bords :P
    1. Contributeur
      Bien joué pour le modulo ;)
    2. Contributeur
      ;-)
    3. merci, je teste de suite, je vous dis cela ;)
    4. allllllllllllllllllllez yessssssssss ;)

      super, merci à vous 2, je poste mon code si cela peut servir un jour à quelqu'un !!!!!

      ======================
      <table align="center" width="600" border="2" bgcolor="#FFFFCC">
      <tr align="center">
      <td><br />
      <table>
      <?php
      $uuuuuuuuuuu = mysql_query('SELECT COUNT(*) AS nomdelacatego from categoriedescodes WHERE nomdelacatego regexp "^[ABCDE]" ORDER BY nomdelacatego');
      $doggggg = mysql_fetch_array($uuuuuuuuuuu);
      $totaldecmbres = $doggggg['nomdelacatego'];
      $nombredecolonnespremcatego = $totaldecmbres;
      $premsql = mysql_query('select * from categoriedescodes WHERE nomdelacatego regexp "^[ABCDE]" ORDER BY nomdelacatego');
      $nbResultsPerLine = 2;
      $currentResultIndex = 1;
      $nbOfResults = count(mysql_fetch_array($premsql));
      echo('<tr>');
      while($doone = mysql_fetch_array($premsql)){
      if($currentResultIndex%$nbResultsPerLine != 0){
      ?>
      <td align="center">
      <table width="250" border="0" bgcolor="#FFCCFF">
      <tr>
      <td width="100" align="center"><a href="codesenvente.php?ask=<?php echo $doone['nomdelacatego']; ?>" style="color:#000000;"><img src="<?php echo $doone['imgcodesite']; ?>" alt="<?php echo $doone['nomdelacatego']; ?>" border="0" width="90" height="90" /></a></td>
      <td width="100" align="center"><a href="codesenvente.php?ask=<?php echo $doone['nomdelacatego']; ?>" style="color:#000000;"><?php echo $doone['nomdelacatego']; ?></a></td>
      <td width="50" align="center"><b><font color="#000000">(<?php echo $doone['numberdecetype']; ?>)</font></b></td>
      </tr>
      </table>
      <br /><br />
      </td>
      <?php
      }else{
      ?>
      <td align="center">
      <table width="250" border="0" bgcolor="#FFCCFF">
      <tr>
      <td width="100" align="center"><a href="codesenvente.php?ask=<?php echo $doone['nomdelacatego']; ?>" style="color:#000000;"><img src="<?php echo $doone['imgcodesite']; ?>" alt="<?php echo $doone['nomdelacatego']; ?>" border="0" width="90" height="90" /></a></td>
      <td width="100" align="center"><a href="codesenvente.php?ask=<?php echo $doone['nomdelacatego']; ?>" style="color:#000000;"><?php echo $doone['nomdelacatego']; ?></a></td>
      <td width="50" align="center"><b><font color="#000000">(<?php echo $doone['numberdecetype']; ?>)</font></b></td>
      </tr>
      </table>
      <br /><br />
      </td></tr>
      <?php
      if($currentResultIndex < $nbOfResults) echo('<tr>');
      }
      $currentResultIndex++;
      }
      echo('</tr>');
      ?>
      </table>

      </td>
      </tr>
      </table>
      <br />
    5. Contributeur
      Good for you :)
  2. Contributeur
    Bonjour,
    Pourquoi for ne te convient pas ? Le rendu est le même que tes lignes en gras :$
    1. bjr,
      si je met "for",
      cela fera

      resul1- resul1
      resul2-resul2
      etcetc

      alors que moi il faudrait,

      result1 -result2
      result3 - resul4

      ma boucle doit avoir un souci ===>

      $premsql = mysql_query("select * from categoriedescodes WHERE premierelettre = 'A' OR premierelettre = 'B' OR premierelettre = 'C' OR premierelettre = 'D' OR premierelettre = 'E' ORDER BY nomdelacatego");
      $nb1='0';
      while ($doone = mysql_fetch_array($premsql) )
      {
      $nb1++;
      ?>
      <tr align="center">
      <?php
      //for( $i = 0; $i < 2; $i++ )
      //{
      ?>mes td ici
      <?php
      // continue;
      // echo ''; // cette instruction ne sera jamais exécutée
      //}
      ?>
      </tr>
      <?php
      }
      ?>
      </table>

      1. Contributeur
        Ah oui, je vois (pardon XD)
        Et je vois le problème. Je voudrais alors savoir si tu comptes mettre réellement deux colonnes ou si c'est juste un exemple ?
      2. Contributeur
        Bon alors moi, je ferais quelque chose comme ceci :

        $fin_ligne = false;
        while(){
          if(!$fin_ligne){
            <tr><td>result</td>
            $fin_ligne = true;
          }else{
            <td>result</td></tr>
            $fin_ligne = false;
          }
        }
    2. Contributeur
      Hello,

      Pour info ta requête est un peu lourde. Tu as fait une zone "catégorie" et une zone "première lettre de la catégorie" ? C'est dommage !

      select * from categoriedescodes WHERE premierelettre = 'A' OR premierelettre = 'B' OR premierelettre = 'C' OR premierelettre = 'D' OR premierelettre = 'E' ORDER BY nomdelacatego


      Est équivalent à :

      select * from categoriedescodes WHERE nomdelacatego regexp "^[ABCDE]" ORDER BY nomdelacatego


      Les expressions régulières sont un outil incontournable quelque soit le language
      Mihawk
      "La rigoureusité fait la qualité"
      1. merci Mihawk, je vais utiliser ceci, merci, mais, pour assassintourist,
        oui cette requete est actuellement sur un site, donc
        oui il serait preferable de mettre sur 2 colonnes car la pour le moment
        ca fait une longue page et cela couperait en 2,
        merci....
      2. voila mihawk, les requetes de la page sont changées,merci
        mais la colonne est toujours sur une seul horizontale ;).....
      3. Contributeur
        Et la requête fonctionne toujours ?
      4. oui mihawk, toutes les requetes passent niquel,
        de A a Z et de 0 à 9, c tout bon, c juste que cela s'affiche env ertcial mais que sur 1 seule colonne ;) merci...