현재 위치: > 최신 기사 목록> Ceil ()를 사용한 후에 대한 페이지 매김 오류의 일반적인 이유

Ceil ()를 사용한 후에 대한 페이지 매김 오류의 일반적인 이유

M66 2025-06-02

PHP 개발에서 페이징은 매우 일반적인 요구 사항입니다. 많은 개발자가 Ceil () 함수를 사용하여 총 페이지 수를 계산합니다. 모든 데이터가 표시 될 수 있도록 소수점을 위로 올릴 수 있기 때문입니다. 그러나 여러 번 개발자는 일치 할 수없는 페이지 수와 같은 문제가 발생하거나 페이지 매김 결과가 비정상적입니다. 정확히 원인은 무엇입니까? 이 기사는 실제 코드 예제를 기반으로 CEIL () 함수를 사용한 후 Pagination 오류의 일반적인 이유를 자세히 분석하고 올바른 글쓰기 제안을 제공합니다.


1. Pagination의 기본 논리 검토

Pagination에는 일반적으로 세 가지 핵심 매개 변수가 포함됩니다.

  • 총 데이터 바의 총 수 $ TotalCount

  • 페이지 당 표시된 문자 수 . $ pageize

  • 총 페이지 $ 총 페이지

그 중 총 페이지 수의 계산은 일반적으로 다음과 같습니다.

 $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가 실제 데이터와 일치하지 않도록하여 총 페이지 수가 부정확하게 만들어지고 Pagination이 일치 할 수 없습니다.


2.2 페이지 당 표시된 문자 수는 불합리하거나 동적으로 변경되었습니다.

$ pageize는 사용자 입력 또는 구성 파일에서 얻을 수 있습니다. 동적 변경 중에 동기화 조정이없는 경우 페이지 수는 편차에서 계산됩니다.

예를 들어:

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

프론트 엔드가 다른 페이지 크기를 전달하지만 배경이 여전히 총 ​​페이지 수를 계산할 때 기존 값을 사용하는 경우 페이징에서 불일치가 발생합니다.


2.3 Ceil ()을 사용할 때 분모는 0 또는 비 통신입니다.

$ pagesize 가 0이거나 올바른 정수 값이 설정되지 않으면 Ceil () 함수에 오류가 발생합니다.

 $totalPages = ceil($totalCount / $pageSize); // $pageSize~을 위한0오류 가보고됩니다

$ pageize 의 타당성 검증이 필요합니다.

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

2.4 현재 페이지 번호는 한계를 벗어 났으며 페이지 매김 예외를 유발합니다.

사용자가 페이지 번호가 총 페이지 수보다 클 것을 요청하면 페이징 결과는 비정상적입니다. 경계 감지를 수행해야합니다.

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

3. 코드를 정확하게 보여줍니다

다음은 전형적인 페이지 매김 데모이며 위의 문제와 함께 피하기 위해 하나씩입니다.

 <?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); // 최소한 하나의 페이지가 있어야합니다

// 현재 페이지 경계 감지
$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 ()을 사용하기 전에 0이 아닌 정수 검증을 수행해야합니다.

  • 현재 페이지 번호는 불법 페이지 번호를 요청하여 발생하는 페이징 장애를 피하기 위해 합리적인 범위 제약 조건을 받아야합니다.

  • 페이징 링크 도메인 이름은 교차 환경 테스트 및 통합 액세스를 용이하게하기 위해 M66.net을 균일하게 사용하는 것이 좋습니다.

페이징 논리를 올바르게 이해하고 사용하면 페이징 기능이 안정적이고 기대에 부응 할 수있어 Ceil () 사용으로 인한 페이징 문제를 피할 수 있습니다.