problème de mise en page avec une boucle....

Nico128 (pas connecté)
Invité n'ayant pas de compte PHPfrance

10 oct. 2005, 22:32

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

Mammouth du PHP | 19672 Messages

10 oct. 2005, 22:34

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...
:?:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Nico128 (pas connecté)
Invité n'ayant pas de compte PHPfrance

11 oct. 2005, 00:24

Voilà c'est exactement ça ! :D

Mais je vois pas trop comment faire

Mammouth du PHP | 19672 Messages

11 oct. 2005, 00:28

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++;
    }
}
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 246 Messages

11 oct. 2005, 02:11

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 :D

Eléphant du PHP | 55 Messages

11 oct. 2005, 07:27

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)

Mammouth du PHP | 19672 Messages

11 oct. 2005, 08:36

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>&nbsp;</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 :)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 246 Messages

14 oct. 2005, 23:09

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 :cry:

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

15 oct. 2005, 00:16

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 :wink:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 246 Messages

15 oct. 2005, 00:45

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

15 oct. 2005, 00:54

pour un affichage sur 3 colonnes il suffit de remplacer le "2" du modulo par "3"
$nbImages % 3 != 0

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 246 Messages

15 oct. 2005, 01:09

pour un affichage sur 3 colonnes il suffit de remplacer le "2" du modulo par "3"
$nbImages % 3 != 0
Ah oké tout simplement ? :D (heureusement je vais pas men pleindre lol).

Encore une ptite question, qu'est ce que ca va changer si je change %2 par %3 ?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

15 oct. 2005, 01:33

qu'est ce que ca va changer si je change %2 par %3 ?
Euh .. :-k
c'est ce qu'on a fait :wink:
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 :roll:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 246 Messages

15 oct. 2005, 01:44

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

15 oct. 2005, 01:56

Parce que le 2 est plus grand que 1 donc.... :?
et donc quoi ?? :-k

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 :D
Modifié en dernier par Truc le 15 oct. 2005, 02:16, modifié 2 fois.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute