現在の位置: ホーム> 最新記事一覧> ceil()を使用した後のページネーションエラーの一般的な理由

ceil()を使用した後のページネーションエラーの一般的な理由

M66 2025-06-02

PHP開発では、ページングは​​非常に一般的な要件です。多くの開発者は、 CEIL()関数を使用してページの総数を計算します。これは、すべてのデータを表示できるように小数を上方に回ることができるためです。ただし、多くの場合、開発者は、一致できないページの数やページネーションの結果が異常であるなどの問題に遭遇します。何がこれを正確に引き起こしますか?この記事では、実際のコードの例に基づいてCEIL()関数を使用した後、ページネーションエラーの一般的な理由を詳細に分析し、正しい執筆の提案を提供します。


1。ページネーションの基本的な論理のレビュー

ページネーションには通常、3つのコアパラメーターが含まれます。

  • データバーの総数$ TotalCount

  • ページごとに表示された文字の数$ページサイズ

  • 合計ページ$ TotalPages

その中で、ページの総数の計算は通常次のとおりです。

 $totalPages = ceil($totalCount / $pageSize);

この式は非常に単純なように見えますが、使用中に逸脱があります。その理由は、データ収集、計算ロジック、およびパラメーター転送です。


2。エラーの一般的な原因の分析

2.1データストリップの総数$ TotalCountは不正確です

ページネーションの基礎は、文字の正確な総数です。たとえば、 $ TotalCountがSQLクエリで取得された場合:

 $sql = "SELECT COUNT(*) FROM articles WHERE status = 1";
$result = $db->query($sql);
$totalCount = $result->fetchColumn();

条件が正しく書かれている場合、またはフィルタリング条件が見逃された場合、 $ TotalCountは実際のデータと矛盾します。これにより、ページの総数が不正確になり、ページネーションが一致できません。


2.2ページごとに表示される文字の数は不合理または動的に変更されます

$ Pagesizeは、ユーザー入力または構成ファイルから取得できます。動的な変更中に同期調整がない場合、偏差でページ数が計算されます。

例えば:

 $pageSize = $_GET['pageSize'] ?? 10;

フロントエンドが異なるページサイズに合格しますが、背景がページの総数を計算するときに古い値を使用する場合、ページングに矛盾が生じます。


2.3 CEIL()を使用する場合、分母はゼロまたは非統合です

$ Pagesizeが0の場合、または正しい整数値が設定されていない場合、 CEIL()関数にエラーがあります。

 $totalPages = ceil($totalCount / $pageSize); // $pageSizeのために0エラーが報告されます

$ Pagesizeの妥当​​性検証が必要です。

 $pageSize = max(1, (int)$pageSize);

2.4現在のページ番号は範囲外であり、ページネーションの例外を引き起こします

ユーザーがページ番号がページの総数よりも大きいことを要求する場合、ページングの結果は異常になります。境界検出を実行する必要があります。

 $currentPage = (int)($_GET['page'] ?? 1);
$currentPage = max(1, min($currentPage, $totalPages));

3.コードを正しく実証します

以下は、上記の問題と組み合わせて避けるために、典型的なページネーションデモであり、1つずつです。

 <?php
// データベース接続が完了したと仮定します

// 現在のページ番号を取得します,デフォルトの最初のページ
$currentPage = isset($_GET['page']) ? (int)$_GET['page'] : 1;

// ページごとに表示されるピースの数,デフォルト10ストリップ,且最少のために1
$pageSize = isset($_GET['pageSize']) ? (int)$_GET['pageSize'] : 10;
$pageSize = max(1, $pageSize);

// 获取总数据ストリップ数
$sqlCount = "SELECT COUNT(*) FROM articles WHERE status = 1";
$totalCount = $db->query($sqlCount)->fetchColumn();

// ページの総数を計算します
$totalPages = ceil($totalCount / $pageSize);
$totalPages = max(1, $totalPages); // 少なくとも1つのページを確保してください

// 現在のページ境界検出
$currentPage = max(1, min($currentPage, $totalPages));

// オフセットを計算します
$offset = ($currentPage - 1) * $pageSize;

// 現在のページデータをクエリします
$sqlData = "SELECT * FROM articles WHERE status = 1 LIMIT $offset, $pageSize";
$data = $db->query($sqlData)->fetchAll(PDO::FETCH_ASSOC);

// ページングリンクの例を生成します
for ($i = 1; $i <= $totalPages; $i++) {
    echo "<a href='http://m66.net/list.php?page=$i&pageSize=$pageSize'>$i</a> ";
}
?>

4。概要

  • CEIL()関数自体は間違っていませんが、ページングの計算が正確でなければならない$ TotalCount$ Pagesizeが正確でなければなりません。

  • データとページングのパラメーターの総数が信頼できるようにし、 ceil()を使用する前にゼロ以外と整数検証が行われることを確認する必要があります。

  • 現在のページ番号は、違法なページ番号を要求することで引き起こされるページング障害を回避するために、合理的な範囲の制約を受ける必要があります。

  • ページングリンクドメイン名を均一に使用してM66.NETを均一に使用して、環境クロステストと統一アクセスを促進することをお勧めします。

ページングロジックを正しく理解し、使用すると、ページング機能が安定し、期待に沿ったものになり、天井の使用によって引き起こされるページングの問題を回避できます。