Listage d'une requête sur plusieurs pages

Soyez le premier à donner votre avis sur cette source.

Vue 12 853 fois - Téléchargée 1 406 fois

Description

Cette classe permet de lister les résultats d'une requête SQL sur plusieurs pages. Par exemple,
si on veut visionner tous les membres d'un site, et qu'on en a environ 250, on aimerait bien,
pour que la lisibilité soit plus clair, en avoir que 15 par page. Pour ça, il suffit d'utiliser
cette classe en lui passant les bons paramètres.
Dans le zip, il y a également la documentation de la classe, créée via PhpDocumentor.

Source / Exemple :


<?php

/**

  • On inclut les fichiers de connection à la bd et la classe GestionResultSQL.
  • On peut aussi utiliser require_once() pour être sûr qu'on inclut qu'une fois
  • ces fichiers.
  • /
include("connect.inc.php"); include("gestionResultSQL.class.php"); /**
  • On dit :
  • - 1 : combien on veut de résultats (instances) par page
  • - 2 : l'allure de l'affichage de la page courante dans l'affichage des pages (Page 1|2|3...)
  • - 3 : l'allure de l'affichage des autres pages (Page <a href="#">5</a>)
  • /
$nbInstances = 12; $formatPageCourante = "#p##t#| "; $formatPageAutre = "<a href=\"exemple1.php?page=#p#\">#p#</a>#t#| "; /**
  • S'il existe, on récupère la valeur de la page courante. Sinon on lui donne une valeur par
  • défaut, qui est 1 (la première page, donc).
  • /
if (isset($_GET["page"])){ $pageCourante = $_GET["page"]; }else{ $pageCourante = 1; } /**
  • On instancie l'objet GestionResultSQL. Avec retourneSQLStrRch(), on envoie :
  • - Le nombre de résultats (instances) à afficher par page
  • - La page courante
  • - Les champs à récupérer (si on veut spécifier lesquels, on mettra array("champ1", "champs2")
  • - Les tables où il y a les champs à récupérer (si on veut spécifier, on fera comme ci-dessus)
  • - La clause WHERE, s'il y en a une
  • - La ou les clauses qui suivent le WHERE (genre, ORDER BY, GROUP BY, etc.)
*
  • IMPORTANT : Pas besoin de spécifier de LIMIT. C'est l'objet GestionResultSQL qui s'en occupe.
  • /
$rch = new GestionResultSQL(); $sql = $rch->retourneSQLStrRch($nbInstances, $pageCourante, array("*"), array("persos"), "", ""); /**
  • On récupère la string des pages avec formatteAffichagePages(). On lui passe le format de la page
  • courante et des autres pages, ainsi que la page courante. Avec les données des lignes 18 et 19
  • cette fonction retournera une string comme ceci :
*
  • Exemple : La page courante est la numéro 3
  • $strPages = <a href="exemple1.php?page=1">1</a>|<a href="exemple1.php?page=2">2</a>|3|<a href="exemple1.php?page=4">4</a>
*
  • On constate la présence de lien sur toutes les pages sauf la page courante. On remarque également
  • que la barre verticale "|" n'est pas présente après la page 4 (qui, dans cet exemple, est la
  • dernière page). Ceci grâce à l'instruction #t#. (voir la doc pour plus de précisions).
  • /
$strPages = $rch->formatteAffichagePages($formatPageCourante, $formatPageAutre, $pageCourante); ?> <html> <head> <title>Exemple 1 : Utilisation de classe sans mot-clé</title> <style> table tr.c1 { background-color: #FFEEEE; } table tr.c2 { background-color: #EEFFEE; } </style> </head> <body> <ul> <li><a href="exemple1.php">Exemple 1</a></li> <li><a href="exemple2.php">Exemple 2</a></li> <li><a href="exemple3.php">Exemple 3</a></li> </ul> <p>Recherche sans mots-clé</p> <table> <tr> <th width="50%">Nom</th> <th width="50%">Prenom</th> </tr> <?php $cx = 0; /**
  • On va créer un tableau contenant les
  • /
$choix = array(1, 2); $rq = mysql_query($sql); while ($ln = mysql_fetch_array($rq)){ /**
  • Ici, on va alterner la couleur des tr grâce à la méthode affichageAlterne(). On lui balance
  • simplement la couleur précédente (ou le nom de la classe CSS ou n'importe quoi d'autre)
  • ainsi que le tableau contenant tous les choix de couleurs différents.
  • /
$cx = $rch->affichageAlterne($cx, $choix); ?> <tr class="c<?php echo $cx; ?>"> <td><?php echo $ln["nom"]; ?></td> <td><?php echo $ln["prenom"]; ?></td> </tr> <?php } ?> </table> <p id="pages">Page <?php echo $strPages; ?></p> </body> </html>

Conclusion :


En théorie, ça marche nickel. Normalement, on peut arriver à tout faire pour structurer la navigation entre les pages. ça fonctionne avec n'importe quelle BDD, n'importe quels champs et n'importe quelles tables. Si vous avez des questions, je tâcherai d'y répondre ici.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
3
Date d'inscription
jeudi 7 décembre 2006
Statut
Membre
Dernière intervention
27 juin 2008

bonjour et merci pour ce script ;)
voila j'ai fait comme vous avez dit mais j'ai comme alexNunes des difficultés avec WHERE.
j'ai une erreur
mysql_num_rows(): supplied argument is not a valid MySQL result resource in E:\www\SiteBeatrice\gestionResultSQL.class.php on line 576

mysql_fetch_array(): supplied argument is not a valid MySQL result resource in E:\www\SiteBeatrice\Catalogue.php on line 62

la ligne 62 du catalogue est while ($ln = mysql_fetch_array($rq))

j'ai testé de metre avec et sans where pour $sql = $rch->retourneSQLStrRch mais toujours la meme erreur.

avez vous une idée?

merci d'avance.
Messages postés
122
Date d'inscription
mardi 19 novembre 2002
Statut
Membre
Dernière intervention
10 mars 2011

Salut,

essaie sans mettre le WHERE, soit :
$sql = $rch->retourneSQLStrRch($nbInstances, $pageCourante, array("*"), array("membres"), "cat=equipe", "ORDER BY nom ASC");

ça devrait fonctionner!
A+
Messages postés
1
Date d'inscription
jeudi 9 septembre 2004
Statut
Membre
Dernière intervention
5 janvier 2006

Bonjour,
j'ai quelques difficulté à configurer la clause WHERE dans votre code,en fait ça ne fonctionne pas, je n'ai peux-être pas la bonne syntaxe?
pouvez-vous m'aider la dessus.

voici ce que j'ai écrit:
$sql = $rch->retourneSQLStrRch($nbInstances, $pageCourante, array("*"), array("membres"), "WHERE cat=equipe", "ORDER BY nom ASC");

merci

Alex
Messages postés
122
Date d'inscription
mardi 19 novembre 2002
Statut
Membre
Dernière intervention
10 mars 2011

si tu connais Smarty (une librairie de génération de template pour php), tu y trouveras qqpart ton bonheur, puisque je sais qu'il utilise le cache. Par contre , je ne sais pas comment :P ....

Sinon, tu peux utiliser les $_SESSION . C'est un peu la magouille, mais en fait, même pas vraiment. Enfin bref, bonne chance, quoi ;)
Messages postés
3
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
28 octobre 2005

Ah oui j'oubliais, si quelqu'un connait une classe qui gere ma problematique de cache, je suis prenneur...

a+
Afficher les 13 commentaires

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.