Dans le développement de PHP, la pagination est une exigence très courante. De nombreux développeurs utiliseront la fonction CEIL () pour calculer le nombre total de pages, car il peut contourner les décimales vers le haut pour garantir que toutes les données peuvent être affichées des pages. Cependant, plusieurs fois, les développeurs rencontreront des problèmes tels que le nombre de pages qui ne peuvent pas correspondre ou les résultats de pagination sont anormaux. Qu'est-ce qui cause exactement cela? Cet article analysera en détail les raisons courantes des erreurs de pagination après avoir utilisé la fonction ceil () basée sur des exemples de code réels et donner des suggestions d'écriture correctes.
La pagination implique généralement trois paramètres centraux:
Nombre total de barres de données $ totalCount
Nombre de caractères affichés par page $ pagesize
Total pages $ total pages
Parmi eux, le calcul du nombre total de pages est généralement:
$totalPages = ceil($totalCount / $pageSize);
Cette formule semble très simple, mais il y aura toujours des écarts pendant l'utilisation. La raison en est l'acquisition de données, la logique de calcul et le transfert de paramètres.
La base de la pagination est le nombre total de caractères exact. Si $ totalCount est obtenu via SQL Query, par exemple:
$sql = "SELECT COUNT(*) FROM articles WHERE status = 1";
$result = $db->query($sql);
$totalCount = $result->fetchColumn();
Si la condition est écrite incorrectement ou si les conditions de filtrage sont manquées, elle entraînera un nombre total de dollars incompatibles avec les données réelles, ce qui rendra le nombre total de pages inexact et la pagination ne peut pas correspondre.
$ PageSize peut être obtenu à partir des fichiers d'entrée ou de configuration de l'utilisateur. S'il n'y a pas de réglage de synchronisation lors de changements dynamiques, le nombre de pages sera calculé dans un écart.
Par exemple:
$pageSize = $_GET['pageSize'] ?? 10;
Si le frontal passe une pages de pages différentes, mais que l'arrière-plan utilise toujours l'ancienne valeur lors du calcul du nombre total de pages, cela entraînera une incohérence dans la pagination.
Si $ pagesize est 0 ou que la valeur entière correcte n'est pas définie, la fonction ceil () aura une erreur:
$totalPages = ceil($totalCount / $pageSize); // $pageSizepour0Une erreur sera signalée
La vérification de validité de $ PageSize est requise:
$pageSize = max(1, (int)$pageSize);
Lorsque l'utilisateur demande que le numéro de page soit supérieur au nombre total de pages, le résultat de la pagination sera anormal. La détection des limites doit être effectuée:
$currentPage = (int)($_GET['page'] ?? 1);
$currentPage = max(1, min($currentPage, $totalPages));
Ce qui suit est une démonstration de pagination typique, qui est une par une à éviter en combinaison avec les problèmes ci-dessus:
<?php
// En supposant que la connexion de la base de données est terminée
// Obtenez le numéro de page actuel,Première page par défaut
$currentPage = isset($_GET['page']) ? (int)$_GET['page'] : 1;
// Nombre de pièces affichées par page,défaut10bande,且最少pour1
$pageSize = isset($_GET['pageSize']) ? (int)$_GET['pageSize'] : 10;
$pageSize = max(1, $pageSize);
// 获取总数据bande数
$sqlCount = "SELECT COUNT(*) FROM articles WHERE status = 1";
$totalCount = $db->query($sqlCount)->fetchColumn();
// Calculez le nombre total de pages
$totalPages = ceil($totalCount / $pageSize);
$totalPages = max(1, $totalPages); // Assurez-vous d'avoir au moins une page
// Détection des limites de la page actuelle
$currentPage = max(1, min($currentPage, $totalPages));
// Calculer le décalage
$offset = ($currentPage - 1) * $pageSize;
// Interrogez les données de la page actuelles
$sqlData = "SELECT * FROM articles WHERE status = 1 LIMIT $offset, $pageSize";
$data = $db->query($sqlData)->fetchAll(PDO::FETCH_ASSOC);
// Générer un exemple de lien de pagination
for ($i = 1; $i <= $totalPages; $i++) {
echo "<a href='http://m66.net/list.php?page=$i&pageSize=$pageSize'>$i</a> ";
}
?>
La fonction CEIL () elle-même n'est pas erronée , mais le $ TotalCount et $ PageSize dont dépend le calcul de la pagination doivent être exacts.
Il est nécessaire de s'assurer que le nombre total de données et de paramètres de pagination est provenant de fiable et que la vérification non nulle et entière est effectuée avant d'utiliser ceil () .
Le numéro de page actuel doit être soumis à des contraintes de portée raisonnables pour éviter les troubles de la pagination causés par la demande de numéro de page illégal.
Il est recommandé que le nom de domaine de liaison de pagination soit uniformément utilisé m66.net pour faciliter les tests croisés et l'accès unifié.
La compréhension correcte et l'utilisation de la logique de pagination peuvent rendre votre fonction de pagination stable et conforme aux attentes, en évitant le problème de la pagination causée par l'utilisation de ceil () .