Първо, не разполагайте с отделен сървърен скрипт за всяка страница, това е просто лудост. Повечето приложения прилагат пагинация чрез използване на параметър за пагинация в URL адреса. Нещо като:
http://yoursite.com/itempage.php?page=2
Можете да получите достъп до искания номер на страница чрез $_GET['page']
.
Това прави вашата SQL формулировка наистина лесна:
// 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;
Така например, ако въвеждането тук е page=2
, с 4 реда на страница, вашата заявка ще бъде"
SELECT * FROM menuitem LIMIT 4,4
Така че това е основният проблем на пагинацията. Сега имате допълнителното изискване, че искате да разберете общия брой страници (за да можете да определите дали „СЛЕДВАЩА СТРАНИЦА“ трябва да се показва или искате да разрешите директен достъп до страница X чрез връзка).
За да направите това, трябва да разберете броя на редовете в таблицата.
Можете просто да направите това с DB повикване, преди да се опитате да върнете действителния си ограничен набор от записи (казвам ПРЕДИ, тъй като очевидно искате да потвърдите, че исканата страница съществува).
Това всъщност е доста просто:
$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>';
}
}