Php tableau div/css

Fermé
Pook - 21 août 2010 à 15:39
 Pook - 22 août 2010 à 13:14
Bonjour,
debutant en php je viens de commencer a coder un tableau dynamique avec des div et du css, dans ce tableau j'affiche un certain nombre d'éléments récupéré de ma bdd, seulement voilà:
- j'aimerais obtenir ce resultat:
<div id="conteneurtableau">
<div id="lignes" style="clear: both;">
<div id="colonnes" style="float: left;">News1</div>
<div id="colonnes" style="float: left;">News2</div>
<div id="colonnes" style="float: left;">News3</div>
<div id="colonnes" style="float: left;">News4</div>
</div>

et j'obtiens ceci:

<div id="conteneurtableau">
<div id="lignes" style="clear: both;">
<div id="colonnes" style="float: left;">News1 News2 News3 News4</div>
<div id="colonnes" style="float: left;">News1 News2 News3 News4</div>
<div id="colonnes" style="float: left;">News1 News2 News3 News4</div>
<div id="colonnes" style="float: left;">News1 News2 News3 News4</div>
</div>

voici mon code:

<div id="conteneurtableau">
<?php
for ($r=1; $r<=$NbrLignes; $r++){
echo'<div id="lignes" style="clear:both;">';
for ($c=1; $c<=($NbrColonnes); $c++){
echo'<div id="colonnes" style="float:left;">';
foreach ($list as $item) :
echo $item->title;
endforeach;
echo '</div>';
}
echo '</div>';
}

?>

</div>

Pouvez-vous m'aider s'il vous plait ? Tout type d'interventions de votre part est la bienvenue. Merci d'avance à vous.



A voir également:

6 réponses

Anoen Messages postés 196 Date d'inscription mardi 10 novembre 2009 Statut Membre Dernière intervention 11 septembre 2013 25
Modifié par Anoen le 21/08/2010 à 16:56
Bonjour,
Il faut que tu ferme ta div dans le foreach :)
for ($c=1; $c<=($NbrColonnes); $c++){
foreach ($list as $item) :
echo '<div id="colonnes" style="float:left;">'.$item->title.'</div>';
endforeach;
} 
1
Merci pour ta reponse anoen, mais j'ai un autre souci maintenant x D, le résultat est multiplie par le nombre de colonnes ?

ca donne ca:
<div id="colonnes" style="float: left;">News1</div>
<div id="colonnes" style="float: left;">News2</div>
<div id="colonnes" style="float: left;">News3</div>
<div id="colonnes" style="float: left;">News4</div>
<div id="colonnes" style="float: left;">News1</div>
<div id="colonnes" style="float: left;">News2</div>
<div id="colonnes" style="float: left;">News3</div>
<div id="colonnes" style="float: left;">News4</div>
<div id="colonnes" style="float: left;">News1</div>
<div id="colonnes" style="float: left;">News2</div>
<div id="colonnes" style="float: left;">News3</div>
<div id="colonnes" style="float: left;">News4</div>
<div id="colonnes" style="float: left;">News1</div>
<div id="colonnes" style="float: left;">News2</div>
<div id="colonnes" style="float: left;">News3</div>
<div id="colonnes" style="float: left;">News4</div>

et quand j'ajoute par exemple la valeur 2 à la variable $NbrLignes il me multiplie le résultat ci-dessus par 2:

