Page 1 sur 2
problème de mise en page avec une boucle....
Posté : 10 oct. 2005, 22:32
par Nico128 (pas connecté)
Salut à tous !
J'ai une boucle qui va chercher chaque enregistrement dans ma base de donnée.De ce côté la ca marche !
Mais c'est pour la mise en page...J'aimerais que ça mets un enregistrement a gauche, un à droite, un a gauche en dessou et un a droite en dessou.
Le problème c'est que je sais pas comment m'y prendre...
merci davance
Posté : 10 oct. 2005, 22:34
par Cyrano
Résumons, tu veux afficher deux résultats par ligne, c'est ça ? Dans l'ordre:
Code : Tout sélectionner
resultat 1 | resultat 2
resultat 3 | resultat 4
resultat 5 | resultat 6
etc...
Posté : 11 oct. 2005, 00:24
par Nico128 (pas connecté)
Voilà c'est exactement ça !
Mais je vois pas trop comment faire
Posté : 11 oct. 2005, 00:28
par Cyrano
utilise un modulo :
Sommairement, si tu fais ton affichage dans une boucle while(), commence par initialiser un pointeur à 1:
<?php
$i = 1
while(condition d'affichage)
{
// Instrution d'affichage d'un bloc;
if($i % 2 == 0)
{
//.... élément de retour à la ligne;
echo("<br />\n");
$i++;
}
}
?>
Posté : 11 oct. 2005, 02:11
par Nico128
Merci, jai fait une recherche sur le forum avec "modulo" et un gars voulais faire exactement la meme chose que moi, et qq'1 avais fait le script, alors je l'ai pris et jai modifier. Ca marche super...sauf que jai toujours pas compris comment ca marchais ^^
Voilà mon code... :
//Afficher la liste des noms des jeux à raison de 2 images par ligne:
//Ouvrir une table HTML
echo "<table border=0>";
//Compteur
$nbImages = 0;
//afficher 2 images par ligne
while($data = mysql_fetch_assoc($req))
{
//Nouvelle ligne au début et si 2 images sont affichées (% est le modulo ou reste de division)
if ($nbImages % 2 == 0) echo "<tr>";
//Afficher l'image dans une céllule
echo "<td>".$data['titre' ];
//Incrémenter le compteur
$nbImages ++;
}
//Fin de la table
echo "</table>";
Cest quoi enfaite le modulo ? le reste d'une division ? dans ce cas la 0 divisé par 2 ca fais 0 ? Enfin il faut qu'on m'explique un peu tout sa.
Et par example comment afficher par example sur 3 colone ? 4 colone ? etc. ?
merci d'avance

Posté : 11 oct. 2005, 07:27
par Steffy
Cest quoi enfaite le modulo ? le reste d'une division ? dans ce cas la 0 divisé par 2 ca fais 0 ? Enfin il faut qu'on m'explique un peu tout sa.
En faite c'est le reste de la division entiere de variable par 2
ce qui ne veut pas dire...variable modulo / deux (je précise :p)
Posté : 11 oct. 2005, 08:36
par Cyrano
Voilà, quand on utilise un modulo, on vérifie si le reste d'une division est égal à une valeur. Ici, on vérifie si le pointeur est pair ou impair en testant la valeur du reste de la division du pointeur par 2 : ça ne peut être que 0 ou 1.
Bon, il va quand même rester un autre problème. Tu affiches dans un tableau, mais de la manière dont on a structuré la base du code, si tu as un nombre de photos impair, la dernière ligne n'aura qu'une seule cellule. Le code HTML sera donc invalide. On va donc rajouter un élément de test pour la dernière ligne: si le nombre de photos est impair, on rajoutera à la fin une cellule vide pour compléter le tableau avant de le fermer.
Voici ce que ça donne:
<?php
//Afficher la liste des noms des jeux à raison de 2 images par ligne:
//Ouvrir une table HTML
?>
<table border="0">
<tr>
<?php
/* On récupère le nombre d'images à afficher */
$total = mysql_num_rows($req);
//Compteur
$nbImages = 1;
//afficher 2 images par ligne
while($data = mysql_fetch_assoc($req))
{
//Afficher l'image dans une cellule
?>
<td><?php echo($data['titre' ]); ?></td>
<?php
/* On vérifie s'il ne reste plus d'image à afficher et que la dernière est toute seule dans la ligne */
if(($nbImages % 2 != 0) && ($nbImages == $total))
{
?>
<td> </td>
<?php
}
//Nouvelle ligne au début et si 2 images sont affichées (% est le modulo ou reste de division)
if(($nbImages % 2 == 0) && ($nbImages < $total))
{
?>
</tr>
<tr>
<?php
}
//Incrémenter le compteur
$nbImages ++;
}
//Fin de la table
?>
</tr>
</table>
Tu noteras que j'ai ajouté une ligne avant la boucle pour récupérer le nombre de photos à afficher. Ensuite, j'ai rajouté un test dans la boucle.
Si tu as du mal à comprendre, reviens poser des questions

Posté : 14 oct. 2005, 23:09
par Nico128
Enfaite ce que je comprend pas trop cest ce modulo...Par example 1 % 2 = 0 mais on le lis comment ? "combien ya til de reste dans 1 divisé par 2" ?
Et il faut m'expliquer un peu. Cest tout flou dans ma tete et je comprend pas pourquoi je comprend pas
Voilà ce que j'ai compris. On affiche le 1er résultat dans la première cellule du tableau. Après si 1%2=0 (déja est ce que ca vaux 0 ?) et que 1 = le nombre de résultat on créé une nouvelle cellule a coté.
Après si 1%2=0 et qu'il y a + d'image que 1, on créé je ne sais pas quoi (jai pas réussi a voir ce que donais mon tableau en rassemblant les parties)
Et après, on fais $nbImages ++, cest a dire que la première fois $nbImages = $nbImages+1. A la deuxième répétition cest $nbImages+2, et ainsi de suite ? Mais je vois pas trop a quoi ça sert de faire ça.
Puis on ferme le tableau.
Voilà..merci
Posté : 15 oct. 2005, 00:16
par Truc
Enfaite ce que je comprend pas trop cest ce modulo...Par example 1 % 2 = 0 mais on le lis comment ? "combien ya til de reste dans 1 divisé par 2" ?
une explication t'attend sur ce
post
Après si 1%2=0 (déja est ce que ca vaux 0 ?)
non, c'est pas exactement ça, ce n'est pas un modulo avec 1 a chaque tour de boucle mais avec le nombre d'images passées dans la boucle.. dépend directement de $nbImages ++.
On va donc faire des comparaisons comme suite:
1%2=0 ... reste =1 => la condition sera fausse
2%2=0 ... reste =0 => la condition sera vrai => nouvelle ligne de tableau
3%2=0 ... reste =1 => la condition sera fausse
...
Et après, on fais $nbImages ++, cest a dire que la première fois $nbImages = $nbImages+1. A la deuxième répétition cest $nbImages+2, et ainsi de suite ?
en faite comme tu dis $nbImages ++ correspond a $nbImages = $nbImages+1 donc a chaque tour dans la boucle on fait toujours $nbImages = $nbImages+1 et non +2.
s'il y a encore des choses floue pose tes questions

Posté : 15 oct. 2005, 00:45
par Nico128
Ah oui j'ai compris ! J'ai aussi compris comment se passait la boucle et jai rassembler les ptit bout de tableau pour voir comme ça donne. Et je vois comment sa marche.
Par contre pour faire par example avec 3 colone, j'ai réfléchis et je vois comment faire, mais cest un problème pour moi parce que j'ai du faire par tatonement, essayer au bol quoi...! Alors est-ce qu'il y a une technique pour calculer, sans trop réfléchir ?
merci
Posté : 15 oct. 2005, 00:54
par Truc
pour un affichage sur 3 colonnes il suffit de remplacer le "2" du modulo par "3"
$nbImages % 3 != 0
Posté : 15 oct. 2005, 01:09
par Nico128
pour un affichage sur 3 colonnes il suffit de remplacer le "2" du modulo par "3"
$nbImages % 3 != 0
Ah oké tout simplement ?

(heureusement je vais pas men pleindre lol).
Encore une ptite question, qu'est ce que ca va changer si je change %2 par %3 ?
Posté : 15 oct. 2005, 01:33
par Truc
qu'est ce que ca va changer si je change %2 par %3 ?
Euh ..
c'est ce qu'on a fait

tu avait:
$nbImages % 2 != 0
et mainteant
$nbImages % 3 != 0
pour un affichage sur 3 colonnes il suffit de remplacer le "2" du modulo par "3"
donc il y aura un affichage sur 3 colonnes .. si tu veut un affichage sur 4 colonnes tu fait:
$nbImages % 4 != 0
ainsi de suite

Posté : 15 oct. 2005, 01:44
par Nico128
Ah oui désolé je t'avais mal compris ^^
Dernière question, comment peut on faire 1%2 ? Parce que le 2 est plus grand que 1 donc....

Posté : 15 oct. 2005, 01:56
par Truc
Parce que le 2 est plus grand que 1 donc....

et donc quoi ??
c'est justement l'interet du modulo => 1%2=1 aucun problème .. si ??
pour voir tu n'a qu'a faire des tests tout simples:
echo 1%2;
echo '<br>';
echo 2%2;
echo '<br>';
echo 3%2;
echo 1%3;
echo '<br>';
echo 2%3;
echo '<br>';
echo 3%3;
et tu vera le résultat
