Créer un système de pagination automatique en PHP

Transcription

Créer un système de pagination automatique en PHP
Créer un système de pagination automatique
en PHP (exemple sur un livre d'or !)
par Antoine Hérault (Mes tutoriels)
Date de publication : 23 décembre 2006
Dernière mise à jour : 23 décembre 2006
Vous avez un livre d'or (ou autre) en PHP. Vous voulez afficher tous les
messages mais il y en a trop pour tous les afficher sur une page ?
Alors ce tutoriel vous intéressera : je vais programmer avec vous un système
de pagination automatique.
Ainsi, vous pourrez étaler vos messages sur plusieurs pages et le tout
automatiquement !
Créer un système de pagination automatique en PHP (exemple sur un livre d'or !) par Antoine Hérault (Mes tutoriels)
1 - Preface
2 - Le but !
3 - La table utilisée pour le script
4 - Réalisation du script
4.0 - Compter le nombre de pages
4.1 - Afficher les messages correspondants à la page actuelle
4.2 - Afficher la liste des pages
5 - Pour aller plus loin
6 - Conclusion
-2Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur ( http://www.lahacheweb.com ).
http://antoine-herault.developpez.com/
Créer un système de pagination automatique en PHP (exemple sur un livre d'or !) par Antoine Hérault (Mes tutoriels)
1 - Preface
Bonjour à tous !
Dans ce tutoriel, je vais tenter de vous expliquer un petit algorithme très courant mais pas si évident au début : la
pagination automatique.
Je prendrai l'affichage des messages d'un livre d'or pour exemple.
Bien entendu, je ne vais pas vous déballer le code comme ça.
Nous allons le programmer ensemble.
-3Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur ( http://www.lahacheweb.com ).
http://antoine-herault.developpez.com/
Créer un système de pagination automatique en PHP (exemple sur un livre d'or !) par Antoine Hérault (Mes tutoriels)
2 - Le but !
Notre but est de créer un système de pagination pour afficher les messages de notre livre d'or.
Jusqu'à maintenant, nous affichions tous les messages sur une seule page.
Vue la quantité actuelle, cela devient impossible.
Puisque de nouveaux messages sont régulièrement ajoutés au livre d'or, le système doit être automatisé.
Notre système devra en plus nous permettre de changer facilement le nombre de messages affichés par page.
-4Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur ( http://www.lahacheweb.com ).
http://antoine-herault.developpez.com/
Créer un système de pagination automatique en PHP (exemple sur un livre d'or !) par Antoine Hérault (Mes tutoriels)
3 - La table utilisée pour le script
Pour notre script, nous allons utiliser la table d'un livre d'or tout simple :
id
pseudo
message
L'id est un champ qui ne comporte qu'un numéro. Ce numéro augmente de 1 à chaque nouveau message (auto
incrémentation).
L'id va nous permettre de trier les messages : celui qui a le plus grand ID est celui qui a été posté le plus récemment.
Je vous conseille de copier le code SQL ci-dessous puis de l'installer chez vous afin de pouvoir tester le code.
J'ai même inséré quelques messages histoire d'avoir un peu de matière pour utiliser le script.
Table livredor pour pouvoir suivre ce tutoriel
CREATE TABLE `livredor` (
`id` bigint(20) NOT NULL auto_increment,
`pseudo` text,
`message` text,
KEY `id` (`id`)
) TYPE=MyISAM;
INSERT INTO `livredor` VALUES ('1','Tonio','Salut !
C\'est vraiment un super site ! ! !');
INSERT INTO `livredor` VALUES ('2','Jacot','Bravo !
Je te félicite pour ton site...');
INSERT INTO `livredor` VALUES ('3','Paul','Merci pour ce site très instructif !
Bonne continuation. :o)');
INSERT INTO `livredor` VALUES ('4','AZERTY','Cool.
Super design !');
INSERT INTO `livredor` VALUES ('5','MagaMan','Bravo !
Super le livre d\'or...');
INSERT INTO `livredor` VALUES ('6','Giro','10/10 !
Encore merci !');
INSERT INTO `livredor` VALUES ('7','Sms','tro bi1 ton site!');
INSERT INTO `livredor` VALUES ('8','All','C\'est rigolo comme site. ^^');
INSERT INTO `livredor` VALUES ('9','Moi','Bien joué.
C\'est un site très réussit !');
INSERT INTO `livredor` VALUES ('10','Weby','J\'adore !
Allez voir mon site :
www.monsite.com');
INSERT INTO `livredor` VALUES ('11','Cool','Très bon design, très bon site. ');
INSERT INTO `livredor` VALUES ('12','LEGEANTDU75','C\'est un peu vide mais sympa quand même.
Bon courrage.');
INSERT INTO `livredor` VALUES ('13','Prune','Oh lalalala !
Le boooo site ! ;o)');
-5Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur ( http://www.lahacheweb.com ).
http://antoine-herault.developpez.com/
Créer un système de pagination automatique en PHP (exemple sur un livre d'or !) par Antoine Hérault (Mes tutoriels)
4 - Réalisation du script
Nous allons maintenant commencer à faire notre script.
4.0 - Compter le nombre de pages
Pour commencer ce script, nous allons compter le nombre de pages.
Pour compter le nombre de pages, nous allons commencer par compter tous les messages contenus dans le livre d'or.
Ensuite, nous allons mettre le nombre total de messages dans la variable $total.
Voici le code qui nous permettra de compter le nombre de messages :
Compter le nombre de messages
//Une connexion SQL doit être ouverte avant cette ligne...
$retour_total=mysql_query('SELECT COUNT(*) AS total FROM livredor'); //Nous récupérons le contenu
de la requête dans $retour_total
$donnees_total=mysql_fetch_assoc($retour_total); //On range retour sous la forme d'un tableau.
$total=$donnees_total['total']; //On récupère le total pour le placer dans la variable $total.
Maintenant que nous avons le nombre total de messages, nous allons en déduire le nombre de pages grâce à une
division et nous le mettrons dans la variable $messagesParPage.
Pour ce faire, nous allons diviser le nombre total par le nombre de messages à afficher par page.
Attention, le résultat de la division risque d'être un nombre à virgule. Si c'est le cas, nous devrons prendre le nombre
entier (sans virgule) supérieur car imaginons que vous affichiez 5 messages par page et que vous ayez 17 messages;
ème
17/5=3,4 et 3,4 page n'est pas un nombre correct de pages. Il va donc falloir créer la 4
page qui contiendra 2
messages.
Pour avoir le nombre entier supérieur, nous devons utiliser la fonction
ceil(). Dans notre code, nous mettrons
le nombre total de pages dans la variable $nombreDePages. Voici donc le code précédent complété de manière à
avoir le nombre de pages :
Calculer le nombre de pages
$messagesParPage=5; //Nous allons afficher 5 messages par page.
//Une connexion SQL doit être ouverte avant cette ligne...
$retour_total=mysql_query('SELECT COUNT(*) AS total FROM livredor'); //Nous récupérons le contenu
de la requête dans $retour_total
$donnees_total=mysql_fetch_assoc($retour_total); //On range retour sous la forme d'un tableau.
$total=$donnees_total['total']; //On récupère le total pour le placer dans la variable $total.
//Nous allons maintenant compter le nombre de pages.
$nombreDePages=ceil($total/$messagesParPage);
4.1 - Afficher les messages correspondants à la page actuelle
-6Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur ( http://www.lahacheweb.com ).
http://antoine-herault.developpez.com/
Créer un système de pagination automatique en PHP (exemple sur un livre d'or !) par Antoine Hérault (Mes tutoriels)
Maintenant que nous avons réussi à compter le nombre de pages, nous allons essayer d'afficher les messages de
la page actuelle.
Pour cela, nous allons donc devoir sélectionner une gamme de messages dans la table livredor par ordre d'id
décroissant (nous affichons les messages du plus récent au plus ancien).
Pour trier par ordre d'id décroissant, nous devons ajouter ceci à notre requête SQL (après les WHERE) : ORDER
BY id DESC.
A savoir pour trier les résultats d'une requête SQL dans l'ordre croissant ou décroissant :
Vous devez écrire ORDER BY. Ensuite, vous ajoutez le nom du champ utilisé pour trier et
pour terminer, vous pouvez ajouter DESC si vous souhaitez l'ordre décroissant. Si vous
souhaitez l'ordre croissant, ne mettez rien...
Sachez que pour les nombres, il s'agit du classement ordinal que l'on a l'habitude d'utiliser
et que pour les lettres, il s'agit de l'ordre alphabétique (croissant) ou inverse (décroissant).
Pour avoir une gamme précise (par exemple avoir depuis le message 5 jusqu'au message 10), nous devons ajouter
ceci à notre requête SQL (après les WHERE et les ORDER BY) :
LIMIT 5, 5
À savoir pour obtenir un gamme précise :
Vous devez utiliser LIMIT. Ensuite, vous devez ajouter le numéro de la première entrée à
afficher en sachant que le premier nombre n'est pas 1 mais 0, et pour terminer, le nombre
total que l'on veut récupérer.
Exemple : pour afficher le message 6 au message 15, il faut mettre LIMIT 5, 10. Essayez
de bien comprendre cela, c'est très important pour la suite.
Avant de faire notre requête, nous allons devoir savoir dans quelle page nous sommes.
Pour cela, nous allons dire que le numéro de la page actuelle est contenu dans la variable $_GET['page'] (donc sous
la forme livredor.php?page=[n° de la page]).
Si la variable $_GET['page'] n'existe pas, nous allons dire que nous sommes dans la page 1.
Nous allons rajouter une petite condition de telle manière que si le numéro de page contenu dans $_GET['page'] est
supérieur au nombre total de pages ($nombreDePage), alors la page sera la page maximum.
Pour savoir si une variable existe, il faut utiliser la fonction
isset().
Voici donc le bout de code permettant d'afficher le numéro de la page ajouté au code précédent :
Savoir dans quelle page nous sommes
$messagesParPage=5; //Nous allons afficher 5 messages par page.
//Une connexion SQL doit être ouverte avant cette ligne...
-7Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur ( http://www.lahacheweb.com ).
http://antoine-herault.developpez.com/
Créer un système de pagination automatique en PHP (exemple sur un livre d'or !) par Antoine Hérault (Mes tutoriels)
Savoir dans quelle page nous sommes
$retour_total=mysql_query('SELECT COUNT(*) AS total FROM livredor'); //Nous récupérons le contenu
de la requête dans $retour_total
$donnees_total=mysql_fetch_assoc($retour_total); //On range retour sous la forme d'un tableau.
$total=$donnees_total['total']; //On récupère le total pour le placer dans la variable $total.
//Nous allons maintenant compter le nombre de pages.
$nombreDePages=ceil($total/$messagesParPage);
if(isset($_GET['page'])) // Si la variable $_GET['page'] existe...
{
$pageActuelle=intval($_GET['page']);
if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est
plus grande que $nombreDePages...
{
$pageActuelle=$nombreDePages;
}
}
else // Sinon
{
$pageActuelle=1; // La page actuelle est la n°1
}
Bon, maintenant que nous avons le n° de la page que nous souhaitons afficher, il faut qu'on fasse notre requête SQL
et que l'on affiche les messages.
Notre requête va utiliser une ORDER BY pour avoir les messages dans l'ordre d'id décroissant de manière à avoir
les messages les plus récents en premier.
Notre requête va aussi utiliser LIMIT pour sélectionner une plage de messages.
La partie que nous aurons à modifier à chaque page est la plage de messages.
Nous devons donc indiquer à LIMIT la première entrée à lire et combien d'entrées nous voulons lire ensuite.
Nous avons déjà la première partie, elle est contenue dans la variable $messagesParPage.
Il ne nous reste donc plus qu'à indiquer la première entrée à lire ($premiereEntree).
Nous allons devoir le calculer avec la page actuelle ($pageActuelle) et le nombre de messages par page
($messagesParPage).
Nous allons retirer 1 à $pageActuelle puis multiplier $pageActuelle par $messagesParPage.
Faites le calcul vous-même :
Pour $pageActuelle=1 : $pageActuelle-1=0, 0*5=0 => Nous lisons les entrées à partir de l'entrée 0 soit la première
entrée.
Pour $pageActuelle=2 : $pageActuelle-1=1, 1*5=5 => Nous lisons les entrées à partir de l'entrée 5 soit la sixième
(qui est la première de la deuxième page).
Si vous avez le courage, vous devriez pouvoir faire la requête vous même.
Voici donc le code précédent avec la requête en plus.
-8Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur ( http://www.lahacheweb.com ).
http://antoine-herault.developpez.com/
Créer un système de pagination automatique en PHP (exemple sur un livre d'or !) par Antoine Hérault (Mes tutoriels)
J'ai même rajouté l'affichage des messages en bonus (ce n'est pas l'objet du cours et si vous êtes ici, c'est que vous
savez le faire...).
Afficher les messages de la page en cours
$messagesParPage=5; //Nous allons afficher 5 messages par page.
//Une connexion SQL doit être ouverte avant cette ligne...
$retour_total=mysql_query('SELECT COUNT(*) AS total FROM livredor'); //Nous récupérons le contenu
de la requête dans $retour_total
$donnees_total=mysql_fetch_assoc($retour_total); //On range retour sous la forme d'un tableau.
$total=$donnees_total['total']; //On récupère le total pour le placer dans la variable $total.
//Nous allons maintenant compter le nombre de pages.
$nombreDePages=ceil($total/$messagesParPage);
if(isset($_GET['page'])) // Si la variable $_GET['page'] existe...
{
$pageActuelle=intval($_GET['page']);
if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est
plus grande que $nombreDePages...
{
$pageActuelle=$nombreDePages;
}
}
else // Sinon
{
$pageActuelle=1; // La page actuelle est la n°1
}
$premiereEntree=($pageActuelle-1)*$messagesParPage; // On calcul la première entrée à lire
// La requête sql pour récupérer les messages de la page actuelle.
$retour_messages=mysql_query('SELECT * FROM livredor ORDER BY id DESC LIMIT '.$premiereEntree.',
'.$messagesParPage.'');
while($donnees_messages=mysql_fetch_assoc($retour_messages)) // On lit les entrées une à une grâce
à une boucle
{
//Je vais afficher les messages dans des petits tableaux. C'est à vous d'adapter pour votre
design...
//De plus j'ajoute aussi un nl2br pour prendre en compte les sauts à la ligne dans le message.
echo '<table width="400" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td><strong>Ecrit par : '.$donnees_messages['pseudo'].'</strong></td>
</tr>
<tr>
<td>'.nl2br($donnees_messages['message']).'</td>
</tr>
</table><br /><br />';
//J'ai rajouté des sauts à la ligne pour espacer les messages.
}
Les messages sont affichés dirrectement à leur sortie de la base de données !
Cette méthode peut s'avérer dangereuse s'il s'agit de messages entrés par les visiteurs :
l'un d'entre eux peut entrer du code HTML ou JavaScript et ainsi détourner vos visiteurs
ou voler les cookies !
Il est donc fortement conseillé d'utiliser la fonction
htmlentities() qui va remplacer
les caractères spéciaux ( < et > compris ) entités HTML et qui rendra donc les codes
impossibles à interpréter par les navigateurs.
-9Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur ( http://www.lahacheweb.com ).
http://antoine-herault.developpez.com/
Créer un système de pagination automatique en PHP (exemple sur un livre d'or !) par Antoine Hérault (Mes tutoriels)
Voilà, la partie d'affichage des messages en fonction de la page actuelle est terminée mais il manque une chose très
importante pour notre système de pagination automatique : la liste des pages.
4.2 - Afficher la liste des pages
C'est la dernière chose qu'il nous reste à faire. Il s'agit d'un petit bout de code qui va nous permettre d'afficher la liste
des pages avec un lien pointant vers chacune d'elles.
Il existe de très nombreuses manières d'afficher les pages qui sont plus ou moins compliquées.
La méthode que nous allons programmer ici est peut être la plus simple de toutes.
Cette méthode consiste tout simplement en une liste de toutes les pages. Cette méthode peut s'avérer inappropriée
si vous avez des centaines de pages.
Je vous préviens, ce n'est pas compliqué à faire du tout.
D'ailleurs, c'est tellement simple que nous allons corser un peu la difficulté : nous allons encadrer la page actuelle
par [ et ] et La page actuelle sera la seule qui ne sera pas un lien.
Rassurez vous, ça ne va pas être très compliqué... Nous allons devoir faire une boucle de type for.
Nous allons prendre pour départ la variable $i=1, nous allons l'incrémenter de 1 à chaque passage et nous allons
nous allons continuer jusqu'à ce que $i>=$nombreDePages.
Dans cette boucle nous afficherons un chiffre ($i) qui sera un lien vers livredor.php?page=$i. Dans cette boucle, nous
allons aussi mettre une condition de manière à ce que la page actuelle soit juste encadrée par [ et ].
Pour savoir s'il s'agit de la page actuelle, il suffira de savoir si $i==$pageActuelle. Si c'est le cas, on encadre ; sinon
on en fait un lien. Voici donc le code précédent avec en plus la liste des pages.
Affichage la liste des pages
$messagesParPage=5; //Nous allons afficher 5 messages par page.
//Une connexion SQL doit être ouverte avant cette ligne...
$retour_total=mysql_query('SELECT COUNT(*) AS total FROM livredor'); //Nous récupérons le contenu
de la requête dans $retour_total
$donnees_total=mysql_fetch_assoc($retour_total); //On range retour sous la forme d'un tableau.
$total=$donnees_total['total']; //On récupère le total pour le placer dans la variable $total.
//Nous allons maintenant compter le nombre de pages.
$nombreDePages=ceil($total/$messagesParPage);
if(isset($_GET['page'])) // Si la variable $_GET['page'] existe...
{
$pageActuelle=intval($_GET['page']);
if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est
plus grande que $nombreDePages...
{
$pageActuelle=$nombreDePages;
}
}
else // Sinon
{
$pageActuelle=1; // La page actuelle est la n°1
- 10 Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur ( http://www.lahacheweb.com ).
http://antoine-herault.developpez.com/
Créer un système de pagination automatique en PHP (exemple sur un livre d'or !) par Antoine Hérault (Mes tutoriels)
Affichage la liste des pages
}
$premiereEntree=($pageActuelle-1)*$messagesParPage; // On calcul la première entrée à lire
// La requête sql pour récupérer les messages de la page actuelle.
$retour_messages=mysql_query('SELECT * FROM livredor ORDER BY id DESC LIMIT '.$premiereEntree.',
'.$messagesParPage.'');
while($donnees_messages=mysql_fetch_assoc($retour_messages)) // On lit les entrées une à une grâce
à une boucle
{
//Je vais afficher les messages dans des petits tableaux. C'est à vous d'adapter pour votre
design...
//De plus j'ajoute aussi un nl2br pour prendre en compte les sauts à la ligne dans le message.
echo '<table width="400" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td><strong>Ecrit par :
'.stripslashes($donnees_messages['pseudo']).'</strong></td>
</tr>
<tr>
<td>'.nl2br(stripslashes($donnees_messages['message'])).'</td>
</tr>
</table><br /><br />';
//J'ai rajouté des sauts à la ligne pour espacer les messages.
}
echo '<p align="center">Page : '; //Pour l'affichage, on centre la liste des pages
for($i=1; $i<=$nombreDePages; $i++) //On fait notre boucle
{
//On va faire notre condition
if($i==$pageActuelle) //Si il s'agit de la page actuelle...
{
echo ' [ '.$i.' ] ';
}
else //Sinon...
{
echo ' <a href="livredor.php?page='.$i.'">'.$i.'</a> ';
}
}
echo '</p>';
Voilà, le code de pagination automatique est terminé !
- 11 Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur ( http://www.lahacheweb.com ).
http://antoine-herault.developpez.com/
Créer un système de pagination automatique en PHP (exemple sur un livre d'or !) par Antoine Hérault (Mes tutoriels)
5 - Pour aller plus loin
Il existe des librairies qui permettent de faire plus simplement et plus vite la même chose que le code que nous
avons programmé.
C'est le cas de « Pager » qui est un package de la célèbre librairie Pear.
Pour l'utiliser, vous devez donc installer Pear et le package « Pager ».
Installer Pear :
http://php.developpez.com/cours/installationpear/
Le site officiel de Pear :
http://pear.php.net
La page du package Pager :
http://pear.php.net/package/Pager
Voici un exemple de code permettant de réaliser une pagination complète en peu de lignes !
Ce n'est qu'un morceau de code pour vous montrer que l'on n'est pas toujours obligés de réinventer la roue comme
nous l'avons fait dans ce tutoriel...
Pagination avec Pear Pager
require_once ('Pager/Pager.php');
$nbItems=$this->DB->getNbItems ();
// construction d'un pager
$params = array(
'mode'
=> 'Sliding', // "Jumping" ou "Sliding" -fenêtre- Cela détermine le comportement
de Pager.
'perPage'
=> 100, // Nombre d'éléments à afficher dans chaque page.
'delta'
=> 5, // Nombre de numéros de pages à afficher avant et après celui en cours.
'totalItems' => $nbItems // Tableau des éléments à répartir
);
$pager = & Pager::factory($params);
$links = $pager->getLinks();
// Récupération des données en prenant en compte l'id de la page courante et le nombre d'items par
page
$members = $this->DB->getAllItems(100, $pager->getCurrentPageID());
echo $links['all'];
Ce code utilise ce que l'on appelle la POO (Programmation Orientée Objet). C'est à dire qu'elle utilise des classes
et des objets.
La POO est une notion très importante en PHP et surtout depuis la sortie de PHP5.
Si vous êtes intéressé(e) par la POO et PHP5, je vous conseille ce livre qui m'a appris beaucoup de choses :
avancé
PHP5
- 12 Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur ( http://www.lahacheweb.com ).
http://antoine-herault.developpez.com/
Créer un système de pagination automatique en PHP (exemple sur un livre d'or !) par Antoine Hérault (Mes tutoriels)
6 - Conclusion
Ce tutoriel est maintenant terminé, j'espère que vous y avez appris des techniques et que vous avez compris.
Voici pour ceux qui voudraient tester le script à "copier - coller". Il faudra l'enregistrer sous le nom livredor.php et
modifier les identifiants de connexion à la base de données. Bien entendu, il faudra que vous ayez aussi récupéré
la table livredor que je vous ai fournie...
Code final
<html>
<head>
<title>Exemple de pagination automatique sur un livre d or</title>
</head>
<body>
<?php
//Connexion à la base de données
mysql_connect('serveur', 'utilisateur', 'motdepasse');
mysql_select_db('basededonnees');
$messagesParPage=5; //Nous allons afficher 5 messages par page.
//Une connexion SQL doit être ouverte avant cette ligne...
$retour_total=mysql_query('SELECT COUNT(*) AS total FROM livredor'); //Nous récupérons le contenu
de la requête dans $retour_total
$donnees_total=mysql_fetch_assoc($retour_total); //On range retour sous la forme d'un tableau.
$total=$donnees_total['total']; //On récupère le total pour le placer dans la variable $total.
//Nous allons maintenant compter le nombre de pages.
$nombreDePages=ceil($total/$messagesParPage);
if(isset($_GET['page'])) // Si la variable $_GET['page'] existe...
{
$pageActuelle=intval($_GET['page']);
if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est
plus grande que $nombreDePages...
{
$pageActuelle=$nombreDePages;
}
}
else // Sinon
{
$pageActuelle=1; // La page actuelle est la n°1
}
$premiereEntree=($pageActuelle-1)*$messagesParPage; // On calcul la première entrée à lire
// La requête sql pour récupérer les messages de la page actuelle.
$retour_messages=mysql_query('SELECT * FROM livredor ORDER BY id DESC LIMIT '.$premiereEntree.',
'.$messagesParPage.'');
while($donnees_messages=mysql_fetch_assoc($retour_messages)) // On lit les entrées une à une grâce
à une boucle
{
//Je vais afficher les messages dans des petits tableaux. C'est à vous d'adapter pour votre
design...
//De plus j'ajoute aussi un nl2br pour prendre en compte les sauts à la ligne dans le message.
echo '<table width="400" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td><strong>Ecrit par :
'.stripslashes($donnees_messages['pseudo']).'</strong></td>
</tr>
<tr>
- 13 Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur ( http://www.lahacheweb.com ).
http://antoine-herault.developpez.com/
Créer un système de pagination automatique en PHP (exemple sur un livre d'or !) par Antoine Hérault (Mes tutoriels)
Code final
<td>'.nl2br(stripslashes($donnees_messages['message'])).'</td>
</tr>
</table><br /><br />';
//J'ai rajouté des sauts à la ligne pour espacer les messages.
}
echo '<p align="center">Page : '; //Pour l'affichage, on centre la liste des pages
for($i=1; $i<=$nombreDePages; $i++) //On fait notre boucle
{
//On va faire notre condition
if($i==$pageActuelle) //Si il s'agit de la page actuelle...
{
echo ' [ '.$i.' ] ';
}
else //Sinon...
{
echo ' <a href="livredor.php?page='.$i.'">'.$i.'</a> ';
}
}
echo '</p>';
?>
</body>
</html>
Je remercie hugo123 pour m'avoir aidé à propos de Pear Pager !
Si vous avez un problème ou si vous voyez une erreur dans ce tutoriel, prévenez moi, c'est comme cela qu'on
avance...
La FAQ au sujet des boucles en PHP :
FAQ : Boucles en PHP
- 14 Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur ( http://www.lahacheweb.com ).
http://antoine-herault.developpez.com/
Créer un système de pagination automatique en PHP (exemple sur un livre d'or !) par Antoine Hérault (Mes tutoriels)
- 15 Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par
quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur ( http://www.lahacheweb.com ).
http://antoine-herault.developpez.com/

Documents pareils