<div id="lignes" style="clear: both;">
<div id="colonnes" style="float: left;">News1</div>
<div id="colonnes" style="float: left;">News2</div>
<div id="colonnes" style="float: left;">News3</div>
<div id="colonnes" style="float: left;">News4</div>
<div id="colonnes" style="float: left;">News1</div>
<div id="colonnes" style="float: left;">News2</div>
<div id="colonnes" style="float: left;">News3</div>
<div id="colonnes" style="float: left;">News4</div>
<div id="colonnes" style="float: left;">News1</div>
<div id="colonnes" style="float: left;">News2</div>
<div id="colonnes" style="float: left;">News3</div>
<div id="colonnes" style="float: left;">News4</div>
<div id="colonnes" style="float: left;">News1</div>
<div id="colonnes" style="float: left;">News2</div>
<div id="colonnes" style="float: left;">News3</div>
<div id="colonnes" style="float: left;">News4</div>
</div>
<div id="lignes" style="clear: both;">
<div id="colonnes" style="float: left;">News1</div>
<div id="colonnes" style="float: left;">News2</div>
<div id="colonnes" style="float: left;">News3</div>
<div id="colonnes" style="float: left;">News4</div>
<div id="colonnes" style="float: left;">News1</div>
<div id="colonnes" style="float: left;">News2</div>
<div id="colonnes" style="float: left;">News3</div>
<div id="colonnes" style="float: left;">News4</div>
<div id="colonnes" style="float: left;">News1</div>
<div id="colonnes" style="float: left;">News2</div>
<div id="colonnes" style="float: left;">News3</div>
<div id="colonnes" style="float: left;">News4</div>
<div id="colonnes" style="float: left;">News1</div>
<div id="colonnes" style="float: left;">News2</div>
<div id="colonnes" style="float: left;">News3</div>
<div id="colonnes" style="float: left;">News4</div>
</div>

- alors que ce que je voudrais vraiment à la fin c'est quelque chose dans cette idee là :

<div id="lignes" style="clear: both;">
<div id="colonnes" style="float: left;">News1</div>
<div id="colonnes" style="float: left;">News2</div>
<div id="colonnes" style="float: left;">News3</div>
<div id="colonnes" style="float: left;">News4</div>
</div>
<div id="lignes" style="clear: both;">
<div id="colonnes" style="float: left;">News5</div>
<div id="colonnes" style="float: left;">News6</div>
<div id="colonnes" style="float: left;">News7</div>
<div id="colonnes" style="float: left;">News8</div>
</div>

Merci d'avance : )
0
Merci ! Ta proposition marche, mais enfaite ça ne resout pas tout parceque j'ai omis des point important dans le post:

-j'essaie enfaite de faire un systeme de tableau comme tu l'a bien compris mais ou je definis moi-même le nombre de lignes et de colonnes.

voici ce que j'ai cette fois-ci:

<?php 
for ($r=1; $r<=$NbrLignes; $r++){
echo'<div class="lignes" style="clear:both;">';
for ($c=1; $c<=($NbrColonnes); $c++){
foreach ($list as $item) :
echo '<div class="colonnes" style="float:left;">'.$item->title.'</div>';
endforeach;
}
echo '</div>';
}
 
?>


avec mes variables $NbrLignes=2 et $NbrColonnes=4

j'obtient comme résultat mes colonnes multiplié par 4,

<div id="conteneurtableau">
<div class="lignes" style="clear: both;">
<div class="colonnes" style="float: left;">News1</div>
<div class="colonnes" style="float: left;">News2</div>
<div class="colonnes" style="float: left;">News3</div>
<div class="colonnes" style="float: left;">News4</div>
<div class="colonnes" style="float: left;">News1</div>
<div class="colonnes" style="float: left;">News2</div>
<div class="colonnes" style="float: left;">News3</div>
<div class="colonnes" style="float: left;">News4</div>
<div class="colonnes" style="float: left;">News1</div>
<div class="colonnes" style="float: left;">News2</div>
<div class="colonnes" style="float: left;">News3</div>
<div class="colonnes" style="float: left;">News4</div>
<div class="colonnes" style="float: left;">News1</div>
<div class="colonnes" style="float: left;">News2</div>
<div class="colonnes" style="float: left;">News3</div>
<div class="colonnes" style="float: left;">News4</div>
</div>
<div class="lignes" style="clear: both;">
<div class="colonnes" style="float: left;">News1</div>
<div class="colonnes" style="float: left;">News2</div>
<div class="colonnes" style="float: left;">News3</div>
<div class="colonnes" style="float: left;">News4</div>
<div class="colonnes" style="float: left;">News1</div>
<div class="colonnes" style="float: left;">News2</div>
<div class="colonnes" style="float: left;">News3</div>
<div class="colonnes" style="float: left;">News4</div>
<div class="colonnes" style="float: left;">News1</div>
<div class="colonnes" style="float: left;">News2</div>
<div class="colonnes" style="float: left;">News3</div>
<div class="colonnes" style="float: left;">News4</div>
<div class="colonnes" style="float: left;">News1</div>
<div class="colonnes" style="float: left;">News2</div>
<div class="colonnes" style="float: left;">News3</div>
<div class="colonnes" style="float: left;">News4</div>
</div>
</div>


