PHP Выводим данный из MySQL базы c разделением по страницам

И так, как же разбить выводимую из MySQL информацию на несколько страниц, проще всего, это показать на конкретном примере.

Пускай у нас есть MySQL таблица с название clients и содержит она 92 записи вида:

Name — varchar(250)
Phone — varchar(250)

Предположим что мы хотим выводить по 20 строк на каждую страницу, то есть у нас должно получиться всего 5 страниц. Это значит что при создании SQL запроса, мы должны использовать LIMIT. Это позволит нам выводить необходимые количество страниц начиная с определенного номера записи. Вот как будет выглядеть запрос:

$sql = «SELECT * FROM clients ORDER BY name ASC LIMIT 0, 20»;

Данная запрос выдаст нам 20 записей начиная с первой по сортированных по имени(name).

$sql = «SELECT * FROM clients ORDER BY name ASC LIMIT 50, 20»;

а этот покажет 20 записей начиная с 50, так же сортированных по имени(name).

То есть, все что нам необходимо это определить количество записей, затем разделить это количество на наше число выводимых строк на странице, в нашем случаи это 20, и округлить вверх, таким образом мы получим число страниц.

Но, начнем мы с формирования запроса и вывода результатов в табличку, назовем этот файл pageshow.php:

<?php
if (isset($_GET["page"])) { $page  = $_GET["page"]; } else { $page=1; };
$start_from = ($page-1) * 20;
$sql = "SELECT * FROM clients ORDER BY name ASC LIMIT $start_from, 20";
$rs_result = mysql_query ($sql, $connection);
?>   <table>
<tr><td>Name</td><td>Phone</td></tr>
<?php
while ($row = mysql_fetch_assoc($rs_result)) {
?>
<tr>
<td><? echo $row["Name"]; ?></td>
<td><? echo $row["PhoneNumber"]; ?></td>
</tr>
<?php
};
?>
</table>

Если вы сейчас откроете файл pageshow.php в вашем браузере то вы увидите первые 20 строк. Если мы хотим увидеть вторую страницу, то нам необходимо открыть pageshow.php?page=2

Теперь подсчитаем количество строк в таблице:

$sql = "SELECT COUNT(Name) FROM clients";
$rs_result = mysql_query($sql,$connection);
$row = mysql_fetch_row($rs_result);
$total_records = $row[0];

$total_records теперь равно количеству строк в таблице clients, тоесть, в нашем случаи 92. Теперь вычислим количество страниц, для округления вверх воспользуемся функцией ceil:

$total_pages = ceil($total_records /20);

Для того что бы вывести номера страниц и ссылки на них, воспользуемся циклом for:

<?php
for ($i=1; $i<=$total_pages; $i++) {
echo "<a href='pageshow.php?page=".$i."'>".$i."</a> ";
};
?>

В итоге, у нас получиться вот такой файл:

<?php
if (isset($_GET["page"])) { $page  = $_GET["page"]; } else { $page=1; };
$start_from = ($page-1) * 20;
$sql = "SELECT * FROM clients ORDER BY name ASC LIMIT $start_from, 20";
$rs_result = mysql_query ($sql,$connection);
?>
<table>
<tr><td>Name</td><td>Phone</td></tr>
<?php
while ($row = mysql_fetch_assoc($rs_result)) {
?>
<tr>
<td><? echo $row["Name"]; ?></td>
<td><? echo $row["PhoneNumber"]; ?></td>
</tr>
<?php
};
?>
</table>
<?php
$sql = "SELECT COUNT(Name) FROM clients";
$rs_result = mysql_query($sql,$connection);
$row = mysql_fetch_row($rs_result);
$total_records = $row[0];
$total_pages = ceil($total_records / 20);

for ($i=1; $i<=$total_pages; $i++) {
echo "<a href='pageshow.php?page=".$i."'>".$i."</a> ";
};
?>

не забудте подключить MySQL базу!

Случайные Статьи

Loading…


Количество просмотров :7104

4 Comments

  1. hyena:

    Спасибо за пример.
    даже решил переделать свой неумелый скрипт на этот)

  2. Кирилл:

    Спасибо =D

  3. азат:

    Привет, у меня проблема возникает.
    В базе данных несколько категорий, при простом выборе нужного получается нумерация страниц, но при переходе вылетает в другую категорию. (webelektron.ru)
    Как сделать так чтоб передавалась нужная категория и затем шла нужная выборка?

Оставьте коментарий