while retour à la ligne dans un tableau

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : while retour à la ligne dans un tableau

Re: while retour à la ligne dans un tableau

par zeus » 02 avr. 2010, 16:34

Modération :
Si ta question est résolue, pense à l'indiquer pour que les futures personnes qui voudront consulter ce sujet sachent qu'il contient une solution.
Tu peux réaliser cette opération toi-même en cliquant sur le bouton Image en haut à droite de la réponse qui te semble la plus pertinente.

Re: while retour à la ligne dans un tableau

par kopax » 02 avr. 2010, 09:02

Merci à tous.

Bon j'ai adopté la solution de rajouté un tableau dans mon TD.

Pour la mise en page, j'avais besoin d'un autre tableau.
Ce qui est dommage, c'est que finalement je ne saurai pas si une solution pour faire ce que je voulais faire à la base existe. (2 tr dans une boucle).

Enfin cela dit, au moins la page est terminer et je peux passé à autre chose.

merci

Re: while retour à la ligne dans un tableau

par AB » 02 avr. 2010, 00:25

Et puis une cellule <td></td> peut contenir un peu ce que l'on veut, y compris si besoin un tableau... ou des élements <div> ... <p> etc.
Enfin je dis cela en cas de besoin. La plupart du temps, comme l'a dit Calimero, un simple br pour aller à la ligne peut suffire pour faire sa mise en page.

Re: while retour à la ligne dans un tableau

par Calimero » 01 avr. 2010, 23:14

Mais cela n'empêche pas que je reste bloqué pour faire une deuxième ligne.
J'arrive pas à imaginer la méthode même avec ce que j'ai appris pour affiché une seconde ligne dans le même tableau.
Ah oui désolé.

Eh bien c'est ultra simple, il te suffit d'ajouter la balise <br> juste après le lien pour provoquer un retour à la ligne, et ensuite d'afficher le texte que tu veux (le tout en restant dans la cellule, donc au sein du <td>.....</td>).

Re: while retour à la ligne dans un tableau

par kopax » 01 avr. 2010, 22:52

Merci pour l'explication, c'est toujours plus claire qu'avant.

Maintenant j'ai compris le tuto du début à la fin.
Mais cela n'empêche pas que je reste bloqué pour faire une deuxième ligne.
J'arrive pas à imaginer la méthode même avec ce que j'ai appris pour affiché une seconde ligne dans le même tableau.

Pour le moment j'arrive à afficher les 12 images, par colonne de trois.
Et 4 lignes.
Il faudrait rajouté 1 ligne en dessous de chaque ligne existante, pour rajouté les détails de la photos (en dessous de la photos quoi).

Merci en tout cas pour vos explications, je continue de rafraichir le post car j'aurai bien aimé avoir la réponse avant d'aller dormir (pour faire de beau rêves :^o )

Il est 3h50 au Vietnam, au pire je repasserai à mon réveille :P

Re: while retour à la ligne dans un tableau

par Calimero » 01 avr. 2010, 22:26

Bon après je suis allez voir ce que voulai dire ce i++ que je vois partout.
Alors en claire c'est un raccourci pour écrire $cpt = $cpt + 2
C'est pas comme ci j'allais le savoir du premier coup, j'apprends, maintenant je sais, je ferai le mec qui trouve ça évident :P
$i++;
//est équivalent à
$i=$i+1;
C'est exactement la même chose, en + court. Ce raccourci d'écriture est très utilisé dans les boucles.
Aussi par habitude j'ai utilisé mysql_fetch_arrow plutot que mysql_fetch_assoc, j'ai regardé dans le manuel :
mysql_fetch_assoc() retourne un tableau associatif qui contient la ligne lue dans le résultat result et déplace le pointeur interne de données. mysql_fetch_assoc() revient à appeler la fonction mysql_fetch_array() avec MYSQL_ASSOC en tant que second paramètre. Cette fonction retourne uniquement un tableau associatif.
Tableau associatif c'est quoi?

