И так, как же разбить выводимую из MySQL информацию на несколько страниц, проще всего, это показать на конкретном примере.
Пускай у нас есть MySQL таблица с название clients и содержит она 92 записи вида:
Phone — varchar(250)
Предположим что мы хотим выводить по 20 строк на каждую страницу, то есть у нас должно получиться всего 5 страниц. Это значит что при создании SQL запроса, мы должны использовать LIMIT. Это позволит нам выводить необходимые количество страниц начиная с определенного номера записи. Вот как будет выглядеть запрос:
Данная запрос выдаст нам 20 записей начиная с первой по сортированных по имени(name).
а этот покажет 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 базу!
hyena says:
Спасибо за пример.
даже решил переделать свой неумелый скрипт на этот)
admin says:
Не за что, если нужна помощь, пишите, попробую помочь.
Кирилл says:
Спасибо =D
азат says:
Привет, у меня проблема возникает.
В базе данных несколько категорий, при простом выборе нужного получается нумерация страниц, но при переходе вылетает в другую категорию. (webelektron.ru)
Как сделать так чтоб передавалась нужная категория и затем шла нужная выборка?