Насколько знаю в интернете можно найти неимоверное количество реализаций пагинации на PHP и MySQL, но по причине неумения или нежелания пользоваться поисковыми системами, данные вопросы снова появляются на форуме, поэтому набросал рабочий пример.
function pagination($page, $num_page) {
if($page > 3){
$initial = ' <a href="/index.php?page=1">Первая</a> ';
} else {
$initial = '';
}
if($page < ($num_page - 2)) {
$final = ' <a href="/index.php?page='.$num_page.'">Последняя</a> ';
} else {
$final = '';
}
if($page > 1) {
$previous = ' <a href="/index.php?page='.($page - 1).'">'.($page - 1).'</a> ';
} else {
$previous = '';
}
if($page < $num_page) {
$next = ' <a href="/index.php?page='.($page + 1).'">'.($page + 1).'</a> ';
} else {
$next = '';
}
if($page - 2 > 0) {
$previous_two = ' <a href="/index.php?page='.($page - 2).'">'.($page - 2).'</a> ';
} else {
$previous_two = '';
}
if($page + 2 <= $num_page) {
$next_two = ' <a href="/index.php?page='.($page + 2).'"> '.($page + 2).' </a> ';
} else {
$next_two = '';
}
$result = $initial.$previous_two.$previous.$page.$next.$next_two.$final;
return $result;
}
if(!isset($_GET['page'])){
$page = 1;
} else{
$page = (int) $_GET['page'];
if($page < 1) $page = 1;
}
$query = mysqli_num_rows(mysqli_query($connection, "SELECT `id` FROM `table`"));
if($query) {
$num = (int) 19;
$num_page = ceil($query / $num);
if ($page > $num_page) $page = $num_page;
$startDB = ($page - 1)*$num;
$query_page = mysqli_query($connection, "SELECT * FROM `table` LIMIT $startDB, $num");
if(2 <= $num_page) {
echo pagination($page, $num_page);
}
}