Pareil je suis allé voir en quoi MYSQL_ASSOC faisait la petite différence
En utilisant MYSQL_ASSOC, vous ne récupérerez que les indices associatifs (comme le fonctionnement de la fonction mysql_fetch_assoc()), en utilisant MYSQL_NUM, vous ne récupérerez que les indices numériques (comme le fonctionnement de la fonctionmysql_fetch_row()).
indices associatifs, indices numérique?

Je suis également allez voir mysql_fetch_array.
Bon ok j'ai peut-être pas fais epitech ou une autre école d'informatique, mais je pense que indices associatifs/numériques, ça ne veux pas rien dire que à moi :D
C'est moins compliqué que ça en a l'air, mais comme c'est "la base" va falloir que j'explique ça comme à l'école ;)

Au sens très large, dans les langages de programmation, ce qu'on appelle un tableau c'est une suite de paires clé-valeur :
- Suite dans le sens ou il y en a plusieurs, et donc il y a un ordre.
- Paires clé-valeur : Tout élément du tableau est une valeur, mais à chaque valeur est associée une clé unique qui permet de la retrouver dans le tableau, donc chaque élément du tableau est en fait un couple : clé + valeur.

Regarde le premier exemple de la page de manuel de la fonction print_r() pour "voir" de quoi on parle.

On fait aussi la différence entre deux grands types de tableaux : les tableaux dont les clés sont des nombres, et les tableaux dont les clés sont des chaînes de caractères. Les premiers s'appellent des tableaux indexés numériquement, les seconds s'appellent tableaux associatifs (ou hash).

Imagine par exemple que tu stockes une liste de personnes dans un tableau. Le choix de la clé que tu vas utiliser est important, car selon le type de clé tu pourras soit écrire du code du style "retourne moi dans cette liste la personne numéro 114" ou encore "retourne moi dans cette liste Monsieur Jacques Dupont". C'est pas tout à fait la même chose.

Là où ça devient un peu compliqué c'est qu'en PHP il n'y a pas de frontière entre ces deux types de tableaux. Un tableau peut être soit l'un, soit l'autre, ou même les deux à la fois !

Les fonctions mysql_fetch_xxxxxxxxxxx ont toutes le même but : te retourner un enregistrement d'une table de ta base de données. Cet enregistrement est une suite de champs, donc c'est tout à fait naturel de vouloir le récupérer dans ton code en tant que tableau. Par contre selon la manière dont tu vas l'utiliser, tu vas peut-être préférer un style de tableau ou bien un autre (mais pour ne pas faire de suspense inutile, je peux te le dire tout de suite : dans presque tous les cas on préfère le tableau associatif, car il associe le nom du champ à sa valeur, et ça rend ton code beaucoup + lisible).


Voilà en gros. Je ne reprends pas le reste de ton post car tu es maintenant beaucoup mieux armé pour relire, et bien comprendre, le tuto de Ryle :) N'hésite pas à aller lire les premières sections du manuel PHP pour approfondir tout ça si c'est toujours pas clair.

Re: while retour à la ligne dans un tableau

par kopax » 01 avr. 2010, 21:40

Ouf, j'ai compris merci, c'étais claire, j'ai failli répondre que je ne comprenais encore pas mais je me trompai de calculs.

Et maintenant ceci explique cela, mais cela n'explique pas comment faire un retour à la ligne pour affiché en dessous de chaque photos leur descriptions.

Merci pour l'explication, je pense que je mettais pas beaucoup creuser le crane, ça m'apprendra de survoler ce qui me parait anodin!

Re: while retour à la ligne dans un tableau

par Calimero » 01 avr. 2010, 20:57

Merci pour tous ces retours :D
Alors je coince ici.
Je comprend pas qu'est ce que ça signifie.
if ($cpt%$nbCols==($nbCols-1)) // on divise le nb d'élément par le nb de colonnes. Si le reste est de ($nbCols-1) ... 
        echo '</tr>'; // ..., on est sur le dernier élément d'une ligne
    $cpt++; // on incrémente le compteur pour savoir où on en est
au départ $cpt = 0 et $nbCols=3
Ça tombe bien c'est ce que je veux faire.
Avant dans le code je ne vois pas à un seul moment $cpt ou $nbCols se modifié.
Donc pour moi cette ligne signifie

