Créer un tableau html en php... avec une subtilité ! [Résolu]

Messages postés
85
Date d'inscription
mardi 23 mars 2004
Dernière intervention
27 novembre 2010
- - Dernière réponse : vxr888
Messages postés
85
Date d'inscription
mardi 23 mars 2004
Dernière intervention
27 novembre 2010
- 13 mars 2008 à 23:02
Bonsoir à tous,

J'ai un soucis et j'espère trouver une réponse chez vous.

Je vous expose le problème :

J'ai écrit un code qui parcourt un dossier (avec readdir) et qui liste tous les fichiers présents dans ce dossier, leur date de création, leur auteur, leur taille, etc.
Afin de rendre la lecture plus agréable aux yeux des utilisateurs, je dois placer ces éléments dans un tableau html. (Jusque là ça va, y'a qu'a placer des tr et des td).

Mais... je ne dois pas avoir de colonnes de 300 mètres ou de rangées de 400 mètres ; tout doit s'afficher clairement à l'écran et dans le dossier parcouru, il y a des centaines de fichiers.

La solution proposée et approuvée est donc la suivante : placer ces données dans un tableau de 3x3 (3 rangées et 3 colonnes), ensuite créer un page2 avec un tableau de 3x3, puis s'il y a encore des fichiers, une page 3, etc etc...

Comment mettre en oeuvre celà ?

Quelqu'un pourrait-il m'aider ?

Merci d'avance,

VXR888. 
Afficher la suite 

Votre réponse

20 réponses

Meilleure réponse
Messages postés
2116
Date d'inscription
jeudi 16 septembre 2004
Dernière intervention
23 septembre 2018
3
Merci
Une astuce pour faire ta page :

en argument le numero de la page, le nombre de colone et le nombre de ligne

$page = $_GET['page'];
$nx = $_GET['nx'];
$ny= $_GET['ny'];

for (y=0 ; y<$ny ; y++){
  echo '<tr>';
  for (x=0 ; x<$nx ; x++){
   $n = $page * $nx * $ny + $y * $nx + $x;
   echo '<td>';
   echo '<td> Flachy Joe

Ta vie t'est prêtée, fais en un cadeau.

Merci Flachy Joe 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de Flachy Joe
Messages postés
2116
Date d'inscription
jeudi 16 septembre 2004
Dernière intervention
23 septembre 2018
3
Merci
Alors le pré-requis est que ta liste de fichier soit stockée dans un array : $file[].

Si tu veux afficher les fichiers 0 à 9 en 3 ligne et 3 colonnes dans la premiere page alors $page vaut 0, $nx vaut 3 et $ny vaut 3.

La première boucle tourne sur les lignes, la seconde sur les colonnes.
Au 1e tour de la 1e boucle $y vaut 0, on commence une ligne avec un <tr> on entre dans la seconde boucle qui va faire tourner $x de 0 à 2 en créant à chaque fois une cellule dans laquelle tu crée un tableau avec ton image et tes info sur le fichier. (ma ligne d'exemple est mal branlée, il devrait y avoir
//for (x){
echo '<tr>'; //début de la cellule
echo ' Flachy Joe

Ta vie t'est prêtée, fais en un cadeau.

Merci Flachy Joe 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de Flachy Joe
Messages postés
2116
Date d'inscription
jeudi 16 septembre 2004
Dernière intervention
23 septembre 2018
3
Merci
Non mais, t'as sans doute pas assez réfléchi ! T'as tout sous la main

if($n<$stop)
  echo 'Page Suivante';
else
  echo 'C'est la derniere page.';

Flachy Joe

Ta vie t'est prêtée, fais en un cadeau.

Merci Flachy Joe 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de Flachy Joe
Messages postés
85
Date d'inscription
mardi 23 mars 2004
Dernière intervention
27 novembre 2010
3
Merci
En réalité j'y avais réfléchi mais lorsque tous les tableaux étaient remplis en 3x3 ça ne marchait pas.

Il me fallait donc faire le code que tu cites ci-dessus mais avec le test suivant : if($n<($stop-1))
Et là effectivement tout fonctionne.

Encore merci,

A bientôt,

VXR888.

Merci vxr888 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de vxr888
Messages postés
85
Date d'inscription
mardi 23 mars 2004
Dernière intervention
27 novembre 2010
0
Merci
Re,


Pour le soucis des tableaux 3x3, je pense avoir trouvé une solution...


En début de code je déclare un i qui vaut 0 ($i=0), puis à chaque fichier trouvé dans le dossier, j'incrémente mon i de 1 ($i=$i+1). Lorsque je dépasse 3 (if($i==4), je remets mon compteur i à 1 ($i=1) et là je pourrais donc via ce compteur placer les tr et les td nécessaires à la création du tableau de la première page (du moins je le pense).

Admettons que mon idée soit possible (dites moi ce que vous en pensez),

Il reste encore le problème de passer en page 2 pour recréer l'occurence de tableau. Peut-être en incrémentant une valeur j mais après ? Comment créer dynamiquement cette page 2 ??

J'attends votre aide.

VXR888.
Commenter la réponse de vxr888
Messages postés
2116
Date d'inscription
jeudi 16 septembre 2004
Dernière intervention
23 septembre 2018
0
Merci
Pourquoi ne pas lister réellement tous les fichiers mais inclure le tableau dans un "div" Html dont la taille est limitée ?
En spécifiant la largeur totale du tableau les colonnes seront automatiquement redimensionnées.

Je verrai ça comme ça :

     <!-- Tous tes tr et td -->
 

Le paramètre overflow:auto permet d'afficher les ascenseurs seulement s'ils sont nécessaires.

Ça évite du traitement php pour passer d'un tableau à l'autre et l'utilisateur parcours plus rapidement la liste.

Flachy Joe

Ta vie t'est prêtée, fais en un cadeau.
Commenter la réponse de Flachy Joe
Messages postés
10918
Date d'inscription
lundi 24 février 2003
Dernière intervention
2 mars 2010
0
Merci
Hello,

franchement une liste est largement plus adaptée. Ce sera nettement plus ergonomique aussi. Surtout en ajoutant un affichage fractionné (comme un explorateur, quoi). Avec ton histoire de tableau sur plusieurs pages, tu vas galérer et ce ne sera pas du tout agréable à utiliser.
Commenter la réponse de malalam
Messages postés
85
Date d'inscription
mardi 23 mars 2004
Dernière intervention
27 novembre 2010
0
Merci
Rebonsoir,

Vos idées pourraient êtres bonnes mais il y a un soucis...

Je ne peux pas me contenter d'une simple liste.

Chaque cellule du tableau est remplie d'un tas d'éléments définis comme suit :

Nom de fichier : xxxxxxx.txt
Taille XX.XXXXX  Mo
Date de création du fichier : XX-XX-XXXX
Auteur : xxxxxxx
Date de dernière modification : XX-XX-XXXX

Bon jusque là c'est encore possible de lister mais...

1) Il y a dans le répertoire environ 200 fichiers. Je travaille en 3x3 pour mes tests mais à l'avenir je devrais pouvoir passer à du 5x6. Néanmoins je ne peux pas faire 200 fois la boucle de 5 lignes (nom, taille, date, auteur, date mod), ce n'est pas agréable à regarder !!!
Alors qu'un tableau de 30 cellules au total sur la page 1, 30 sur la 2 et ainsi de suite, c'est plus propre.
Autre paramètre à prendre en compte :
2) A l'avenir, chaque fichier sera accompagné d'une icône selon son type. Cette icône sera en 150x150 et sera placée au-dessus des données citées plus haut. A vrai dire c'est cette caractéristique qui m'a fait pencher du côté du tableau et quitter l'idée de listing.

Donc il me faut bel et bien un tableau et j'espère trouver quelqu'un qui pourrait m'aider à implémenter ma demande de ce topic.

** Pour continuer le suivi de mon développement, j'ajoute que j'ai essayé l'incrémentation par la variable $i dont je parle dans mon second message de ce topic et que ça ne fonctionne pas correctement. Peut-être ais-je oublié de prendre en compte un paramètre. Je vais afficher le code source pour voir si php m'a bien placé les tr et td aux bons endroits. Je vous tiendrai au courant.

En attendant, si quelqu'un pouvait m'aider, ce serait sympa.

A bientôt,

VXR888.
Commenter la réponse de vxr888
Messages postés
10918
Date d'inscription
lundi 24 février 2003
Dernière intervention
2 mars 2010
0
Merci
Tu as déjà utilisé l'explorateur de windows (par exemple) ? Toutes les infos que tu veux mettre dans le tien y sont présentes, voire plus, sans franchement de soucis d'ergonomie. Et le résultat est clair.
Je maintiens qu'un tableau paginé est une très mauvaise idée, ergonomiquement parlant.
Commenter la réponse de malalam
Messages postés
85
Date d'inscription
mardi 23 mars 2004
Dernière intervention
27 novembre 2010
0
Merci
@malalam : j'ai jamais eu d'icones en 150 dans l'explorateur windows... ces icones sont propres à l'utilisation finale du produit et je ne peux pas les toucher ni les réduire (je Veux mais je ne Peux pas, ce sont les ordres).

Donc pour continuer le fil de développement :
J'ai réussi à implémenter le système de tr et td avec compteur. Mon soucis était que je faisais le premier tr de chaque row n'était pas suivi d'un td et donc ca ne faisait que des row.

Au final j'arrive bien à un tableau de 3 rangées et de X colonnes.
Je sais comment lui dire de s'arrêter à 3 colonnes (il me suffit d'implémenter un compteur j de la même manière que le compteur i mais qui lui va jusque 9 occurences) mais ensuite, je ne sais ABSOLUMENT PAS comment spécifier dans mon code qu'il faut créer une nouvelle page pour y inscrire les éléments suivants et c'est pour celà que j'ai créé ce topic.

