[PHP/SQL] Script de pagination (un modèle)

Voir les PAGES PAR PAGES pour la pagination. Codes mise à jour en 2019 Script de pagination en PHP avec 2 requêtes SQL. Caractéristiques : - deux paramètres dans l'URL : nombre d'éléments par page et page actuelle - nombre minimum d'éléments par page (ici 5) - mise en exergue de la page actuelle par du balisage (strong) - lien vers la page précédente (sauf sur la page 1) - lien vers la page suivante (sauf sur la dernière) - nombre total de pages dispo en variable Page de démo (ne montre que l'aspect visuel). Inspiré d'un tutoriel du SDZ ( http://www.siteduzero.com/tutoriel-3-14547-tp-un-livre-d-or.html ).



48 880  vues
Compatibilité du code
PHP 4, PHP 5
A savoir

Ces fonctions sont utilisées dans ce code source:
mysql_fetch_assoc()    mysql_fetch_object()    mysql_free_result()    mysql_num_rows()    mysql_query()   

Ces extensions étaient obsolètes en PHP 5.5.0, et ont été supprimées en PHP 7.0.0.
à la place, vous pouvez utiliser l'extension MySQLi ou l'extension PDO_MySQL.
Voir aussi MySQL : choisir une API du guide et ces entrées de la FAQ pour plus d'informations.
Alternatives à cette fonction :
mysqli_connect() et PDO::__construct()

  code classé dans   Applications
  code source classé dans   Applications
 
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
                    
<?php
/*------------------------------*/
/*
Titre : [PHP/SQL] Script de pagination (un modèle)

Auteur : poujolrost-mathias
Date édition : 23 Juil 2009
*/
/*------------------------------*/

/* Script PHP por afficher des élements, en les paginant */

/* DEBUT recuperation du nombre par page */
if (isset($_GET['nombre']))
{
$nombreDeElementsParPage = (int) $_GET['nombre'];
if ($nombreDeElementsParPage < 5)
{ $nombreDeElementsParPage = 5; } // par défaut
}
else
{ $nombreDeElementsParPage = 5; } // par défaut
/* FIN recuperation du nombre par page */

/* DEBUT recuperation du numéro de page courante */
if (isset($_GET['page']))
{ $page = (int) $_GET['page']; }
else // La variable n'existe pas, c'est la première fois qu'on charge la page
{ $page = 1;} // On se met sur la page 1 (par défaut)
/* FIN recuperation du numéro de page courante */

/* On calcule le numéro du premier élément qu'on prend pour le LIMIT de MySQL
*/
$premierElementAAfficher = ($page - 1) * $nombreDeElementsParPage;

/* requête pour le nombre total de la sélection */
$reqNbrTotal = "SELECT COUNT(*) AS nbr FROM latable WHERE $where";
$resNbrTotal = mysql_query($reqNbrTotal);
$nbr = mysql_fetch_assoc($resNbrTotal);
$nombreLignes = $nbr['nbr']; // total pour la requete = pas que sur cette page

/* req. propre à cette page */
$requete = "SELECT *
FROM latable
WHERE $where
ORDER BY ordre ASC
LIMIT $premierElementAAfficher, $nombreDeElementsParPage";
$resultat = mysql_query($requete);
$nombreDeElementsSurCettePage = mysql_num_rows($resultat);

/* nombre de page, par arrondi à l'inférieur */
$nombreDePages = ceil($nombreLignes / $nombreDeElementsParPage);

/* DEBUT rédaction paragraphe de pagination */
$pagination = "Page : ";