Si 0/3==3-1 (ou si 0 est strictement égale à 2), si le résultat est égale à 2, on va à la ligne.
J'ai testé le code, ca va bien à la ligne.
Oulàlà, on va reprendre gentiment le modulo. Tu as bien compris que ça avait un rapport avec la division, mais peut-être pas celui que tu crois ;)

Rappelle toi quand on t'a appris la division pour la toute première fois (en CM2 si tu as fait l'école primaire en France), il s'agissait à l'époque de division entière (bah oui, en CM2 les nombres à virgule on connaissait pas). On te faisait noter une sorte de grand T comme ceci (je prends exprès un exemple qui ne tombe pas juste : on divise 17 par 5).
17 | 5
   +---
   | 3      (reste : 2)
L'opération est simple, 17 divisé par 5 vaut 3 avec un reste de 2.
17 est le quotient, 5 le diviseur, 3 est le résultat et 2 est le reste.

L'opérateur modulo, qui est noté en php sous la forme d'un signe %, fonctionne de cette manière, mais il a pour objectif de te donner directement le reste (ou modulo) de la division entière. Autrement dit :
echo 17%5; // Va afficher 2 !
Ok, je suppose que tu as bien compris le modulo maintenant. Et en quoi c'est intéressant pour notre affichage en tableau ce truc matheux bizarre ?

