Ваша реализация разбивки на страницы в целом выглядит правильно, однако давайте рассмотрим некоторые аспекты и добавим недостающие части кода, чтобы сделать его полным.
Кроме того, следует отметить, что использование `mysql_*` функций устарело и рекомендуется перейти на `mysqli` или `PDO` для работы с базами данных в новых проектах.
### Полная реализация разбивки на страницы
1. Подсчёт общего количества записей.
2. Получение текущей страницы и вычисление `LIMIT`.
3. Запрос данных для указанной страницы.
4. Вывод данных.
5. Формирование навигации по страницам.
Вот улучшенный пример:
```php
<?php
// Подключение к базе данных
// $connection = mysqli_connect("localhost", "username", "password", "database");
// Убедитесь, что вы подключаетесь к базе данных
$NotBd = mysqli_query($connection, "
SELECT COUNT(*)
FROM posts
WHERE
city_id='" . mysqli_real_escape_string($connection, $CityBdID['id']) . "' AND
category_id='" . mysqli_real_escape_string($connection, $BdCat['id']) . "'
");
$NotBd = mysqli_fetch_row($NotBd)[0];
if ($NotBd == 0) {
echo '<div class="ad2 card card-block">
В данном разделе пусто:( Будь первым опубликуй поскорее свой <a href="'. $site.'/AddPost">первый пост</a> &#9825</div>';
exit; // Выйти, если нет записей
}
// количество записей, выводимых на странице
$per_page = 1;
// получаем номер страницы
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$page = max(1, $page); // Убедимся, что номер страницы не меньше 1
// вычисляем первый оператор для LIMIT
$start = ($page - 1) * $per_page;
// Получаем записи для текущей страницы
$sql = mysqli_query($connection, "
SELECT *
FROM posts
WHERE
city_id='" . mysqli_real_escape_string($connection, $CityBdID['id']) . "' AND
category_id='" . mysqli_real_escape_string($connection, $BdCat['id']) . "'
ORDER BY internal_id
LIMIT $start, $per_page
");
while ($row = mysqli_fetch_array($sql)) {
require __DIR__ . '/../post.php';
}
// Получаем общее количество записей для навигации
$res = mysqli_query($connection, "
SELECT COUNT(*)
FROM posts
WHERE
city_id='" . mysqli_real_escape_string($connection, $CityBdID['id']) . "' AND
category_id='" . mysqli_real_escape_string($connection, $BdCat['id']) . "'
");
$total_rows = mysqli_fetch_row($res)[0];
// Количество страниц
$num_pages = ceil($total_rows / $per_page);
?>
<div class="pagination">
<?php if ($page > 1): ?>
<a href="?page=<?php echo $page - 1; ?>" class="page-item">‹ Назад</a>
<?php else: ?>
<span class="page-item disabled">‹ Назад</span>
<?php endif; ?>
<?php for ($i = 1; $i <= $num_pages; $i++): ?>
<?php if ($i == $page): ?>
<span class="page-item active"><?php echo $i; ?></span>
<?php else: ?>
<a href="?page=<?php echo $i; ?>" class="page-item"><?php echo $i; ?></a>
<?php endif; ?>
<?php endfor; ?>
<?php if ($page < $num_pages): ?>
<a href="?page=<?php echo $page + 1; ?>" class="page-item">Вперед ›</a>
<?php else: ?>
<span class="page-item disabled">Вперед ›</span>
<?php endif; ?>
</div>
```
### Объяснения:
- Мы используем `mysqli_*` функции для взаимодействия с базой данных.
- Мы обрабатываем `$_GET['page']`, чтобы избежать ошибок и обеспечить, что номер страницы всегда будет положительным.
- Мы выводим навигацию, обеспечивая возможность перехода на следующую и предыдущую страницы, а также связь по номерам страниц.
- Убедитесь, что вы добавили соответствующую стилизацию и класс `page-item` к вашим ссылкам для визуального отделения.
Таким образом, этот код предоставляет