Открыть меню    

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

Когда-нибудь (конечно, если у вас есть сайт на PHP и MySQL) вам понадобится вывести все записи из базы данных. Ведь, например, выводить по 100 постов на одной странице крайне неразумно, поэтому следует сделать на сайте постраничный вывод записей из базы данных.

Наш постраничный вывод будет основан на свойствах оператора LIMIT. Оператор LIMIT позволяет не только ограничить вывод данных, но и задать параметр, с которого следует начинать вывод записей.

Например, чтобы вывести 10 записей из таблицы data, начиная с 10-й записи, следует писать так:

SQL

SELECT *
FROM data 
LIMIT 10, 10;

Страница нашего сценария будет называться viewpost.php. Переменная $str будет содержать значение нужной страницы.

Данные будем выводить из таблицы data. Структурируем вывод данных следующим образом: будем выводить краткое описание (description) и заголовок (title).

Конечно, для того чтобы все это выводилось приемлемо нужно будет сгруппировать элементы с помощью HTML и CSS. Хотя для моего примера все просто.

Пример простой постраничной навигации:

постраничная навигация

PHP

$sum = 5; // число записей на странице
$result = mysql_query("SELECT count(*) as a from data"); 
//count -- считает  количество элементов массива 
$arr = mysql_fetch_row($result); // возвращает неассоциативный массив 
$rec = $arr[0];  // общее число записей в таблице  
		   
// если страницы не существует, выводим первую страницу
if(!isset($_GET['str']))
{$str = 0;}
else
{$str = $_GET['str'];}
		   
// получем номер начальной записи страницы
$start = $str * $sum;
		   
// запрос 
$r = mysql_query("SELECT * FROM data LIMIT $start, $sum");
$n = mysql_num_rows($r); // возвращаем число рядов результата запроса
		   
// если страница не первая, выводим ссылку НАЗАД
if ($str > 0)
{
$p = $str - 1;
echo "<a href=viewpost.php?str=$p>НАЗАД</a>";
}
		   
$str++;  // увеличиваем переменную $str на единицу;
// выводим ссылку на следующие пять записей, если она есть, 
// то есть число записей, которые нужно вывести,
// и смещение не превышает общего числа записей
		   
if($start + $n < $rec)
echo "<a href=viewpost.php?str=$str>ДАЛЕЕ</a>"; 
		   
// выводим записи
for ($i = 0; $i < $n; $i++)
{
$myrow = mysql_fetch_array($r);			   
printf ("<h1>%s</h1><p>%s</p>",
$myrow["title"], $myrow["description"] );
}

Комментарии к статье

аватарка пользователя
2011-12-04
Димка

Спасибо большое) очень простой скрипт для понимания и все очень хорошо.Спасибо что помогли)

аватарка пользователя
2011-12-29
Acid_Burn

Очень помог ваш скриптец !долго искал по инету!все замудрено а этот подошол 1 в 1!!!Огромное спасибо вот только сделали бы чтоб последняя запись выводилась в начале

аватарка пользователя
2011-12-29
dnzl

Димка, Acid_Burn, всегда пожалуйста , а скрипт и в самом деле довольно прост, как раз для новичков, коим я и являюсь

аватарка пользователя
2012-05-07
Валерий

Спасибо большое!Очень помог!)

аватарка пользователя
2014-07-13
Стрэк

Такую
"Warning: ... expects parameter 1 to be resource, boolean given"
фигню выдаёт в
"$n = mysql_num_rows($r);"
"$arr = mysql_fetch_row($result);"

аватарка пользователя
2014-08-19
Антон

Спасибо, я долго мучился, пересмотрел массу сайтов, и вот, наконец, у меня получилось

аватарка пользователя
2014-08-19
dnzl

пож-то, не забудьте поправить синтаксис функций на современный лад

аватарка пользователя
2016-02-09
Марс

Подскажите, а как быть если сайт имеет категории, и нужно выводить только те записи, которые соответствуют своей категории?

аватарка пользователя
2016-02-09
Denz

марс, я давно не занимаюсь пхп, но очевидно, что запрос к БД нужно делать с фильтром по категории, чтобы выводимые записи относились к одной категории

аватарка пользователя
2018-05-31
HELEN

спасибо за скрипт)