par
sadeq » 28 août 2008, 12:19
Il faut savoir qu'une table HTML est écrite sous forme de Z : c'est à dire, ligne, colonnes, ligne, colonnes, ...
Il faut savoir aussi que le mysql_fetch lit le résultat d'une requête séquentiellement ce qui fait que le programme ne connait pas tous les enregistrements du résultat tantque mysql_fetch n'est pas arrivé au bout de sa séquence de lecture.
Donc tu as deux mécanismes qui se combinent pour corser ton problème : le programme ne peut donc afficher un "h" à côté d'un "a" pour respecter la logique de construction en Z de la table HTML puisque "h" n'est lu par mysql_fetch que bien après la lecture de "a"
Et puisqu'on ne peut pas changer la façon avec laquelle une table HTML est créé. Il faut changer la façon avec laquelle les données sont lues.
En effet, la solution réside dans le fait que le programme doit connaitre tous les enregistrements résultat de la requête au moment où il compte construire la table HTML. Et pour cela il faut séparer la lecture du résultat de l'affichage de la table.
Voici, une idée que tu peux développer:
1. Lire au préalable, le résultat de la requête (la boucle de mysql_fetch) dans un tableau
2. Fixer le nombre de lignes de la table HTML à certain nombre. Par exemple, selon ton dernier exemple, les données sont listées en 7 lignes et plusieurs colonnes.
3. Afficher la table HTML en lisant à partir du tableau déjà rempli à l'étape n°1 en plaçant dans les <td> d'une ligne les cases du tableau selon une suite arithmétique ayant raison lenombre de lignes fixé.
Par exemple :
si le tableau T contient : a, b, c, d, e, f, g, h
et si l'on veut les lister en 2 lignes
L'étape n°3 doit donc afficher
- pour la première ligne <tr> :
un <td> qui contient T[0] (c'est à dire : a)
un <td> qui contient T[2] (c'est à dire : c)
un <td> qui contient T[4] (c'est à dire : e)
un <td> qui contient T[6] (c'est à dire : g)
- puis pour la deuxième ligne <tr> :
un <td> qui contient T[1] (c'est à dire : b)
un <td> qui contient T[3] (c'est à dire : d)
un <td> qui contient T[5] (c'est à dire : f)
un <td> qui contient T[7] (c'est à dire : h)
C'est logique : La taille tu tableau est de 8 cases, on veut fixer les lignes à 2 alors on affiche 4 cases par ligne. Le pas ou la raison arithmétique entre les n° des cases affichés par ligne est de 2 (nombre fixé pour les lignes) c'est magique.
Reste à écrire le code qui respecte cet algorithme.
Il faut savoir qu'une table HTML est écrite sous forme de Z : c'est à dire, ligne, colonnes, ligne, colonnes, ...
Il faut savoir aussi que le mysql_fetch lit le résultat d'une requête séquentiellement ce qui fait que le programme ne connait pas tous les enregistrements du résultat tantque mysql_fetch n'est pas arrivé au bout de sa séquence de lecture.
Donc tu as deux mécanismes qui se combinent pour corser ton problème : le programme ne peut donc afficher un "h" à côté d'un "a" pour respecter la logique de construction en Z de la table HTML puisque "h" n'est lu par mysql_fetch que bien après la lecture de "a"
Et puisqu'on ne peut pas changer la façon avec laquelle une table HTML est créé. Il faut changer la façon avec laquelle les données sont lues.
En effet, la solution réside dans le fait que le programme doit connaitre tous les enregistrements résultat de la requête au moment où il compte construire la table HTML. Et pour cela il faut séparer la lecture du résultat de l'affichage de la table.
Voici, une idée que tu peux développer:
1. Lire au préalable, le résultat de la requête (la boucle de mysql_fetch) dans un tableau
2. Fixer le nombre de lignes de la table HTML à certain nombre. Par exemple, selon ton dernier exemple, les données sont listées en 7 lignes et plusieurs colonnes.
3. Afficher la table HTML en lisant à partir du tableau déjà rempli à l'étape n°1 en plaçant dans les <td> d'une ligne les cases du tableau selon une suite arithmétique ayant raison lenombre de lignes fixé.
Par exemple :
si le tableau T contient : a, b, c, d, e, f, g, h
et si l'on veut les lister en 2 lignes
L'étape n°3 doit donc afficher
[list]pour la première ligne <tr> :
un <td> qui contient T[0] (c'est à dire : a)
un <td> qui contient T[2] (c'est à dire : c)
un <td> qui contient T[4] (c'est à dire : e)
un <td> qui contient T[6] (c'est à dire : g)[/list]
[list]puis pour la deuxième ligne <tr> :
un <td> qui contient T[1] (c'est à dire : b)
un <td> qui contient T[3] (c'est à dire : d)
un <td> qui contient T[5] (c'est à dire : f)
un <td> qui contient T[7] (c'est à dire : h)[/list]
C'est logique : La taille tu tableau est de 8 cases, on veut fixer les lignes à 2 alors on affiche 4 cases par ligne. Le pas ou la raison arithmétique entre les n° des cases affichés par ligne est de 2 (nombre fixé pour les lignes) c'est magique.
Reste à écrire le code qui respecte cet algorithme.