Quelqu'un peut-il m'aider à réaliser cette étape ?

A bientôt,

VXR888.
Commenter la réponse de vxr888
Messages postés
10918
Date d'inscription
lundi 24 février 2003
Dernière intervention
2 mars 2010
0
Merci
Le problème de ton système c'est que tu vas franchement galérer pour limiter l'affiochage d'un tableau sur une page (tu te limites à quoi ?), et que tu vas devoir reparcourir ton arborescence pour chaque page. Ca va être lourd niveau code, et lourd à l'utilisation. Tu te heurtes déjà au problème "sur quel critère limiter?", parce que ce n'est pas qu'une question de compteur, il faut rester logique, on n'a pas à faire à du linéaire mais à une arborescence. je vais sur une feuille, je fais quoi? Je remonte au parent, je fais quoi? Je veux aller 3 feuilles sous la feuille actuelle, je fais comment ?
Bah tu fais ce que tu veux, mais vraiment, je n'y crois pas trop ;-)
Commenter la réponse de malalam
Messages postés
85
Date d'inscription
mardi 23 mars 2004
Dernière intervention
27 novembre 2010
0
Merci
Pourquoi ?



Pourquoi ne puis-je pas simplement afficher mon premier tableau 3x3, implémenter un compteur qui s'arr-ete à 9 occurences et se remet à zéro en passant à la page 2, qui compte jusque 9 et se remet à zéro en passant à la page 3, etc etc ???

