Array, do, while, break, ou continue ?

Résolu/Fermé
cheese42 Messages postés 860 Date d'inscription mardi 11 septembre 2007 Statut Membre Dernière intervention 10 octobre 2018 - 24 févr. 2012 à 09:55
Mihawk Messages postés 4313 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 - 24 févr. 2012 à 15:41
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...







4 réponses

Mihawk Messages postés 4313 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 845
24 févr. 2012 à 14:20
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
AssassinTourist Messages postés 5709 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 1 310
24 févr. 2012 à 15:09
Bien joué pour le modulo ;)
0
Mihawk Messages postés 4313 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 845
24 févr. 2012 à 15:22
;-)
0
cheese42 Messages postés 860 Date d'inscription mardi 11 septembre 2007 Statut Membre Dernière intervention 10 octobre 2018 120
24 févr. 2012 à 15:25
merci, je teste de suite, je vous dis cela ;)
0
cheese42 Messages postés 860 Date d'inscription mardi 11 septembre 2007 Statut Membre Dernière intervention 10 octobre 2018 120
24 févr. 2012 à 15:37
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
Mihawk Messages postés 4313 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 845
24 févr. 2012 à 15:41
Good for you :)
0
Mihawk Messages postés 4313 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 845
Modifié par Mihawk le 24/02/2012 à 11:41
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
cheese42 Messages postés 860 Date d'inscription mardi 11 septembre 2007 Statut Membre Dernière intervention 10 octobre 2018 120
24 févr. 2012 à 12:45
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
cheese42 Messages postés 860 Date d'inscription mardi 11 septembre 2007 Statut Membre Dernière intervention 10 octobre 2018 120
24 févr. 2012 à 12:54
voila mihawk, les requetes de la page sont changées,merci
mais la colonne est toujours sur une seul horizontale ;).....
0
Mihawk Messages postés 4313 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 845
24 févr. 2012 à 14:01
Et la requête fonctionne toujours ?
0
cheese42 Messages postés 860 Date d'inscription mardi 11 septembre 2007 Statut Membre Dernière intervention 10 octobre 2018 120
24 févr. 2012 à 14:10
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
AssassinTourist Messages postés 5709 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 1 310
24 févr. 2012 à 10:35
Bonjour,
Pourquoi for ne te convient pas ? Le rendu est le même que tes lignes en gras :$
0
cheese42 Messages postés 860 Date d'inscription mardi 11 septembre 2007 Statut Membre Dernière intervention 10 octobre 2018 120
24 févr. 2012 à 11:35
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
AssassinTourist Messages postés 5709 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 1 310
24 févr. 2012 à 11:40
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
AssassinTourist Messages postés 5709 Date d'inscription lundi 16 janvier 2012 Statut Contributeur Dernière intervention 29 février 2024 1 310
24 févr. 2012 à 13:51
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