Cette fois il faut imaginer qu'on se situe dans une boucle contenant un nombre inconnu d'éléments (un résultat de requête SQL par exemple, mais pour cette fois on va "tricher" et reprendre notre 17), on sait simplement qu'on veut afficher ces éléments dans un tableau dont le nombre de colonnes est, lui, connu à l'avance (pour continuer sur l'exemple, disons 5 colonnes).

Notre boucle va donc être parcourue 17 fois. Pour que l'élément traité par la boucle soit différent à chaque fois (ce serait bête quand même de faire 17 fois le même affichage non ?) on utilise un "curseur numérique", c'est un simple nombre qu'on augmente de 1 à chaque passage. La seule difficulté est qu'on fait commencer ce nombre non pas à un, mais à zéro. Ce nombre va donc varier de 0 à 16.

Regardons ce que donne l'opérateur modulo (avec un diviseur de 5) pour chacun de ces nombres :
nombre | nombre modulo 5
-------+----------------
0      | 0
1      | 1
2      | 2
3      | 3
4      | 4
5      | 0
6      | 1
7      | 2
8      | 3
9      | 4
10     | 0
11     | 1
12     | 2
13     | 3
14     | 4
15     | 0
16     | 1
Ca devient intéressant non ? Tu ne vois toujours pas où je veux en venir ? Voici donc la même chose, présentée autrement :
         +----+----+----+----+----+
Colonnes | 0  | 1  | 2  | 3  | 4  |
         +----+----+----+----+----+
         | 0  | 1  | 2  | 3  | 4  |
         | 5  | 6  | 7  | 8  | 9  |
         | 10 | 11 | 12 | 13 | 14 |
         | 15 | 16 |    |    |    |
         +----+----+----+----+----+
Notre tableau n'est donc plus très loin ;)

En espérant ne pas t'avoir perdu en chemin (sinon tu hurles bien fort :lol: ), je répondrai au reste de tes questions dans un prochain post.

Re: while retour à la ligne dans un tableau

par kopax » 01 avr. 2010, 20:26

Alors je coince ici.
Je comprend pas qu'est ce que ça signifie.
if ($cpt%$nbCols==($nbCols-1)) // on divise le nb d'élément par le nb de colonnes. Si le reste est de ($nbCols-1) ... 
        echo '</tr>'; // ..., on est sur le dernier élément d'une ligne
    $cpt++; // on incrémente le compteur pour savoir où on en est
au départ $cpt = 0 et $nbCols=3
Ça tombe bien c'est ce que je veux faire.
Avant dans le code je ne vois pas à un seul moment $cpt ou $nbCols se modifié.
Donc pour moi cette ligne signifie

Si 0/3==3-1 (ou si 0 est strictement égale à 2), si le résultat est égale à 2, on va à la ligne.
J'ai testé le code, ca va bien à la ligne.

Bon après je suis allez voir ce que voulai dire ce i++ que je vois partout.
Alors en claire c'est un raccourci pour écrire $cpt = $cpt + 2
C'est pas comme ci j'allais le savoir du premier coup, j'apprends, maintenant je sais, je ferai le mec qui trouve ça évident :P

Aussi par habitude j'ai utilisé mysql_fetch_arrow plutot que mysql_fetch_assoc, j'ai regardé dans le manuel :
mysql_fetch_assoc() retourne un tableau associatif qui contient la ligne lue dans le résultat result et déplace le pointeur interne de données. mysql_fetch_assoc() revient à appeler la fonction mysql_fetch_array() avec MYSQL_ASSOC en tant que second paramètre. Cette fonction retourne uniquement un tableau associatif.
Tableau associatif c'est quoi?

Pareil je suis allé voir en quoi MYSQL_ASSOC faisait la petite différence
En utilisant MYSQL_ASSOC, vous ne récupérerez que les indices associatifs (comme le fonctionnement de la fonction mysql_fetch_assoc()), en utilisant MYSQL_NUM, vous ne récupérerez que les indices numériques (comme le fonctionnement de la fonctionmysql_fetch_row()).
indices associatifs, indices numérique?

Je suis également allez voir mysql_fetch_array.
Bon ok j'ai peut-être pas fais epitech ou une autre école d'informatique, mais je pense que indices associatifs/numériques, ça ne veux pas rien dire que à moi :D

Je reviens sur le code :

$cpt++ j'ai bien compris que ça donnai comme calcule :

$cpt = 0
$nbCols = 3
1er boucle :
0/3 = 3-1 (0 = 2), $cpt = 2, on continue
2eme boucle
2/3 = 3-1 (0.66 = 2), $cpt = 4, on continue
3eme boucle
4/3 = 3-1 (1.33 = 2), $cpt = 6, on continue (?? on est déjà à la 3eme photos affiché de la 3eme colonne, et il nous faut une 4eme colonne, la je me plante ok)
4eme boucle
6/3 = 3-2 (2 = 2), bon ça n'a pas de sens ok, vous allez m'expliquez ou je me plante.


Enfin, je dois ajouté une deuxieme ligne dans ma boucle.
Un 2eme <tr> et </tr> au début et à la fin d'une ligne mais pas dans la boucle, mais dans la boucle quand même, c'est encore avec les modulos évidement.
Mais je ne l'ai jamais fais, et je pensai que c'est quelque chose de courant, qu'on apprends avec les exemples, mais ca ne figure dans aucun tuto.
Alors bien sur vous me direz je peux pensé le truc, essayé de faire des tests pour y arriver, mais je n'y arrive pas :S
Je bloque la dessus.
if ($cpt!=0 && $cpt%$nbCols!=0) { // S'il n'y a pas eu assez de cellules dans la boucle pour finir la ligne ...

    echo '<td colspan="'.($nbCols - ($cpt%$nbCols) ).'">&nbsp;</td>'; // ... on complète avec une cellule vide de la bonne taille...

    echo '</tr>'; // ... et on ferme la ligne
Si le compteur n'est pas égale à 0 et le compteur/3 n'est pas égale à 0 (comment le compteur peut être à 0 a la fin, on viens de l'incrémenter plein de fois sans le remettre à 0, j'en conclu que cette ligne est obselete et que seul le second paramètre est utile, mais ensemble avec &&, il ne se passera rien. je sais que ce n'est pas obselete, mais je n'arrive pas à comprendre.
Dans ce cas on rajoute une colonne qui est fusionner avec celle qui manque : 3 - ($cpt/3) => si $cpt = 4, 4/3 = 0.66, on va crée une colonne de 3-0.66 ?
Bon après on ferme la ligne logiquement.

Voila svp un peu d'explication car c'est ce qui me dérangeai en lisant ce tuto, c'est que je devais tout détaillé pour expliquez que j'arriverai à rien par moi même si je ne comprends pas, et en l'occurence, le tutos m'a pas plus a cause de toute ses interrogations.

Merci :P

Re: while retour à la ligne dans un tableau

par Dr@ke » 01 avr. 2010, 19:22

Puis ce n'est pas qu'une question de tuto, c'est le principe du modulo dans une boucle surtout, j'ai moi-même eu du mal au départ à m'en servir...

Re: while retour à la ligne dans un tableau

par AB » 01 avr. 2010, 19:17

je m'accroche sur le tuto et la méthode de AB...
Heu... rendons à César ce qui appartient à César. C'est la méthode de Ryle :wink:

J'ai juste remplacé deux lignes pour que tu puisses tester dans une page vierge sans avoir à rien ajouter.

Pour l'adapter à ton code, au lieu de lister le tableau, il te suffit de lister le résultat de ta requête.

Bon courage, et comme te l'a dit Calimero si tu as un pb, dis nous où ça coince :)

Re: while retour à la ligne dans un tableau

par kopax » 01 avr. 2010, 19:02

Ok AB lol, c'est bon c'est juste j'étais partie sur une méthode, et je voulai pas avoir perdu mon temps, mais bon comme je tourne en rond, et que ta méthode a l'air géniale, je commence à travailler dessus !

Et non pas de blague de paque, je suis au Vietnam et on faite pas paques ici. :(

Calimero, je m'accroche sur le tuto et la méthode de AB, et si vraiment c'est pas possible, je te donne quelque clarification.
Merci pour ta réponse en tout cas.
D'ailleurs merci à tout le monde ;) Je me sens moins seul comme ça dans mon périple :lol:

Re: while retour à la ligne dans un tableau

par Calimero » 01 avr. 2010, 18:59

Parce que ca marche :P
C'est la deuxième fois que tu me donne ce tuto la, j'ai de la m3rd3 dans les yeux pour avoir l'impression que la solution semble évidente pour vous et que je continue de pas la voir ?

Tout les exemples que l'ont ma montré, aucun me semble intuitif, et j'apprends pas, j'aurai aimé un tuto sur le site du zero car c'est vraiment trés détailler on fini toujours par comprendre, mais ils n'ont pas celui que je cherche.
En fait les tutos sont rédigés par des êtres humains, c'est pourquoi ils sont par définition imparfaits.

Le tuto modulo nous paraît très clair à nous... Parcequ'on saurait tout refaire sans le tuto :) On a du mal à se mettre dans la situation exacte de quelqu'un qui a besoin d'apprendre, comme toi, et on a besoin de retours pour l'améliorer, le corriger... Pour qu'il soit de plus en plus accessible.

On a bien compris maintenant qu'il ne te parlait pas ce tuto. Pas de problème, personne n'est vexé. Ce qui nous aiderait (à améliorer le tuto d'une part, et à t'aider d'autre part), c'est que tu nous dises plus précisément ce qui te gêne dedans, les parties qui te paraissent les moins claires, l'endroit ou t'as complètement décroché, etc...

Car comme AB te le précise, la méthode proposée dans le tuto (faisant appel au modulo) est vraiment la meilleure pour ce que tu veux faire. Ce serait bien pour toi et pour ton script que tu la comprennes. Et on est prêts à te réexpliquer différemment s'il le faut, il suffit de demander.

Re: while retour à la ligne dans un tableau

par Dr@ke » 01 avr. 2010, 18:55

Des @ dans une boucle et tu en conclu que cela fonctionne?

Eh bien, tu risques d'avoir de sérieuses surprises :wink:

Re: while retour à la ligne dans un tableau

par kopax » 01 avr. 2010, 18:51

Parce que ca marche :P
C'est la deuxième fois que tu me donne ce tuto la, j'ai de la m3rd3 dans les yeux pour avoir l'impression que la solution semble évidente pour vous et que je continue de pas la voir ?

Tout les exemples que l'ont ma montré, aucun me semble intuitif, et j'apprends pas, j'aurai aimé un tuto sur le site du zero car c'est vraiment trés détailler on fini toujours par comprendre, mais ils n'ont pas celui que je cherche.