8800 sujets

Développement web côté serveur, CMS

Bonjour à tous Smiley jap

voilà quelques temps que j'essaye d'effectuer une requête PHP sur 3 colonnes exclusivement avec des div.

Je commence par vous montrer un screen de ce que je veux en sortie utilisateur:
http://internet.umour.free.fr/screen_pb_cat.jpg

Pour cela j'ai utilisé un affichage en CSS de 3 div dont voici le code:
.cat_trowleft {float: left; width: 190px;padding: 0 4px 4px 4px}

.cat_trowright {float: right; width: 190px; padding: 0 4px 4px 4px}

.cat_middle {margin-left: 200px; margin-right: 200px; padding: 0 4px 4px 4px; height: 100%}


Puis voici le code HTML (maquette) de ce que j'aimerais recevoir des ma requête SQL
<div class="cat_trowleft">
		<ul>
		<li>Résultat1</li>
		<li>Résultat2</li>
		<li>Résultat3</li
		</ul>
</div>
<div class="cat_trowright">
		<ul>
		<li>Résultat7</li>
		</ul>
</div>
<div class="cat_middle">
		<ul>
		<li>Résultat4</li>
		<li>Résultat5</li>
		<li>Résultat6</li>
		</ul>
</div>


et enfin voici ce que j'ai tenté pour l'affichage PHP:

//intialisation colonne pour alternance
$div ="cat_trowleft";

//début d'alternance
if ($div == "cat_trowleft") { $div = "cat_middle"; } else { $div = "cat_trowleft"; }
if ($div == "cat_middle") { $div = "cat_trowright"; } else { $div = "cat_trowright"; }
//fin alternance

...


j'ai la solution pour l'afficher avec un tableau <table> mais ce n'est pas ce que je recherche Smiley fache je n'ai pas réussi à le modifier afin d'être sur la bonne voie!

$compteur=1;
echo "<table>";
 while ($voir=mysql_fetch_array($req))
{
                 if ($compteur == 1) {
				 echo "<tr>";
				 
				 }
     
	 echo "<td>";
     echo $voir['nom']."";
     echo "</td>";
                 if ($compteur == 3) {
				 echo "</tr>";
                 $compteur=0;
				
				}
                  
	$compteur++;
                     
		}
					
	echo "</table>";


Je sais que je m'y prend mal cela ne fonctionne pas, mais je ne vois pas comment procéder !!! Smiley fache
je vous remercie pour votre éventuelle aide à tous!

Smiley biggol
Modifié par rounet (29 Jan 2009 - 18:46)
Dans ta maquette HTML, tu affiches bien la première colonne d'abord, puis la deuxième, pour terminer par la 3ème. Le code HTML est organisé comme ça.

Dans ton script PHP, tu essais d'alterner les colonnes alors que ton CSS règle déjà tout pour toi.

Une solution très basique :
for($i = 0; $res = mysql_fetch_assoc($req); ++$i)
{
	if($i == 0)
		echo '<div class="cat_trowleft"><ul>';
	elif($i == 3)
		echo '</ul></div><div class="cat_middle"><ul>';
	elif($i == 6)
		echo '</ul></div><div class="cat_middle"><ul>';

	echo '<li>', $res['nom'], '</li>';

	if($i == 6)
		echo '</ul></div>';
}
salut,

une petite remarque qui peut alléger ton code : tes <div> ici sont inutiles ! Sert toi des balises <ul> qui sont déjà de type bloc .

Une boucle foreach est également envisageable
Une solution consisterait à compter, au préalable, les éléments à disposer dans les deux premières colonnes avec un appel à mysql_num_rows() !
$nbt=mysql_num_rows($req);
$nbm=floor($nbc/3);
$nb1=$nbm+(0<$nbc%3);
$nb2=$nbm+(1<$nbc%3);

Il suffirait alors d'introduire les changements de container au franchissement des seuils $nb1 puis $nb1+$nb2.
Modifié par Julien de Prabere (02 Feb 2009 - 17:37)