Connexion
S'inscrire
Actualités
Quoi de neuf
Activités générales
Auteurs
Forums
Nouveaux messages
Rechercher un forum
Wiki
Pages
Dernière activité
Quoi de neuf
Nouveaux messages
Nouveaux messages de profil
Activités générales
Membres
Membres inscrits
Visiteurs actuels
Nouveaux messages de profil
Rechercher dans les messages des profils
Teams
Créé ton équipe
Quoi de neuf ?
Nouveaux messages
Rechercher un forum
Menu
Connexion
S'inscrire
Install the app
Install
Forums
Forums généraux
Informatique
Développement
Tutoriel - Faire une pagination
JavaScript is disabled. For a better experience, please enable JavaScript in your browser before proceeding.
Vous utilisez un navigateur non à jour ou ancien. Il ne peut pas afficher ce site ou d'autres sites correctement.
Vous devez le mettre à jour ou utiliser un
navigateur alternatif
.
Répondre à la discussion
Message
<blockquote data-quote="WhiiTe'" data-source="post: 7397147" data-attributes="member: 8987"><p style="text-align: center"><strong><span style="color: rgb(213, 160, 33)"><span style="font-size: 26px"><img src="/data/assets/smilies/smileyinduste.png" class="smilie" loading="lazy" alt=":induste:" title="Induste :induste:" data-shortname=":induste:" /> Faire une pagination <img src="/data/assets/smilies/smileyinduste.png" class="smilie" loading="lazy" alt=":induste:" title="Induste :induste:" data-shortname=":induste:" /></span></span></strong></p><p></p><p>Bonjour <strong><span style="color: rgb(8, 65, 92)">Induste</span></strong>,</p><p></p><p>Dans ce tutoriel on va voir comment faire une <strong><span style="color: rgb(8, 65, 92)">pagination</span></strong>, je vais vous montrer deux façons, l'une avec un <strong><span style="color: rgb(8, 65, 92)">tableau</span></strong>, et l'autre via une <strong><span style="color: rgb(8, 65, 92)">base de données</span></strong>.</p><p>Vous devrez en fonction de la partie que vous suivrez avoir le fichier <strong><span style="color: rgb(8, 65, 92)">Json </span></strong>ou importer le fichier <strong><span style="color: rgb(8, 65, 92)">SQL </span></strong>qui se trouvent dans le fichier<strong><span style="color: rgb(8, 65, 92)"> zippé</span></strong>.</p><p></p><p><strong><span style="color: rgb(8, 65, 92)">Sommaire </span></strong>:</p><ol> <li data-xf-list-type="ol">Faire une pagination - Avec un tableau</li> <li data-xf-list-type="ol">Faire une pagination - Depuis la base de données</li> <li data-xf-list-type="ol">Affichage des données</li> </ol><p>Pour la troisième partie, le code est <strong><span style="color: rgb(8, 65, 92)">adapté </span></strong>aux deux parties précédentes, donc peu importe ce que vous choisirez, ça <strong><span style="color: rgb(8, 65, 92)">fonctionnera</span></strong>.</p><p>Vous trouverez aussi dans le dossier du projet <strong><span style="color: rgb(8, 65, 92)">zippé </span></strong>les fichiers de code attaché au sujet. <span style="color: rgb(255, 255, 255)">pour les feignasses quoi</span></p><p></p><p style="text-align: center"><strong><span style="color: rgb(213, 160, 33)"><span style="font-size: 18px"><img src="/data/assets/smilies/smileyinduste.png" class="smilie" loading="lazy" alt=":induste:" title="Induste :induste:" data-shortname=":induste:" /> Faire une pagination - Avec un tableau <img src="/data/assets/smilies/smileyinduste.png" class="smilie" loading="lazy" alt=":induste:" title="Induste :induste:" data-shortname=":induste:" /></span></span></strong></p><p></p><p>Placez le fichier <strong><span style="color: rgb(8, 65, 92)">Json </span></strong>où vous le souhaitez dans votre projet.</p><p></p><p>On va commencer par créer un nouveau fichier <strong><span style="color: rgb(8, 65, 92)">PHP</span></strong>, index.php pour ma part.</p><p></p><p>Ensuite, on va récupérer le <strong><span style="color: rgb(8, 65, 92)">contenu </span></strong>du fichier Json et le <strong><span style="color: rgb(8, 65, 92)">décoder</span></strong>.</p><p></p><p>[CODE=php]<?php</p><p></p><p>$items = file_get_contents('items.json');</p><p>$items = json_decode($items, true);[/CODE]</p><p></p><p>Dans la variable <strong><span style="color: rgb(8, 65, 92)">$items</span></strong> se trouve donc un tableau à <strong><span style="color: rgb(8, 65, 92)">200 entrées</span></strong>.</p><p>On va ensuite définir la <strong><span style="color: rgb(8, 65, 92)">page </span></strong>sur laquelle on se trouve, par <strong><span style="color: rgb(8, 65, 92)">défaut </span></strong>on sera sur la <strong><span style="color: rgb(8, 65, 92)">première </span></strong>page.</p><p></p><p>[CODE=php]$page = (!empty($_GET['page']) && $_GET['page'] > 0) ? intval($_GET['page']) : 1;[/CODE]</p><p></p><p>Ensuite on va définir le <strong><span style="color: rgb(8, 65, 92)">nombre de lignes</span></strong> à afficher par page, et récupérer le <strong><span style="color: rgb(8, 65, 92)">total </span></strong>de page qu'on aura.</p><p></p><p>[CODE=php]$limit = 20;</p><p>$totalPages = ceil(count($items) / $limit);[/CODE]</p><p></p><p>La variable <strong><span style="color: rgb(8, 65, 92)">$totalPages</span></strong> contiendra le nombre de pages qu'on aura en tout, dans notre cas pour <strong><span style="color: rgb(8, 65, 92)">200 entrées</span></strong> dont <strong><span style="color: rgb(8, 65, 92)">20 par page</span></strong>, on aura <strong><span style="color: rgb(8, 65, 92)">10 pages au total</span></strong>.</p><p></p><p>Ensuite on va en quelque sorte "<strong><span style="color: rgb(8, 65, 92)">sécuriser</span></strong>" notre pagination pour pas que quelqu'un change <strong><span style="color: rgb(8, 65, 92)">l'URL</span></strong>, mette la page 20 alors que le <strong><span style="color: rgb(8, 65, 92)">maximum </span></strong>est 10.</p><p></p><p>[CODE=php]$page = max($page, 1);</p><p>$page = min($page, $totalPages);[/CODE]</p><p></p><p>Sachant que la variable <strong><span style="color: rgb(8, 65, 92)">$page</span></strong> contient la page actuelle, on lui indique que le <strong><span style="color: rgb(8, 65, 92)">minimum </span></strong>est 1 et que le <strong><span style="color: rgb(8, 65, 92)">maximum </span></strong>est la variable $totalPages.</p><p>Maintenant si on met 8987 dans l'URL alors que la page <strong><span style="color: rgb(8, 65, 92)">maximale </span></strong>est 50, on verra les <strong><span style="color: rgb(8, 65, 92)">données </span></strong>de la page 50.</p><p></p><p>Plus d'infos sur ces fonctions :</p><ul> <li data-xf-list-type="ul"><a href="https://www.php.net/manual/fr/function.max.php" target="_blank">https://www.php.net/manual/fr/function.max.php</a></li> <li data-xf-list-type="ul"><a href="https://www.php.net/manual/fr/function.max.php" target="_blank">https://www.php.net/manual/fr/function.max.php</a></li> </ul><p>Ensuite, nous allons <strong><span style="color: rgb(8, 65, 92)">couper </span></strong>notre tableau, pour récupérer <strong><span style="color: rgb(8, 65, 92)">uniquement </span></strong>les valeurs de la <strong><span style="color: rgb(8, 65, 92)">page </span></strong>qu'on visionne.</p><p></p><p>[CODE=php]$offset = ($page - 1) * $limit;</p><p>$offset = ($offset < 0) ? 0 : $offset;</p><p>$items = array_slice($items, $offset, $limit);[/CODE]</p><p></p><p>La variable <strong><span style="color: rgb(8, 65, 92)">$offset</span></strong> contient un entier qui indique à quel endroit <strong><span style="color: rgb(8, 65, 92)">commencer à lire le tableau</span></strong>.</p><p>Exemple : Sur la page <strong><span style="color: rgb(8, 65, 92)">10</span></strong>, on affiche les éléments<strong><span style="color: rgb(8, 65, 92)"> 180 à 200</span></strong> car la limite par page est <strong><span style="color: rgb(8, 65, 92)">20</span></strong>, il faut donc couper le tableau de <strong><span style="color: rgb(8, 65, 92)">0 à 180</span></strong>, pour garder que les <strong><span style="color: rgb(8, 65, 92)">20 éléments suivants</span></strong>.</p><p></p><p>Grâce à la fonction <strong><span style="color: rgb(8, 65, 92)">array_slice</span></strong>, on coupe notre tableau <strong><span style="color: rgb(8, 65, 92)">sans difficulté</span></strong>.</p><p><a href="https://www.php.net/manual/fr/function.array-slice.php" target="_blank">https://www.php.net/manual/fr/function.array-slice.php</a></p><p></p><p>Et voilà, nous avons notre tableau de 200 entrées qui est désormais <strong><span style="color: rgb(8, 65, 92)">coupé </span></strong>en 20.</p><p>Avant de passer à <strong><span style="color: rgb(8, 65, 92)">l'affichage</span></strong>, on va voir comment faire une <strong><span style="color: rgb(8, 65, 92)">pagination depuis la base de données</span></strong>.</p><p></p><p style="text-align: center"><strong><span style="color: rgb(213, 160, 33)"><span style="font-size: 18px"><img src="/data/assets/smilies/smileyinduste.png" class="smilie" loading="lazy" alt=":induste:" title="Induste :induste:" data-shortname=":induste:" /> Faire une pagination - Depuis la base de données <img src="/data/assets/smilies/smileyinduste.png" class="smilie" loading="lazy" alt=":induste:" title="Induste :induste:" data-shortname=":induste:" /></span></span></strong></p><p></p><p>Pour cette seconde partie du tutoriel, il vous faudra avoir <strong><span style="color: rgb(8, 65, 92)">rempli </span></strong>votre base de données.</p><p>On va repartir sur un fichier vierge que je nommerai <strong><span style="color: rgb(8, 65, 92)">index_db.php</span></strong>.</p><p></p><p>On va ensuite <strong><span style="color: rgb(8, 65, 92)">lier </span></strong>la base de données.</p><p></p><p>[CODE=php]$pdo = new PDO('mysql:host=db_host;dbname=db_name', 'db_user', 'db_pass');</p><p>[/CODE]</p><p></p><p>Vous constaterez qu'il y a <strong><span style="color: rgb(8, 65, 92)">peu de différences</span></strong> entre la première partie du tutoriel, et la seconde.</p><p>On définit la <strong><span style="color: rgb(8, 65, 92)">page </span></strong>qu'on visionne, la <strong><span style="color: rgb(8, 65, 92)">limite </span></strong>de lignes à afficher par page.</p><p></p><p>[CODE=php]$page = (!empty($_GET['page']) && $_GET['page'] > 0) ? intval($_GET['page']) : 1;</p><p>$limit = 20;[/CODE]</p><p></p><p>Ensuite il faut qu'on récupère le <strong><span style="color: rgb(8, 65, 92)">total d'entrée</span></strong> dans la base de données, pour déterminer le <strong><span style="color: rgb(8, 65, 92)">nombre de pages</span></strong> qu'on aura au <strong><span style="color: rgb(8, 65, 92)">total</span></strong>.</p><p></p><p>[CODE=php]$totalItems = $pdo->query('SELECT count(id) AS total FROM items')->fetch(PDO::FETCH_ASSOC)['total'];</p><p>$totalPages = ceil($totalItems / $limit);[/CODE]</p><p></p><p>Comme sur la première partie, on "<strong><span style="color: rgb(8, 65, 92)">sécurise</span></strong>" notre variable <strong><span style="color: rgb(8, 65, 92)">$page</span></strong>, et on récupère <strong><span style="color: rgb(8, 65, 92)">l'offset</span></strong>.</p><p>[CODE=php]$page = max($page, 1);</p><p>$page = min($page, $totalPages);</p><p></p><p>$offset = ($page - 1) * $limit;</p><p>$offset = ($offset < 0) ? 0 : $offset;[/CODE]</p><p></p><p>Pour <strong><span style="color: rgb(8, 65, 92)">conclure</span></strong>, il faut récupérer tous nos items qui sont dans la <strong><span style="color: rgb(8, 65, 92)">base de données</span></strong>, en précisant où <strong><span style="color: rgb(8, 65, 92)">commencer </span></strong>et la <strong><span style="color: rgb(8, 65, 92)">limite</span></strong>.</p><p>[CODE=php]$items = $pdo->query('SELECT * FROM items ORDER BY id ASC LIMIT '. $offset . ',' . $limit);</p><p>[/CODE]</p><p></p><p>C'est tout pour cette <strong><span style="color: rgb(8, 65, 92)">seconde partie</span></strong> du tutoriel.</p><p></p><p style="text-align: center"><strong><span style="font-size: 18px"><span style="color: rgb(213, 160, 33)"><img src="/data/assets/smilies/smileyinduste.png" class="smilie" loading="lazy" alt=":induste:" title="Induste :induste:" data-shortname=":induste:" /> Affichage des données <img src="/data/assets/smilies/smileyinduste.png" class="smilie" loading="lazy" alt=":induste:" title="Induste :induste:" data-shortname=":induste:" /></span></span></strong></p><p></p><p>Comme je vous l'ai précisé plus haut, le code que je vous donne ci-dessous fonctionne pour les <strong><span style="color: rgb(8, 65, 92)">deux parties</span></strong>, il vous faudra juste faire attention <strong><span style="color: rgb(8, 65, 92)">au nom des variables</span></strong>.</p><p></p><p>[CODE=html]<!DOCTYPE html></p><p><html></p><p><head></p><p> <meta charset="UTF-8"></p><p> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"></p><p> <title>Paginate</title></p><p> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"></p><p></head></p><p><body></p><p><div class="container"></p><p> <table class="table table-hover table-bordered"></p><p> <tr></p><p> <th>ID</th></p><p> <th>UserId</th></p><p> <th>Title</th></p><p> </tr></p><p> <?php foreach ($items as $item): ?></p><p> <tr></p><p> <td><?= $item['id']; ?></td></p><p> <td><?= $item['user_id']; ?></td></p><p> <td><?= $item['title']; ?></td></p><p> </tr></p><p> <?php endforeach; ?></p><p> </table></p><p></p><p> <nav aria-label="Array pagination"></p><p> <ul class="pagination"></p><p> <?php if($page != 1){ ?></p><p> <li class="page-item"></p><p> <a class="page-link" href="index.php?page=<?= $page - 1; ?>" aria-label="Previous"></p><p> <span aria-hidden="true">&laquo;</span></p><p> <span class="sr-only">Previous</span></p><p> </a></p><p> </li></p><p> <?php } ?></p><p> <?php for($i = 1;$i <= $totalPages;$i++) {?></p><p> <li class="page-item <?= ($i == $page) ? 'active' : ''; ?>"><a class="page-link" href="index.php?page=<?= $i; ?>"><?= $i; ?></a></li></p><p> <?php } ?></p><p> <?php if($page < $totalPages){ ?></p><p> <li class="page-item"></p><p> <a class="page-link"href="index.php?page=<?= $page + 1; ?>" aria-label="Next"></p><p> <span aria-hidden="true">&raquo;</span></p><p> <span class="sr-only">Next</span></p><p> </a></p><p> </li></p><p> <?php } ?></p><p> </ul></p><p> </nav></p><p></div></p><p></body></p><p></html></p><p>[/CODE]</p><p></p><p>Vous constaterez que j'ai intégré <strong><span style="color: rgb(8, 65, 92)">bootstrap</span></strong>, ce n'est qu'une question de design, vous pouvez faire sans ou intégrer un autre <strong><span style="color: rgb(8, 65, 92)">framework CSS</span></strong>.</p><p></p><p>C'est tout pour cette troisième partie concernant <strong><span style="color: rgb(8, 65, 92)">l'affichage</span></strong>, je ne m'attarde pas sur ce sujet car j'estime qu'il est relativement simple de <strong><span style="color: rgb(8, 65, 92)">manipuler </span></strong>ce code pour l'adapter à vos <strong><span style="color: rgb(8, 65, 92)">besoins</span></strong>.</p><p></p><p>Si vous avez des suggestions <strong><span style="color: rgb(8, 65, 92)">d'améliorations</span></strong>, ou des idées d'autres tutoriels à faire, n'hésitez pas à me <strong><span style="color: rgb(8, 65, 92)">demander </span></strong>!</p><p></p><p style="text-align: center"><strong><span style="color: rgb(213, 160, 33)"><span style="font-size: 22px"><img src="/data/assets/smilies/smileyinduste.png" class="smilie" loading="lazy" alt=":induste:" title="Induste :induste:" data-shortname=":induste:" /> WhiiTe' <img src="/data/assets/smilies/smileyinduste.png" class="smilie" loading="lazy" alt=":induste:" title="Induste :induste:" data-shortname=":induste:" /></span></span></strong></p></blockquote><p></p>
[QUOTE="WhiiTe', post: 7397147, member: 8987"] [CENTER][B][COLOR=rgb(213, 160, 33)][SIZE=7]:induste: Faire une pagination :induste:[/SIZE][/COLOR][/B][/CENTER] Bonjour [B][COLOR=rgb(8, 65, 92)]Induste[/COLOR][/B], Dans ce tutoriel on va voir comment faire une [B][COLOR=rgb(8, 65, 92)]pagination[/COLOR][/B], je vais vous montrer deux façons, l'une avec un [B][COLOR=rgb(8, 65, 92)]tableau[/COLOR][/B], et l'autre via une [B][COLOR=rgb(8, 65, 92)]base de données[/COLOR][/B]. Vous devrez en fonction de la partie que vous suivrez avoir le fichier [B][COLOR=rgb(8, 65, 92)]Json [/COLOR][/B]ou importer le fichier [B][COLOR=rgb(8, 65, 92)]SQL [/COLOR][/B]qui se trouvent dans le fichier[B][COLOR=rgb(8, 65, 92)] zippé[/COLOR][/B]. [B][COLOR=rgb(8, 65, 92)]Sommaire [/COLOR][/B]: [LIST=1] [*]Faire une pagination - Avec un tableau [*]Faire une pagination - Depuis la base de données [*]Affichage des données [/LIST] Pour la troisième partie, le code est [B][COLOR=rgb(8, 65, 92)]adapté [/COLOR][/B]aux deux parties précédentes, donc peu importe ce que vous choisirez, ça [B][COLOR=rgb(8, 65, 92)]fonctionnera[/COLOR][/B]. Vous trouverez aussi dans le dossier du projet [B][COLOR=rgb(8, 65, 92)]zippé [/COLOR][/B]les fichiers de code attaché au sujet. [COLOR=rgb(255, 255, 255)]pour les feignasses quoi[/COLOR] [CENTER][B][COLOR=rgb(213, 160, 33)][SIZE=5]:induste: Faire une pagination - Avec un tableau :induste:[/SIZE][/COLOR][/B][/CENTER] Placez le fichier [B][COLOR=rgb(8, 65, 92)]Json [/COLOR][/B]où vous le souhaitez dans votre projet. On va commencer par créer un nouveau fichier [B][COLOR=rgb(8, 65, 92)]PHP[/COLOR][/B], index.php pour ma part. Ensuite, on va récupérer le [B][COLOR=rgb(8, 65, 92)]contenu [/COLOR][/B]du fichier Json et le [B][COLOR=rgb(8, 65, 92)]décoder[/COLOR][/B]. [CODE=php]<?php $items = file_get_contents('items.json'); $items = json_decode($items, true);[/CODE] Dans la variable [B][COLOR=rgb(8, 65, 92)]$items[/COLOR][/B] se trouve donc un tableau à [B][COLOR=rgb(8, 65, 92)]200 entrées[/COLOR][/B]. On va ensuite définir la [B][COLOR=rgb(8, 65, 92)]page [/COLOR][/B]sur laquelle on se trouve, par [B][COLOR=rgb(8, 65, 92)]défaut [/COLOR][/B]on sera sur la [B][COLOR=rgb(8, 65, 92)]première [/COLOR][/B]page. [CODE=php]$page = (!empty($_GET['page']) && $_GET['page'] > 0) ? intval($_GET['page']) : 1;[/CODE] Ensuite on va définir le [B][COLOR=rgb(8, 65, 92)]nombre de lignes[/COLOR][/B] à afficher par page, et récupérer le [B][COLOR=rgb(8, 65, 92)]total [/COLOR][/B]de page qu'on aura. [CODE=php]$limit = 20; $totalPages = ceil(count($items) / $limit);[/CODE] La variable [B][COLOR=rgb(8, 65, 92)]$totalPages[/COLOR][/B] contiendra le nombre de pages qu'on aura en tout, dans notre cas pour [B][COLOR=rgb(8, 65, 92)]200 entrées[/COLOR][/B] dont [B][COLOR=rgb(8, 65, 92)]20 par page[/COLOR][/B], on aura [B][COLOR=rgb(8, 65, 92)]10 pages au total[/COLOR][/B]. Ensuite on va en quelque sorte "[B][COLOR=rgb(8, 65, 92)]sécuriser[/COLOR][/B]" notre pagination pour pas que quelqu'un change [B][COLOR=rgb(8, 65, 92)]l'URL[/COLOR][/B], mette la page 20 alors que le [B][COLOR=rgb(8, 65, 92)]maximum [/COLOR][/B]est 10. [CODE=php]$page = max($page, 1); $page = min($page, $totalPages);[/CODE] Sachant que la variable [B][COLOR=rgb(8, 65, 92)]$page[/COLOR][/B] contient la page actuelle, on lui indique que le [B][COLOR=rgb(8, 65, 92)]minimum [/COLOR][/B]est 1 et que le [B][COLOR=rgb(8, 65, 92)]maximum [/COLOR][/B]est la variable $totalPages. Maintenant si on met 8987 dans l'URL alors que la page [B][COLOR=rgb(8, 65, 92)]maximale [/COLOR][/B]est 50, on verra les [B][COLOR=rgb(8, 65, 92)]données [/COLOR][/B]de la page 50. Plus d'infos sur ces fonctions : [LIST] [*][URL]https://www.php.net/manual/fr/function.max.php[/URL] [*][URL]https://www.php.net/manual/fr/function.max.php[/URL] [/LIST] Ensuite, nous allons [B][COLOR=rgb(8, 65, 92)]couper [/COLOR][/B]notre tableau, pour récupérer [B][COLOR=rgb(8, 65, 92)]uniquement [/COLOR][/B]les valeurs de la [B][COLOR=rgb(8, 65, 92)]page [/COLOR][/B]qu'on visionne. [CODE=php]$offset = ($page - 1) * $limit; $offset = ($offset < 0) ? 0 : $offset; $items = array_slice($items, $offset, $limit);[/CODE] La variable [B][COLOR=rgb(8, 65, 92)]$offset[/COLOR][/B] contient un entier qui indique à quel endroit [B][COLOR=rgb(8, 65, 92)]commencer à lire le tableau[/COLOR][/B]. Exemple : Sur la page [B][COLOR=rgb(8, 65, 92)]10[/COLOR][/B], on affiche les éléments[B][COLOR=rgb(8, 65, 92)] 180 à 200[/COLOR][/B] car la limite par page est [B][COLOR=rgb(8, 65, 92)]20[/COLOR][/B], il faut donc couper le tableau de [B][COLOR=rgb(8, 65, 92)]0 à 180[/COLOR][/B], pour garder que les [B][COLOR=rgb(8, 65, 92)]20 éléments suivants[/COLOR][/B]. Grâce à la fonction [B][COLOR=rgb(8, 65, 92)]array_slice[/COLOR][/B], on coupe notre tableau [B][COLOR=rgb(8, 65, 92)]sans difficulté[/COLOR][/B]. [URL]https://www.php.net/manual/fr/function.array-slice.php[/URL] Et voilà, nous avons notre tableau de 200 entrées qui est désormais [B][COLOR=rgb(8, 65, 92)]coupé [/COLOR][/B]en 20. Avant de passer à [B][COLOR=rgb(8, 65, 92)]l'affichage[/COLOR][/B], on va voir comment faire une [B][COLOR=rgb(8, 65, 92)]pagination depuis la base de données[/COLOR][/B]. [CENTER][B][COLOR=rgb(213, 160, 33)][SIZE=5]:induste: Faire une pagination - Depuis la base de données :induste:[/SIZE][/COLOR][/B][/CENTER] Pour cette seconde partie du tutoriel, il vous faudra avoir [B][COLOR=rgb(8, 65, 92)]rempli [/COLOR][/B]votre base de données. On va repartir sur un fichier vierge que je nommerai [B][COLOR=rgb(8, 65, 92)]index_db.php[/COLOR][/B]. On va ensuite [B][COLOR=rgb(8, 65, 92)]lier [/COLOR][/B]la base de données. [CODE=php]$pdo = new PDO('mysql:host=db_host;dbname=db_name', 'db_user', 'db_pass'); [/CODE] Vous constaterez qu'il y a [B][COLOR=rgb(8, 65, 92)]peu de différences[/COLOR][/B] entre la première partie du tutoriel, et la seconde. On définit la [B][COLOR=rgb(8, 65, 92)]page [/COLOR][/B]qu'on visionne, la [B][COLOR=rgb(8, 65, 92)]limite [/COLOR][/B]de lignes à afficher par page. [CODE=php]$page = (!empty($_GET['page']) && $_GET['page'] > 0) ? intval($_GET['page']) : 1; $limit = 20;[/CODE] Ensuite il faut qu'on récupère le [B][COLOR=rgb(8, 65, 92)]total d'entrée[/COLOR][/B] dans la base de données, pour déterminer le [B][COLOR=rgb(8, 65, 92)]nombre de pages[/COLOR][/B] qu'on aura au [B][COLOR=rgb(8, 65, 92)]total[/COLOR][/B]. [CODE=php]$totalItems = $pdo->query('SELECT count(id) AS total FROM items')->fetch(PDO::FETCH_ASSOC)['total']; $totalPages = ceil($totalItems / $limit);[/CODE] Comme sur la première partie, on "[B][COLOR=rgb(8, 65, 92)]sécurise[/COLOR][/B]" notre variable [B][COLOR=rgb(8, 65, 92)]$page[/COLOR][/B], et on récupère [B][COLOR=rgb(8, 65, 92)]l'offset[/COLOR][/B]. [CODE=php]$page = max($page, 1); $page = min($page, $totalPages); $offset = ($page - 1) * $limit; $offset = ($offset < 0) ? 0 : $offset;[/CODE] Pour [B][COLOR=rgb(8, 65, 92)]conclure[/COLOR][/B], il faut récupérer tous nos items qui sont dans la [B][COLOR=rgb(8, 65, 92)]base de données[/COLOR][/B], en précisant où [B][COLOR=rgb(8, 65, 92)]commencer [/COLOR][/B]et la [B][COLOR=rgb(8, 65, 92)]limite[/COLOR][/B]. [CODE=php]$items = $pdo->query('SELECT * FROM items ORDER BY id ASC LIMIT '. $offset . ',' . $limit); [/CODE] C'est tout pour cette [B][COLOR=rgb(8, 65, 92)]seconde partie[/COLOR][/B] du tutoriel. [CENTER][B][SIZE=5][COLOR=rgb(213, 160, 33)]:induste: Affichage des données :induste:[/COLOR][/SIZE][/B][/CENTER] Comme je vous l'ai précisé plus haut, le code que je vous donne ci-dessous fonctionne pour les [B][COLOR=rgb(8, 65, 92)]deux parties[/COLOR][/B], il vous faudra juste faire attention [B][COLOR=rgb(8, 65, 92)]au nom des variables[/COLOR][/B]. [CODE=html]<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <title>Paginate</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"> </head> <body> <div class="container"> <table class="table table-hover table-bordered"> <tr> <th>ID</th> <th>UserId</th> <th>Title</th> </tr> <?php foreach ($items as $item): ?> <tr> <td><?= $item['id']; ?></td> <td><?= $item['user_id']; ?></td> <td><?= $item['title']; ?></td> </tr> <?php endforeach; ?> </table> <nav aria-label="Array pagination"> <ul class="pagination"> <?php if($page != 1){ ?> <li class="page-item"> <a class="page-link" href="index.php?page=<?= $page - 1; ?>" aria-label="Previous"> <span aria-hidden="true">«</span> <span class="sr-only">Previous</span> </a> </li> <?php } ?> <?php for($i = 1;$i <= $totalPages;$i++) {?> <li class="page-item <?= ($i == $page) ? 'active' : ''; ?>"><a class="page-link" href="index.php?page=<?= $i; ?>"><?= $i; ?></a></li> <?php } ?> <?php if($page < $totalPages){ ?> <li class="page-item"> <a class="page-link"href="index.php?page=<?= $page + 1; ?>" aria-label="Next"> <span aria-hidden="true">»</span> <span class="sr-only">Next</span> </a> </li> <?php } ?> </ul> </nav> </div> </body> </html> [/CODE] Vous constaterez que j'ai intégré [B][COLOR=rgb(8, 65, 92)]bootstrap[/COLOR][/B], ce n'est qu'une question de design, vous pouvez faire sans ou intégrer un autre [B][COLOR=rgb(8, 65, 92)]framework CSS[/COLOR][/B]. C'est tout pour cette troisième partie concernant [B][COLOR=rgb(8, 65, 92)]l'affichage[/COLOR][/B], je ne m'attarde pas sur ce sujet car j'estime qu'il est relativement simple de [B][COLOR=rgb(8, 65, 92)]manipuler [/COLOR][/B]ce code pour l'adapter à vos [B][COLOR=rgb(8, 65, 92)]besoins[/COLOR][/B]. Si vous avez des suggestions [B][COLOR=rgb(8, 65, 92)]d'améliorations[/COLOR][/B], ou des idées d'autres tutoriels à faire, n'hésitez pas à me [B][COLOR=rgb(8, 65, 92)]demander [/COLOR][/B]! [CENTER][B][COLOR=rgb(213, 160, 33)][SIZE=6]:induste: WhiiTe' :induste:[/SIZE][/COLOR][/B][/CENTER] [/QUOTE]
Insérer les citations…
Vérification
Publier la réponse
Forums
Forums généraux
Informatique
Développement
Tutoriel - Faire une pagination
Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
Acceptez
En savoir plus.…
Haut