if ($page != 1) // si on n'est pas sur la n°1 (= pas de précédente)
{
$pagination .= ' <a href="?nombre='.$nombreDeElementsParPage.'&page=' . (
$page - 1) . '#resultats" title="page '.($page - 1).
'"><abbr title="page précédente">Préc.</abbr></a> ';
}
if ($page != $nombreDePages)
// si on n'est pas sur la dernière (= pas de suivante)
{
$pagination .= ' <a href="?nombre='.$nombreDeElementsParPage.'&page=' . (
$page + 1) . '#resultats" title="page '.($page + 1).
'"><abbr title="page suivante">Suiv.</abbr></a> ';
}
for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
if ($i == $page) // si on est sur la page actuelle
{
$pagination .= '<strong title="page actuelle"> '. $i .'/'.
$nombreDePages.' </strong>';
}
else
{
$pagination .= ' <a href="?nombre='.$nombreDeElementsParPage.'&page=' .
$i . '#resultats" title="page '.$i.' sur '.$nombreDePages.'"> '. $i .' </a> ';
}
}
$difference = ($nombreLignes%$nombreDePages) +1;
$pagination .= "(affichage des résultats ";
$pagination .= $premierElementAAfficher+1;
$pagination .= " à ";
if( ($premierElementAAfficher+$nombreDeElementsSurCettePage) != ($page*
$nombreDeElementsParPage) )
{
$pagination .= $premierElementAAfficher+$nombreDeElementsSurCettePage;
}
else
{ $pagination .= $premierElementAAfficher+$nombreDeElementsParPage; }

$pagination .= " sur un total de $nombreLignes pour cette sélection).";
/* FIN rédaction paragraphe de pagination */

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Touts les éléments</title>
</head>

<body>

<form action="#resultats" method="get" id="form">
<p>ici vos critères de sélection, tri...</p>
<label for="l_nombre">Nombre par page</label> <input type="text"
name="nombre" id="l_nombre" value="<?php echo @rappel($nombreDeElementsParPage)
; ?>" size="2" maxlength="2" />
<input type="submit" value="Afficher les elementss" /></p>
</form>

<?php

if (!$resultat)
{
echo
"<p>Échec lors de la lecture de la table. <strong><a" .
" href=\"lapage.php\">Retour à cette page (avec les paramètres par défaut)<" .
"/a></strong>.</p>";
}
elseif ($nombreDeElementsSurCettePage == 0)
{
echo
"<p>Il n'y a aucun élément correspondant à cette sélection <em>ou</em>" .
" des paramètres de l'URL sont incorrects. <strong><a href=\"lapage.php\">Ret" .
"our à cette page (avec les paramètres par défaut)</a></strong>.";
}
else
{
echo "<p id=\"resultats\">$pagination</p>" ;

/* DEBUT de la boucle */
while ($ligne = mysql_fetch_object($resultat))
{

echo "<h3>$ligne->ref</h3>\n";
echo
"<p><img class=\"vignette\" src=\"../img/$ligne->vignette\"" .
" alt=\"$ligne->alt\" /></p>";
}
/* FIN de la boucle */
mysql_free_result($resultat);

echo
"<p style=\"clear: both; margin-top: 1em;\">$pagination <a" .
" href=\"#form\">Retour au formulaire</a>.</p>" ;

}// FIN du else
?>




</body>
</html>


?>
<?php
/*------------------------------*/
/*
Titre : [PHP/SQL] Script de pagination (un modèle)

Auteur : poujolrost-mathias
Date édition : 23 Juil 2009
*/
/*------------------------------*/

/* Script PHP por afficher des élements, en les paginant */

/* DEBUT recuperation du nombre par page */
if (isset($_GET['nombre']))
{
$nombreDeElementsParPage = (int) $_GET['nombre'];
if ($nombreDeElementsParPage < 5)
{ $nombreDeElementsParPage = 5; } // par défaut
}
else
{ $nombreDeElementsParPage = 5; } // par défaut
/* FIN recuperation du nombre par page */

/* DEBUT recuperation du numéro de page courante */
if (isset($_GET['page']))
{ $page = (int) $_GET['page']; }
else // La variable n'existe pas, c'est la première fois qu'on charge la page
{ $page = 1;} // On se met sur la page 1 (par défaut)
/* FIN recuperation du numéro de page courante */

/* On calcule le numéro du premier élément qu'on prend pour le LIMIT de MySQL
*/
$premierElementAAfficher = ($page - 1) * $nombreDeElementsParPage;

/* requête pour le nombre total de la sélection */
$reqNbrTotal = "SELECT COUNT(*) AS nbr FROM latable WHERE $where";
$resNbrTotal = mysql_query($reqNbrTotal);
$nbr = mysql_fetch_assoc($resNbrTotal);
$nombreLignes = $nbr['nbr']; // total pour la requete = pas que sur cette page

/* req. propre à cette page */
$requete = "SELECT *
FROM latable
WHERE $where
ORDER BY ordre ASC
LIMIT $premierElementAAfficher, $nombreDeElementsParPage";
$resultat = mysql_query($requete);
$nombreDeElementsSurCettePage = mysql_num_rows($resultat);

/* nombre de page, par arrondi à l'inférieur */
$nombreDePages = ceil($nombreLignes / $nombreDeElementsParPage);

/* DEBUT rédaction paragraphe de pagination */
$pagination = "Page : ";

if ($page != 1) // si on n'est pas sur la n°1 (= pas de précédente)
{
$pagination .= ' <a href="?nombre='.$nombreDeElementsParPage.'&page=' . (
$page - 1) . '#resultats" title="page '.($page - 1).
'"><abbr title="page précédente">Préc.</abbr></a> ';
}
if ($page != $nombreDePages)
// si on n'est pas sur la dernière (= pas de suivante)
{
$pagination .= ' <a href="?nombre='.$nombreDeElementsParPage.'&page=' . (
$page + 1) . '#resultats" title="page '.($page + 1).
'"><abbr title="page suivante">Suiv.</abbr></a> ';
}
for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
if ($i == $page) // si on est sur la page actuelle
{
$pagination .= '<strong title="page actuelle"> '. $i .'/'.
$nombreDePages.' </strong>';
}
else
{
$pagination .= ' <a href="?nombre='.$nombreDeElementsParPage.'&page=' .
$i . '#resultats" title="page '.$i.' sur '.$nombreDePages.'"> '. $i .' </a> ';
}
}
$difference = ($nombreLignes%$nombreDePages) +1;
$pagination .= "(affichage des résultats ";
$pagination .= $premierElementAAfficher+1;
$pagination .= " à ";
if( ($premierElementAAfficher+$nombreDeElementsSurCettePage) != ($page*
$nombreDeElementsParPage) )
{
$pagination .= $premierElementAAfficher+$nombreDeElementsSurCettePage;
}
else
{ $pagination .= $premierElementAAfficher+$nombreDeElementsParPage; }

$pagination .= " sur un total de $nombreLignes pour cette sélection).";
/* FIN rédaction paragraphe de pagination */

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Touts les éléments</title>
</head>

<body>

<form action="#resultats" method="get" id="form">
<p>ici vos critères de sélection, tri...</p>
<label for="l_nombre">Nombre par page</label> <input type="text"
name="nombre" id="l_nombre" value="<?php echo @rappel($nombreDeElementsParPage)
; ?>" size="2" maxlength="2" />
<input type="submit" value="Afficher les elementss" /></p>
</form>

<?php

if (!$resultat)
{
echo
"<p>Échec lors de la lecture de la table. <strong><a" .
" href=\"lapage.php\">Retour à cette page (avec les paramètres par défaut)<" .
"/a></strong>.</p>";
}
elseif ($nombreDeElementsSurCettePage == 0)
{
echo
"<p>Il n'y a aucun élément correspondant à cette sélection <em>ou</em>" .
" des paramètres de l'URL sont incorrects. <strong><a href=\"lapage.php\">Ret" .
"our à cette page (avec les paramètres par défaut)</a></strong>.";
}
else
{
echo "<p id=\"resultats\">$pagination</p>" ;

/* DEBUT de la boucle */
while ($ligne = mysql_fetch_object($resultat))
{

echo "<h3>$ligne->ref</h3>\n";
echo
"<p><img class=\"vignette\" src=\"../img/$ligne->vignette\"" .
" alt=\"$ligne->alt\" /></p>";
}
/* FIN de la boucle */
mysql_free_result($resultat);

echo
"<p style=\"clear: both; margin-top: 1em;\">$pagination <a" .
" href=\"#form\">Retour au formulaire</a>.</p>" ;

}// FIN du else
?>




</body>
</html>


?>

      Fonctions du code - Doc officielle PHP

   php.net  
Description
Versions PHP
    ceil
Arrondit au nombre supérieur
PHP 4, 5, 7 et 8
    echo
Affiche une chaîne de caractères
PHP 4, 5, 7 et 8
    isset
Détermine si une variable est déclarée et est différente de null
PHP 4, 5, 7 et 8
    mysql_fetch_assoc Lit une ligne de résultat MySQL dans un tableau associatif - (PHP 4 >= 4.0.3, PHP 5, PECL mysql:1.0)   !  OBSOLèTE en PHP 5.5.0, supprimée en PHP 7.0.0
    mysql_fetch_object Retourne une ligne de résultat MySQL sous la forme d'un objet - (PHP 4, PHP 5, PECL mysql:1.0)   !  OBSOLèTE en PHP 5.5.0, supprimée en PHP 7.0.0
    mysql_free_result Libère le résultat de la mémoire - (PHP 4, PHP 5, PECL mysql:1.0)   !  OBSOLèTE en PHP 5.5.0, supprimée en PHP 7.0.0
    mysql_num_rows Retourne le nombre de lignes d'un résultat MySQL - (PHP 4, PHP 5, PECL mysql:1.0)   !  OBSOLèTE en PHP 5.5.0, supprimée en PHP 7.0.0
    mysql_query Envoie une requête à un serveur MySQL - (PHP 4, PHP 5, PECL mysql:1.0)   !  OBSOLèTE en PHP 5.5.0, supprimée en PHP 7.0.0

[1]

  • avatar

    Invité

    11 Août 2020 à 15:00

    Merci beaucoup

Minimum 10 mots. Votre commentaire sera visible après validation.


 Autres snippets qui pourraient vous intéresser

Pagination PDO

Compatibilité : PHP 5, PHP 7, PHP 8

Le code doit être adapté à vos besoins, il suffit de changer quelques variables pour l'adapter à vos besoins. Code testé sur Wamp et chez OVH

Pagination classique

Compatibilité : PHP 5, PHP 7, PHP 8

Affichage page par page classique. Lecture à partir d'une base MySQL. Script complet avec exemples.

* Requêtes exécutées avec Recherche Contextuelle

  Les derniers scripts

PHP 8.5.5

logo PHP
Langue langue us
Date 12 Avril
Taille 32 Mo
Catégorie PHP

PHP 8.4.20

logo PHP
Langue langue us
Date 12 Avril
Taille 30 Mo
Catégorie PHP

Serendipity 2.6.0

logo Serendipity
Langue langue fr
Date 11 Avril
Taille 15 Mo
Catégorie Blogs

Drupal 11.3.6

logo Drupal
Langue langue us
Date 11 Avril
Taille 34 Mo
Catégorie CMS

TYPO3 14.2.0

logo TYPO3
Langue langue fr
Date 10 Avril
Taille 38 Mo
Catégorie CMS

Dolibarr ERP 23.0.1

logo Dolibarr ERP
Langue langue fr
Date 09 Avril
Taille 89 Mo
Catégorie Logiciels
avatar

Poujolrost-mathias

  23 Juil 2009

  SOURCE   Télécharger
48 880 Vues
Compatibilité du code
PHP 4, PHP 5