Trước hết, không có tập lệnh máy chủ riêng cho mỗi trang, đó chỉ là sự điên rồ. Hầu hết các ứng dụng thực hiện phân trang thông qua việc sử dụng tham số phân trang trong URL. Một cái gì đó như:
http://yoursite.com/itempage.php?page=2
Bạn có thể truy cập số trang được yêu cầu qua $_GET['page']
.
Điều này làm cho công thức SQL của bạn thực sự dễ dàng:
// determine page number from $_GET
$page = 1;
if(!empty($_GET['page'])) {
$page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT);
if(false === $page) {
$page = 1;
}
}
// set the number of items to display per page
$items_per_page = 4;
// build query
$offset = ($page - 1) * $items_per_page;
$sql = "SELECT * FROM menuitem LIMIT " . $offset . "," . $items_per_page;
Vì vậy, ví dụ:nếu đầu vào ở đây là page=2
, với 4 hàng trên mỗi trang, truy vấn của bạn sẽ là "
SELECT * FROM menuitem LIMIT 4,4
Vì vậy, đó là vấn đề cơ bản của phân trang. Bây giờ, bạn có thêm yêu cầu là bạn muốn hiểu tổng số trang (để bạn có thể xác định xem "TRANG TIẾP THEO" có nên được hiển thị hay bạn muốn cho phép truy cập trực tiếp vào trang X thông qua một liên kết).
Để làm được điều này, bạn phải hiểu số lượng hàng trong bảng.
Bạn có thể chỉ cần thực hiện điều này với lệnh gọi DB trước khi cố gắng trả lại tập hợp bản ghi giới hạn thực tế của mình (tôi nói TRƯỚC vì rõ ràng bạn muốn xác thực rằng trang được yêu cầu tồn tại).
Điều này thực sự khá đơn giản:
$sql = "SELECT your_primary_key_field FROM menuitem";
$result = mysqli_query($con, $sql);
$row_count = mysqli_num_rows($result);
// free the result set as you don't need it anymore
mysqli_free_result($result);
$page_count = 0;
if (0 === $row_count) {
// maybe show some error since there is nothing in your table
} else {
// determine page_count
$page_count = (int)ceil($row_count / $items_per_page);
// double check that request page is in range
if($page > $page_count) {
// error to user, maybe set page to 1
$page = 1;
}
}
// make your LIMIT query here as shown above
// later when outputting page, you can simply work with $page and $page_count to output links
// for example
for ($i = 1; $i <= $page_count; $i++) {
if ($i === $page) { // this is current page
echo 'Page ' . $i . '<br>';
} else { // show link to other page
echo '<a href="/menuitem.php?page=' . $i . '">Page ' . $i . '</a><br>';
}
}