Tableau PHP et Affichage par colonnes verticales

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics

max6
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 168
Inscription: Dim Mai 18, 2003 1:37

Tableau PHP et Affichage par colonnes verticales

Message le Mar Avr 18, 2006 12:25

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: Tout sélectionner

<?
//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

mumbly
WRInaute discret
WRInaute discret
 
Messages: 70
Inscription: Mer Nov 23, 2005 17:12

Message le Mar Avr 18, 2006 13:06

Tu peux faires comme ca
Code: Tout sélectionner
$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() ;


e-kiwi
Modérateur
Modérateur
 
Messages: 13854
Inscription: Mar Déc 23, 2003 9:04

Message le Mar Avr 18, 2006 13:07

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 ? :) :)

max6
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 168
Inscription: Dim Mai 18, 2003 1:37

Message le Mar Avr 18, 2006 13:18

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


e-kiwi
Modérateur
Modérateur
 
Messages: 13854
Inscription: Mar Déc 23, 2003 9:04

Message le Mar Avr 18, 2006 13:22

>> ca me donnait toujours 31 résultats au lieu des 30 que je demandais ...

qu'est-ce qui te donnait 31 ?

max6
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 168
Inscription: Dim Mai 18, 2003 1:37

Message le Mar Avr 18, 2006 15:02

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: Tout sélectionner
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

alainp
WRInaute discret
WRInaute discret
 
Messages: 99
Inscription: Ven Juin 13, 2003 17:51

Message le Mar Mar 20, 2007 10:25

mumbly a écrit: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: Tout sélectionner
$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


xTrade
WRInaute accro
WRInaute accro
 
Messages: 2259
Inscription: Lun Déc 11, 2006 14:10

Message le Mar Mar 20, 2007 11:48

Une réponse à l'arrache, cela changera du truc qui me gonfle depuis ce matin

Code: Tout sélectionner

$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
Dernière édition par xTrade le Mar Mar 20, 2007 12:06, édité 1 fois.

alainp
WRInaute discret
WRInaute discret
 
Messages: 99
Inscription: Ven Juin 13, 2003 17:51

Message le Mar Mar 20, 2007 11:59

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


xTrade
WRInaute accro
WRInaute accro
 
Messages: 2259
Inscription: Lun Déc 11, 2006 14:10

Message le Mar Mar 20, 2007 12:12

alainp a écrit: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: Tout sélectionner

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


xTrade
WRInaute accro
WRInaute accro
 
Messages: 2259
Inscription: Lun Déc 11, 2006 14:10

Message le Mer Mar 21, 2007 15:55

Tu as résolu ton problème?


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités