paginator mysql php

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

Задача - вывести данные из таблицы.
Имеется таблица в базе данных MYSQL:

-- Структура таблицы `country`
CREATE TABLE IF NOT EXISTS `country` (
`country_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`country_name` varchar(128) NOT NULL DEFAULT '',
PRIMARY KEY (`country_id`),
UNIQUE KEY `country_name` (`country_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Имеется файл config.php с настройками обращения к базе:

<?
define("HOST","localhost");
define("USER","user");
define("PASS","password");
define("DB","base");
$link = mysql_connect(HOST,USER,PASS) or die (mysql_error());
mysql_select_db(DB, $link);
mysql_query ("SET NAMES utf8");
mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8_general_ci'");
?>
Пишем файл постраничного вывода country.php:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?php
include ("config.php"); /*Соединяемся с базой*/
?>
<head>
<title>Страны</title>
</head>
<body>
<!--Начало таблицы с выводом-->
<table class="table_applic" align="center" width="100%">
<tr>
<td class="nocolor" colspan="5" align="right">
<input type="button" onclick='javascript:window.open("countryform.php","","width=800, height=600, toolbar=0, top=0, left=300, directories=0, status=0, resizable=0, scrollbars=0");return false;' value="Добавить" style="width: 100px;"></td>
</tr>
<tr class="table_header">
<td width="3%"><a href=?sort=country_id>№</a></td>
<td width="10%"><a href=?sort=country_name>Страна</td>
</tr>
<?php
$_GET['sort'] = (empty($_GET['sort'])) ? "country_id" : $_GET['sort'];
define( 'USERS_ON_PAGE', 25 );
// Выбираем из БД количество пользователей - это нужно для
// построения постраничной навигации
$query = "SELECT COUNT(*) FROM country";
$res = mysql_query( $query );
$total = mysql_result( $res, 0, 0 );
// Проверяем передан ли номер текущей страницы (постраничная навигация)
if ( isset($_GET['page']) )
{
$page = (int)$_GET['page'];
if ( $page < 1 ) $page = 1;
}
else
{
$page = 1;
}
// Число страниц списка пользователей (постраничная навигация)
$cnt_pages = ceil( $total / USERS_ON_PAGE );
if ( $page > $cnt_pages ) $page = $cnt_pages;
// Начальная позиция (постраничная навигация)
$start = ( $page - 1 ) * USERS_ON_PAGE;
$query = "SELECT country_id, country_name
FROM country
ORDER by {$_GET['sort']} ASC LIMIT ".$start.", ".USERS_ON_PAGE;
$res = mysql_query( $query );

while( $user = mysql_fetch_array( $res ) )
{
echo '<tr class="table_line">';
echo '<td>'.$user['country_id'].'</td>';
echo '<td>'.$user['country_name'].'</td>';
echo '</tr>';
}

// Строим постраничную навигацию
if ( $cnt_pages > 1 )
{
echo '<div>&nbsp; ';
// Проверяем нужна ли стрелка "В начало"
if ( $page > 3 )
$startpage = '<a class="update" href="country.php?page=1"><<</a> ... ';
else
$startpage = '';
// Проверяем нужна ли стрелка "В конец"
if ( $page < ($cnt_pages - 2) )
$endpage = ' ... <a class="update" href="country.php?page='.$cnt_pages.'">>></a>';
else
$endpage = '';
// Находим две ближайшие станицы с обоих краев, если они есть
if ( $page - 2 > 0 )
$page2left = ' <a class="update" href="country.php?page='.($page - 2).'">'.($page - 2).'</a> | ';
else
$page2left = '';
if ( $page - 1 > 0 )
$page1left = ' <a class="update" href="country.php?page='.($page - 1).'">'.($page - 1).'</a> | ';
else
$page1left = '';
if ( $page + 2 <= $cnt_pages )
$page2right = ' | <a class="update" href="country.php?page='.($page + 2).'">'.($page + 2).'</a>';
else
$page2right = '';
if ( $page + 1 <= $cnt_pages )
$page1right = ' | <a class="update" href="country.php?page='.($page + 1).'">'.($page + 1).'</a>';
else
$page1right = '';
// Выводим меню
echo $startpage.$page2left.$page1left.'<strong>'.$page.'</strong>'.$page1right.$page2right.$endpage."\n";
echo '</div>';
}

?>
<tr>
<td class="nocolor" colspan="5" align="right"><a class="update" href="#" onclick="javascript:window.location.reload();">Обновить</a></td>
</tr>
</table>
<!--Конец таблицы вывода-->
</body>
</html>
 

Аватар пользователя gruzdev
О нас:
Наша команда находится в Киеве, Украина. Если у вас есть желание встретится лично для обсуждения вашего проекта, мы этому будем рады. Мы считаем, что личные контакты способствуют взаимопониманию, а значит позитивно влияют на качество наших проектов.