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
    2
    1. Contributeur
      Bien joué pour le modulo ;)
      0
    2. Contributeur
      ;-)
      0
    3. merci, je teste de suite, je vous dis cela ;)
      0
    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 />
      0
    5. Contributeur
      Good for you :)
      0
  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
    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....
      0
    2. voila mihawk, les requetes de la page sont changées,merci
      mais la colonne est toujours sur une seul horizontale ;).....
      0
    3. Contributeur
      Et la requête fonctionne toujours ?
      0
    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...
      0
  3. Contributeur
    Bonjour,
    Pourquoi for ne te convient pas ? Le rendu est le même que tes lignes en gras :$
    0
    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>

      0
      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 ?
        0
      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;
          }
        }
        0