C'est pas faisable ?
Commenter la réponse de vxr888
Messages postés
10918
Date d'inscription
lundi 24 février 2003
Dernière intervention
2 mars 2010
0
Merci
Ca va bien si tu te limites à 1 dossier, si.
Mais il n'empêche que tu devras reparcourir ton dossier à chaque page, à moins d'utiliser des subterfuges un peu compliqués basés sur javascript.
Commenter la réponse de malalam
Messages postés
2116
Date d'inscription
jeudi 16 septembre 2004
Dernière intervention
23 septembre 2018
0
Merci
bon j'ai oublié pas mal de $ mais t'auras compris...

Flachy Joe

Ta vie t'est prêtée, fais en un cadeau.
Commenter la réponse de Flachy Joe
Messages postés
85
Date d'inscription
mardi 23 mars 2004
Dernière intervention
27 novembre 2010
0
Merci
@malalam : je ne me limite de toute façon qu'à un seul dossier.


@Flachy Joe : Merci pour ce petit bout de code, je vais l'étudier et essayer de le caser dans mon code pour voir ce que ça donne. Dès que ce sera fait je vous tiendrai au courant.


A bientôt,


VXR888.
Commenter la réponse de vxr888
Messages postés
85
Date d'inscription
mardi 23 mars 2004
Dernière intervention
27 novembre 2010
0
Merci
Flachy Joe...

J'ai étudié ton code mais je ne le comprends pas !

Bon je ne suis peut-être qu'un vilain débutant en php ?

L'idée générale de ton script je la comprends (bien que je ne vois pas exactement où tu crées ta page).

Par contre ce que je ne comprends pas c'est ce

$n = $page * $nx * $ny + $y * $nx + $x; qui entraîne $fichier[$n].

Ca je ne le comprends pas.

J'ai fait un test en remplacant par des chiffres et ça me parle encore moins.

Pourrais-tu m'expliquer ton code ?

Merci d'avance,

VXR888.

PS : Si quelqu'un a une solution pour la génération de pages, je suis toujours preneur.
Commenter la réponse de vxr888
Messages postés
85
Date d'inscription
mardi 23 mars 2004
Dernière intervention
27 novembre 2010
0
Merci
Re,


Je viens de lire tes explications et ça me semble réalisable. Pour ce qui est du côté lourd du script, bien qu'on me l'ai déconseillé, je prends le risque.


Concernant le script je saisis de mieux en mieux l'idée que tu me proposes (je pense avoir encore quelques petits soucis notamment sur la création de la page suivante (pas l'implémentation du système mais la ligne qui fait l'acte de créer cette page). Par ailleurs j'ai le soucis de l'entete des pages (html, body,...).


Mais bon, pour le moment ça reste assez flou car je n'ai pas testé la mise en pratique de ce code ; je l'ai juste lu.


Je teste ça demain dans la journée et, quoiqu'il arrive, je posterai à la suite pour vous tenir au courant et, surement, voir ce qu'il y a à corriger dans mes erreurs...


A demain,


VXR888.
Commenter la réponse de vxr888
Messages postés
85
Date d'inscription
mardi 23 mars 2004
Dernière intervention
27 novembre 2010
0
Merci
Me revoilà avec... des problèmes

Alors, j'ai pris le code de Flachy joe, le mien, je les ai mis dans le shaker et voilà que les problèmes arrivent.

Pour commencer :

$page=$_GET['page'];
$nx=$_GET['nx'];
etc

Alors là, le soucis c'est que la page index.php qui n'a pas de paramètre me dit que page, nx, etc sont indéfinis.
Comment je fais-je ?

Bon pour continuer à tester j'ai remplacé par des valeurs (0,3,3)

Alors là, il me sort un tableau farfelu avec une erreur par cellule : Notice: Undefined offset: 3 in c:\program files\easyphp1-8\www\photoplayer\indextest.php on line 43.

La ligne 43 c'est tout simplement celle-ci : echo "<td></td>";

Sinon j'ai bien un tableau de 3x3... enfin plus ou moins...

En réalité, il me fait autant de tableaux qu'il n'y a de fichiers !

