PHP в деталях



         

Работа с MySQL. Часть 4. Постраничный вывод


DL
28.4.2001

Регулярно в форуме задают один и тот же вопрос: как сделать постраничный вывод. И каждый раз человеку отвечают: "Легко! m строк, начиная с n-ной: Select запрос Limit $n,$m". На самом деле не так всё просто.

Я уже про синтаксис параметра LIMIT, однако без толку. Для полноценного постраничного вывода строк из базы требуется большее. Требуется

1. Обработать номер страницы (в том числе проверить, не больше ли он общего количества страниц)

2. Нарисовать навигационную строку (чтобы не просто "вперед-назад", а с ссылками на несколько соседних страниц)

Тут-то и начинаются главные проблемы.

Недавно я работал над сайтом, в котором эти постраничные выводы в статистике были в каждом списке (а списков было много!). Тут-то и созрело решение, как свести все эти штучки к простому и единому решению. Получились четыре функции, которые я теперь использую везде, где нужен постраничный вывод данных, и не напрягаю попусту голову проблемой (как же я делал это там, как бы вынуть этот код оттуда?).

Первая функция? для внутреннего пользования двумя следующими. Берёт номер страницы, общее количество строк и количество строк на странице и выдаёт номер страницы, уже проверенный. Вторая берёт то же самое, проверяет номер страницы и выдаёт парамерт LIMIT либо полный (LIMIT n,m), либо краткий (LIMIT m), если это первая страница, либо ничего не выдаёт. Третья функция из тех же трёх параметров и адреса для ссылки делает навигационную строку. Ещё одна функция выдаёт число для нумерованного списка.

Этого достаточно для нормальной работы с постраничным выводом данных. Посмотрим, что получается в коде программы:

// кол-во строк в страницах

$in_page = 10;

// получаем количество строк

$amount = @mysql_result(mysql_query("SELECT count(id) as goods_total FROM goods"),0);

// рисуем навигационную строку и пишем начало таблицы

print("<div align=center>". draw_bar($page, $amount, $in_page, "goods.php?page="). "</div>\n<table>");




Содержание  Назад  Вперед