Постраничный вывод (PHP)

Постраничный вывод информации с базы данных можно разделить на Х этапов:

  1. Определить количество записей для одной страницы;
  2. Получение количества записей в таблице;
  3. Получение количества страниц;
  4. Получение и проверка текущей страницы (обычно с GET-параметров);
  5. Формирование запроса на получение информации для конкретной страницы.

Исходные данные

Для примера была взята таблица `news` с сайта expange.ru, в которой всего 3 колонки:

ПолеТипОписание
idINTУникальный идентификатор новости
dateDATEДата публикации новости
textTEXTТекст новости

Пример

В качестве примера будет вывод по 8 записей на каждой странице, текущая страница будет браться из GET-параметра page.

Посмотреть результат выполнения скрипта.

<?php // Соединение с БД MySQL $sql = mysql_connect('localhost', 'root', 'mypassword'); mysql_select_db('expange', $sql); // Количество новостей на странице $on_page = 8; // Получаем количество записей таблицы news $query = "SELECT COUNT(*) FROM `news`"; $res = mysql_query($query); $count_records = mysql_fetch_row($res); $count_records = $count_records[0]; // Получаем количество страниц // Делим количество записей на количество новостей на странице // и округляем в большую сторону $num_pages = ceil($count_records / $on_page); // Текущая страница из GET-параметра page // Если параметр не определен, то текущая страница равна 1 $current_page = isset($_GET['page']) ? (int)$_GET['page'] : 1; // Если текущая страница меньше единицы, то страница равна 1 if ($current_page < 1) { $current_page = 1; } // Если текущая страница больше общего количества страница, то // текущая страница равна количеству страниц elseif ($current_page > $num_pages) { $current_page = $num_pages; } // Начать получение данных от числа (текущая страница - 1) * количество записей на странице $start_from = ($current_page - 1) * $on_page; // Формат оператора LIMIT <ЗАПИСЬ ОТ>, <КОЛИЧЕСТВО ЗАПИСЕЙ> $query = "SELECT `id`, `date`, `text` FROM `news` ORDER BY `date` DESC LIMIT $start_from, $on_page"; $res = mysql_query($query); // Вывод результатов echo '<table border="1"><tr><th>id</th><th>дата</th><th>текст</th></tr>'; while ($row = mysql_fetch_assoc($res)) { echo '<tr>'; echo '<td>'.$row['id'].'</td>'; echo '<td>'.$row['date'].'</td>'; echo '<td>'.$row['text'].'</td>'; echo '</tr>'; } echo '</table>'; // Вывод списка страниц echo '<p>'; for ($page = 1; $page <= $num_pages; $page++) { if ($page == $current_page) { echo '<strong>'.$page.'</strong> &nbsp;'; } else { echo '<a href="pages.php?page='.$page.'">'.$page.'</a> &nbsp;'; } } echo '</p>'; ?>

Что получилось в итоге.

Категории

ПрограммированиеPHP

Читайте также

Комментарии

Event Chek

Интересная статья, пригодилась. Спасибо автору

Ответить
Event Chek

Интересная статья, пригодилась. Спасибо автору

Ответить
Виталий Роенко

Огромное спасибо!!! сделал на своем сайте!
только в свежих версиях надо исправить функции:
13 $query = "SELECT COUNT(*) FROM news"; убрать ковычки от `news`
14 mysql_query исправить на mysqli_query
15 mysql_fetch_row исправить на mysqli_fetch_row
53 mysql_fetch_assoc исправить на mysqli_fetch_assoc

Ответить