Pagination Web
Le site http://www.phpcs.com propose un code parfait pour paginer vos pages web. Quand je dis parfait, je n'exagère pas : non seulement le code est très bien documenté mais en plus il fonctionne d'un claquement de doigts. Sisi c'est possible !
- <?
- //==============================================================================
- // # PAGINATION AUTOMATIQUE PAR APPEL DE FONCTIONS PHP #
- //==============================================================================
- ?>
- <html>
- <head>
- <title>Script de pagination automatique en php</title>
- <!-- Styles CSS -->
- <style type="text/css">
- html {font-size: 1.4em;}
- .pagination a {color: black;}
- .pagination a:hover {color: red; text-decoration: none;}
- .pagination a:visited {color: red; text-decoration: none;}
- </style>
- </head>
- <body>
- <?
- //==============================================================================
- // Configuration à modifier avec vos propres paramètres
- //==============================================================================
- // Connexion à la base de données
- $host = "localhost";
- $user = "root";
- $pass = "";
- $data = "mabase"; // Nommer ici la base de données
- $connect = mysql_connect($host, $user, $pass)
- or die("Connexion au serveur impossible !");
- $db = mysql_select_db($data, $connect)
- or die("Sélection de la base impossible !");
- // Paramétrage de la requête (ne pas modifier le nom des variable)
- $table = "matable"; // Table à sélectionner dans la base
- $champ = "champtest"; // Champ de la table à afficher pour tester ce script
- $sql = "SELECT * FROM $table"; // Requête initiale (à compléter si nécessaire)
- $parpage = 5; // Nombre d'enregistrements par page à afficher
- //==============================================================================
- // Déclaration et initialisation des variables (ici ne rien modifier)
- //==============================================================================
- // On définit le suffixe du lien url qui affichera les pages
- // $_SERVEUR['PHP_SELF'] donne l'arborescence de la page courante
- $url = $_SERVER['PHP_SELF']."?limit=";
- $total = mysql_query($sql); // Résultat total de la requête $sql
- $nblignes = mysql_num_rows($total); // Nbre total d'enregistrements
- // On calcule le nombre de pages à afficher en arrondissant
- // le résultat au nombre supérieur grâce à la fonction ceil()
- $nbpages = ceil($nblignes/$parpage);
- //==============================================================================
- // Exemple d'affichage HTML
- //==============================================================================
- // On teste en affichant la valeur des variables (facultatif)
- echo "<p>La table <b>".$table."</b> compte ".$nblignes." <b>".$champ."</b>.";
- echo "<br />n"."On affiche <b>".$parpage." enregistrements</b> par page, ";
- echo "soit un total de <b>".$nbpages." pages</b>.</p>n";
- // Si une valeur 'limit' est passée par url, on vérifie la validité de
- // cette valeur par mesure de sécurité avec la fonction validlimit()
- // cette fonction retourne automatiquement le résultat de la requête
- $result = validlimit($nblignes,$parpage,$sql);
- // On affiche le résultat de la requête
- // On crée donc ici son propre tableau pour lequel on souhaite une pagination
- while ($ligne = mysql_fetch_array($result)) {
- echo $ligne[$champ]."<br />n";
- }
- // Menu de pagination que l'on place après la requête
- echo "<div class='pagination'>";
- echo pagination($url,$parpage,$nblignes,$nbpages);
- echo "</div>";
- mysql_free_result($result); // Libère le résultat de la mémoire
- //==============================================================================
- // Fonctions à copier de préférence dans un fichier 'include/fonctions.inc.php'
- //==============================================================================
- function pagination($url,$parpage,$nblignes,$nbpages)
- {
- // On crée le code html pour la pagination
- $html = precedent($url,$parpage,$nblignes); // On crée le lien precedent
- // On vérifie que l'on a plus d'une page à afficher
- if ($nbpages > 1) {
- // On boucle sur les numéros de pages à afficher
- for ($i = 0 ; $i < $nbpages ; ++$i) {
- $limit = $i * $parpage; // On calcule le début de la valeur 'limit'
- $limit = $limit.",".$parpage; // On fait une concaténation avec $parpage
- // On affiche les liens des numéros de pages
- $html .= "<a href=".$url.$limit.">".($i + 1)."</a> | " ;
- }
- }
- // Si l'on a qu'une page on affiche rien
- else {
- $html .= "";
- }
- $html .= suivant($url,$parpage,$nblignes); // On crée le lien suivant
- // On retourne le code html
- return $html;
- }
- function validlimit($nblignes,$parpage,$sql)
- {
- // On vérifie l'existence de la variable $_GET['limit']
- // $limit correspond à la clause LIMIT que l'on ajoute à la requête $sql
- if (isset($_GET['limit'])) {
- $pointer = split('[,]', $_GET['limit']); // On scinde $_GET['limit'] en 2
- $debut = $pointer[0];
- $fin = $pointer[1];
- // On vérifie la conformité de la variable $_GET['limit']
- if (($debut >= 0) && ($debut < $nblignes) && ($fin == $parpage)) {
- // Si $_GET['limit'] est valide on lance la requête pour afficher la page
- $limit = $_GET['limit']; // On récupère la valeur 'limit' passée par url
- $sql .= " LIMIT ".$limit.";"; // On ajoute $limit à la requête $sql
- $result = mysql_query($sql); // Nouveau résultat de la requête
- }
- // Sinon on affiche la première page
- else {
- $sql .= " LIMIT 0,".$parpage.";"; // On ajoute la valeur LIMIT à la requête
- $result = mysql_query($sql); // Nouveau résultat de la requête
- }
- }
- // Si la valeur 'limit' n'est pas connue, on affiche la première page
- else {
- $sql .= " LIMIT 0,".$parpage.";"; // On ajoute la valeur LIMIT à la requête
- $result = mysql_query($sql); // Nouveau résultat de la requête
- }
- // On retourne le résultat de la requête
- return $result;
- }
- function precedent($url,$parpage,$nblignes)
- {
- // On vérifie qu'il y a au moins 2 pages à afficher
- if ($nblignes > $parpage) {
- // On vérifie l'existence de la variable $_GET['limit']
- if (isset($_GET['limit'])) {
- // On scinde la variable 'limit' en utilisant la virgule comme séparateur
- $pointer = split('[,]', $_GET['limit']);
- // On récupère le nombre avant la virgule et on soustrait la valeur $parpage
- $pointer = $pointer[0]-$parpage;
- // Si on atteint la première page, pas besoin de lien 'Précédent'
- if ($pointer < 0) {
- $precedent = "";
- }
- // Sinon on affiche le lien avec l'url de la page précédente
- else {
- $limit = "$pointer,$parpage";
- $precedent = "<a href=".$url.$limit."><</a> | ";
- }
- }
- else {
- $precedent = ""; // On est à la première page, pas besoin de lien 'Précédent'
- }
- }
- else {
- $precedent = ""; // On a qu'une page, pas besoin de lien 'Précédent'
- }
- return $precedent;
- }
- function suivant($url,$parpage,$nblignes)
- {
- // On vérifie qu'il y a au moins 2 pages à afficher
- if ($nblignes > $parpage) {
- // On vérifie l'existence de la variable $_GET['limit']
- if (isset($_GET['limit'])) {
- // On scinde la variable 'limit' en utilisant la virgule comme séparateur
- $pointer = split('[,]', $_GET['limit']);
- // On récupère le nombre avant la virgule auquel on ajoute la valeur $parpage
- $pointer = $pointer[0] + $parpage;
- // Si on atteint la dernière page, pas besoin de lien 'Suivant'
- if ($pointer >= $nblignes) {
- $suivant = "";
- }
- // Sinon on affiche le lien avec l'url de la page suivante
- else {
- $limit = "$pointer,$parpage";
- $suivant = "<a class='pagination' href=".$url.$limit.">></a>";
- }
- }
- // Si pas de valeur 'limit' on affiche le lien de la deuxième page
- if (@$_GET['limit']== false) {
- $suivant = "<a href=".$url.$parpage.",".$parpage.">></a>";
- }
- }
- else {
- $suivant = ""; // On a qu'une page, pas besoin de lien 'Suivant'
- }
- return $suivant;
- }
- // Fin du script
- ?>
- </body>
- </html>