Listage d'une requête sur plusieurs pages

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

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.