alors que ce que je voudrais vraiment à la fin c'est quelque chose dans cette idee là :

<div id="lignes" style="clear: both;">
<div class="colonnes" style="float: left;">News1</div>
<div class="colonnes" style="float: left;">News2</div>
<div class="colonnes" style="float: left;">News3</div>
<div class="colonnes" style="float: left;">News4</div>
</div>
<div id="lignes" style="clear: both;">
<div class="colonnes" style="float: left;">News5</div>
<div class="colonnes" style="float: left;">News6</div>
<div class="colonnes" style="float: left;">News7</div>
<div class="colonnes" style="float: left;">News8</div>
</div>

J'espère être suffisament clair et encore merci pour ta réponse : )
0
Anoen Messages postés 196 Date d'inscription mardi 10 novembre 2009 Statut Membre Dernière intervention 11 septembre 2013 25
21 août 2010 à 23:48
Effectivement, je pense que c'est parce que tu as 2 for, le foreach récupère déjà tes colonnes mais ton for juste avant les multiplient.
Le foreach va parcourir ta bdd et renvoyer tous les résultats correspondants à la requête un par un, tu n'as pas besoin de l'inclure dans une boucle supplémentaire pour créer tes colonnes il le fera tout seul.

<?php 
for ($r=1; $r<=$NbrLignes; $r++){
echo'<div class="lignes" style="clear:both;">';
foreach ($list as $item) :
echo '<div class="colonnes" style="float:left;">'.$item->title.'</div>';
endforeach;
echo '</div>';
}


Ca devrait être bon avec ça, dis moi si tu as un problème ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour Anoen, resultat du test avec ta propostion:
<div id="lignes" style="clear: both;">
<div class="colonnes" style="float: left;">News1</div>
<div class="colonnes" style="float: left;">News2</div>
<div class="colonnes" style="float: left;">News3</div>
<div class="colonnes" style="float: left;">News4</div>
</div>
<div id="lignes" style="clear: both;">
<div class="colonnes" style="float: left;">News1</div>
<div class="colonnes" style="float: left;">News2</div>
<div class="colonnes" style="float: left;">News3</div>
<div class="colonnes" style="float: left;">News4</div>
</div>


entretemps j'ai essayé ceci, qui marche "presque" parfaitement:

<?php
$colonne = 1;
$newline = '<div class="lignes" style="clear:both;">';
 
echo $newline;
 
foreach ($list as $item) {
 
if ($colonne > $NbrColonnes) {
   $colonne = 1;
   echo "</div>\n" . $newline;
}
else {
  $colonne++;
}
 
echo '<div class="colonnes" style="float:left;">'.$item->title.'</div>';
 
}
 
echo "</div>\n";
?>



- Si ce n'est que le resultat est un peu bizarre:
<div id="lignes" style="clear: both;">
<div class="colonnes" style="float: left;">News1</div>
<div class="colonnes" style="float: left;">News2</div>
</div>
<div id="lignes" style="clear: both;">
<div class="colonnes" style="float: left;">News3</div>
<div class="colonnes" style="float: left;">News4</div>
<div class="colonnes" style="float: left;">News5</div>
</div>
<div id="lignes" style="clear: both;">
<div class="colonnes" style="float: left;">News6</div>
<div class="colonnes" style="float: left;">News7</div>
<div class="colonnes" style="float: left;">News8</div>
</div>
<div id="lignes" style="clear: both;">
<div class="colonnes" style="float: left;">News9</div>
<div class="colonnes" style="float: left;">News10</div>
</div>


Merci encore : )
0
Re bonjour, j'ai fini par trouver la solution à mon probleme, merci encore : )

Je la donne pour ceux que ça interesse:

<?php
$colonne = 0;
$newline = '<div class="lignes" style="clear:both;">';
 
echo $newline;
 
foreach ($list as $item) {
 
if ($colonne >= $NbrColonnes) {
   $colonne = 1;
   echo "</div>\n" . $newline;
}
else {
  $colonne++;
}
 
echo '<div class="colonnes" style="float:left;">'.$item->title.'</div>';
 
}
 
echo "</div>\n";
?>
0