Po pierwsze, nie miej osobnego skryptu serwera dla każdej strony, to po prostu szaleństwo. Większość aplikacji implementuje paginację za pomocą parametru paginacji w adresie URL. Coś takiego:
http://yoursite.com/itempage.php?page=2
Możesz uzyskać dostęp do żądanego numeru strony poprzez $_GET['page']
.
To sprawia, że formułowanie SQL jest naprawdę proste:
// 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;
Na przykład, jeśli dane wejściowe to page=2
, przy 4 wierszach na stronę, Twoje zapytanie będzie wyglądało tak:„
SELECT * FROM menuitem LIMIT 4,4
To jest podstawowy problem paginacji. Teraz masz dodatkowy wymóg, że chcesz poznać całkowitą liczbę stron (abyś mógł określić, czy ma być wyświetlana „NASTĘPNA STRONA”, czy chcesz zezwolić na bezpośredni dostęp do strony X za pomocą linku).
Aby to zrobić, musisz zrozumieć liczbę wierszy w tabeli.
Możesz po prostu zrobić to za pomocą wywołania DB, zanim spróbujesz zwrócić swój rzeczywisty ograniczony zestaw rekordów (mówię PRZED, ponieważ oczywiście chcesz sprawdzić, czy żądana strona istnieje).
To całkiem proste:
$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>';
}
}