Il me fait d'abord un tableau de 3x3 avec dans la première cellule le fichier[0] et dans les autres rien.
En-dessous, il me fait un tableau de 3x3 avec dans la première cellule le fichier [0] et dans la deuxième le fichier [1] ;
puis encore un de 3x3 avec les trois premiers fichiers,
puis encore un tableau de 3x3 avec les 4 premiers fichiers, et ainsi de suite.

Bien entendu, ne sachant comment implémenter le GET (et d'ailleurs ne voyant pas non plus où le numéro de page est incrémenté), à aucun moment il ne passe à une quelconque page suivante.

A l'aide, débutant inside,

HELP ME please, etc etc.

VXR888.
Commenter la réponse de vxr888
Messages postés
2116
Date d'inscription
jeudi 16 septembre 2004
Dernière intervention
23 septembre 2018
0
Merci
Pages indispensables, à lire avant de continuer quoi que ce soit :

http://www.php.net/manual/fr/reserved.variables.php (section HTTP GET variables : <var class="varname">$_GET)

http://www.php.net/manual/fr/language.types.array.php

Et en général :

http://www.php.net/manual/fr/index.php
</var>
Je te rapelle que le code fourni n'est qu'un exemple, qu'il y a des fautes dans le premier message que j'ai envoyé et que je les ai en partie corrigé en indiquant un nouveau contenu pour la cellule du tableau.

Pour passer des paramètres à une page par la methode GET, soit tu fait un formulaire HTML

 <form action="lapage.php" method ="GET">
 
 
 </form>

soit tu les passes directement dans l'URL :

[lapage.php?param1=val1&param2=val2 lien]

Tu peux m'envoyer une adresse (E-Mail, MSN, GTalk ou ICQ) par message privé si tu veux qu'on discute plus en profondeur de ton problème.

Flachy Joe

Ta vie t'est prêtée, fais en un cadeau.
Commenter la réponse de Flachy Joe
Messages postés
85
Date d'inscription
mardi 23 mars 2004
Dernière intervention
27 novembre 2010
0
Merci
Me revoilà,

Avec plein de bonnes nouvelles et une toute petite mauvaise.

D'abord les bonnes nouvelles : j'ai presque tout réglé. En fait c'est juste que ma boucle était mal placée et donc il me répétait le tableau autant de fois qu'il y avait de fichier. Après relecture de mon code et réflexion, j'ai vite vu où était le problème, j'ai déplacé ma boucle et là, miracle, presque parfait si ce n'est que je n'avais pas encore implémenté le lien "page suivante".
J'ajoute alors la ligne qui implémente la page suivante et là je me rends compte qu'il y a des pages jusqu'à l'infini et qu'une fois le nombre de fichiers dépassé il me remplit les cellules avec une erreur (undefine offset dans $fichier[$n], logique).
Je décide donc de rajouter un petit test basé sur un petit calcul.
Je fais donc ceci : $stop = count ($fichier);
J'obtiens ainsi le nombre total de fichiers (ou plutôt le numéro du dernier fichier).
Ensuite, il me reste à mettre l'affichage des données (nom de fichier, icone, etc) dans la boucle suivante : if($n<$stop) et voilà que le dernier tableau 3x3 s'arrête correctement.
Par exemple si sur la dernière page je n'ai que 5 fichiers, il me fait bien un tableau de 5 cellules et pas +.

Passons donc au tout petit problème qu'il me reste : Sur la dernière page, j'ai encore le lien "page suivante" qui est affiché. (C'est logique puisque je ne l'arrête à aucun moment) Lorsque je clique dessus, j'ai donc logiquement une page blanche sans tableau avec juste un lien "page suivante", qui en cliquant dessus m'envoie vers une nouvelle page avec un lien page suivante et ainsi de suite.
Voilà, je veux simplement savoir comment stopper l'affichage de ce lien lorsqu'il n'y a plus de fichiers.

A bientôt,

VXR888.
Commenter la réponse de vxr888

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.