Tableau PHP et Affichage par colonnes verticales

WRInaute discret
Bonjour

Me voila devant un probleme que je n'arrive décidement pas a gérer .
Je souhaite afficher les résultats d'une requete sql en 3 colonnes mais avec un affichage de haut en bas et non de gauche a droite comme on trouve partout , a croir que personne ne sait le faire , dailleurs apres avoir poster ma question dans plusieurs forum les seuls réponses que j'ai c'est ton code est crade , etc ... mais sans réponses pour autant ... bref , je pense qu'ici on saura me répondre .

Voici une partie de mon code , apres ca je bloque , je n'arrive pas saisir comment aller plus loin :

Code:
<?
//ma connexion

$requete = mysql_query("SELECT * FROM matable where clause = 'cequeje veu' ORDER BY nom LIMIT 0,30");
$nbreponse = mysql_num_rows($requete);
$nbrcol = 3;
$tier = ceil($nbreponse/$nbrcol);
while ($result = mysql_fetch_array($requete))
{
$tableau[] = $result["nom"];
}
for ($i=0; $i<$tier ;  $i++)
{
echo "$tableau[$i]<br>";
}
mysql_close() ;
?>


Ce code affiche evidemment ce que je lui demande soit 30 enregistrements sur 30 lignes ce qui est parfaitement normal .

Comment arreter le compteur a $i<$tier et afficher les 10 enregistrements de haut en bas puis passer a col+1 et ainsi de suiTE


Je vous remercie par avance de votre aide .
Max
 
WRInaute discret
Tu peux faires comme ca
Code:
$requete = mysql_query("SELECT * FROM matable where clause = 'cequeje veu' ORDER BY nom LIMIT 0,30"); 
$nbreponse = mysql_num_rows($requete); 
$tier = ceil($nbreponse/$nbrcol); 
while ($result = mysql_fetch_array($requete)) 
{ 
$tableau[] = $result["nom"]; 
} 
for ($i=0; $i<$nbreponse ;  $i++) 
{
if($i == $tier)
	{echo "</td><td>";$tier=$tier*2;}
echo $tableau[$i]."<br>"; 
} 
echo "</td></tr></table>";
mysql_close() ;
 
WRInaute accro
une varible $j qui part de 0,
si elle vaut 0, tu affiche "<tr><td>
a chaque affichage, elle s incremente
arrivée à $tier, tu affiche </td></tr> et tu la remet à 0

tu as réfléchis combien de temps avant de poser la question ? :) :)
 
WRInaute discret
Tu vas pas me croire certainement mais ca fait 3 jours que je suis dessus .
L'incrémentation de $j j'avais essayé mais sans succés ca me donnait toujours 31 résultats au lieu des 30 que je demandais ...

J'ai meme essayé ac data seek qui placait le pointeur+1 a chaque boucle ... sans succés .

Autant des codes me paraissent simple autant d'autre ont du mal a rentrer .

Je vais essayé les solutions proposés et merci
 
WRInaute accro
>> ca me donnait toujours 31 résultats au lieu des 30 que je demandais ...

qu'est-ce qui te donnait 31 ?
 
WRInaute discret
En fait j'avais fait comme ca , ca me donnait $i =30 donc ca affichait 31 enregistrements dont 1 en double .
J'ai laché l'affaire car je n'ai jms compris pk :

Code:
for ($i=0, $j=0; $i<$tier ;  $j++) 
{ 
if($j == $nbcol) 
{
$j=0;
$i++;
} 
echo "$nom";
}


Si tu teste ac tes données tu verras ce que ca donne .

En tout cas le code de mumbly marche impecc , etant donné que parfois le tier n'est pas forcement un nombr pair j'ai fait des td valign top et ca regle e soucis .

Merci encore
 
WRInaute discret
mumbly a dit:
Tu peux faires comme ca

Bonjour,

Celà fait plusieurs jours que j'essaie d'adapter l'idée de mumbly pour mon problème mais j'ai besoin d'aide.
Celà fonctionne si on utilise la notion de tableau mais je ne peux pas utiliser cette notion

Voilà mon code actuel
Code:
$q1 = mysql_query("SELECT cat, COUNT(*) AS num FROM sites where cat>'' GROUP BY cat ORDER BY cat ASC");
$n1 = mysql_num_rows($q1);
echo "<p><span class="titre">Sélectionnez une catégorie ...</span></p>\n\n";
echo "<div align="center">";
echo "<table class="cadre" width="100%" align="center">\n";
echo "<tr>\n";
echo "<td width="33%">\n";
$i = 0;
while ($r1 = mysql_fetch_array($q1)) {
	echo ". <a href="liens.php?cat=".urlencode($r1["cat"])."">".htmlentities($r1["cat"])."</a> (".$r1["num"].")<br>\n";
      $i++;
      if ($i>17){
          echo "</td><td width="33%">\n";
          $i = 0;
}
}
echo "<br>\n";
echo "</td>\n";
echo "</tr>\n";
echo "</table>\n";
echo "</div>\n\n";

En fonction de certaines quantités de données, çà marche bien mais, parfois, c'est nul

Mon but est de répartir mes données classées en 3 colonnes de haut en bas et de gauche à droite

Si quelqu'un peut me dépanner, merci d'avance
 
WRInaute passionné
Une réponse à l'arrache, cela changera du truc qui me gonfle depuis ce matin

Code:
$NbElements=count($tableau);
if (($NbElements/3)==round($NbElements/3)) $NbLignes=$NbElements/3;
else $NbLignes=floor($NbElements/3)+1;

for ($i=0;$i<$NbLignes;$i++)
{ echo "<tr>";
   for ($col=0;$col<3;$col++)
   { $Pos=$i+$col*$NbLignes;
      echo "<td>";
      if ($pos<$NbElements) echo $tableau[$pos];
      echo "</td>";
   }
  echo "</tr>";
}

A vue de nez, cela doit bien marcher et faire des trucs du genre (si c'est ce que tu demandes) :

0 4 8
1 5 9
2 6
3 7

Dis moi si cela marche (et un bl en remerciement si tu as un pr 7 :wink: )

Edit : petite modification
 
WRInaute discret
Merci xTrade,

C'est surement très bien mais je ne peux pas me servir de la notion de tableau puisque j'extrai les données de la base et que j'obtiens des enbregistrements sous la forme <a href=\"liens.php?cat=".urlencode($r1["cat"])."\">".htmlentities($r1["cat"])."</a>

J'ai essayé avec une mise en tableau mais çà ne créée pas le lien voulu pour chaque enregistrement
 
WRInaute passionné
alainp a dit:
Merci xTrade,

C'est surement très bien mais je ne peux pas me servir de la notion de tableau puisque j'extrai les données de la base et que j'obtiens des enbregistrements sous la forme <a href="liens.php?cat=".urlencode($r1["cat"])."">".htmlentities($r1["cat"])."</a>

J'ai essayé avec une mise en tableau mais çà ne créée pas le lien voulu pour chaque enregistrement

A ta place, je ferais un truc du genre

Code:
while ($tableau = mysql_fetch_object($q1)) ; 

$i=0;
while ($r1 = mysql_fetch_array($q1)) 
{ $tableau[$i++]="<a href="liens.php?cat=".urlencode($r1["cat"])."">".htmlentities($r1["cat"])."</a>";
}
Puis tu traites le tableau comme je l'ai fais
 
Discussions similaires
Haut