Создание,поддержка, продвижение сайтов
Тел.: (495) 506-0343
Веб-студия "Aivad" / Статьи / Статьи по разработке сайтов / Постраничная навигация на PHP

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

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

Пожалуй одна из самых распростанённых задач для веб-программистов. Большинство новичков сталкиваются с ней, я не был исключением. Попытаемся же разобраться с логикой скрипта и реализовать его. Приступим?

Первое, что нам нужно для этого иметь – это базу данных с несколькими десятками строк, например статей или комментариев к ним (что угодно). Мы будем рассматривать базу данных MySQL, она является самой популярной на данный момент. Естественно используемый язык – это PHP.

Есть? Отлично! Продолжаем…

  • Создаём для примера файл primer.php;
  • Создаём Базу данных primer (можете не создавать, если у вас уже есть подходящая);
  • Создаём таблицу primer вот такой структуры (опять же, если нет другой);
    CREATE table primer (
    id int auto_increment primary key key,
    name varchar(100) NOT NULL,
    text longtext NOT NULL
    );
  • Набиваем её информацией. Я сделаю 20 записей, мне не день ;)
  • Набираемся терпения – сейчас будем кодить.

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

Запихиваем нижележаций код в primer.php и пытаемся понять как же он работает:

Ошибочка вышла!';


// СОЕДЕНИМСЯ С MySQL
$connect = mysql_connect ( $server, $user, $pass );
if (! $connect) {
echo $text_error;
exit ();
}

// СОЕДЕНИЯЕМСЯ С БАЗОЙ ДАННЫХ
$select = mysql_select_db ( $db );
if (! $select) {
echo $text_error;
exit ();
}

// СОЗДАЁМ ЗАПРОС
$result = mysql_query ( "SELECT * from $table ORDER by id desc" );
// СЧИТАЕМ КОЛЛИЧЕСТВО ЗАПИСЕЙ В ТАБЛИЦЕ - У МЕНЯ ИХ 20
$num_rows = mysql_num_rows ( $result );

// А ТЕПЕРЬ СЧИТАЕМ НА СКОЛЬКО СТРАНИЦ НАМ РАЗБИТЬ ЗАПИСИ И ВЫДЕЛЯЕМ ЦЕЛОЕ ЧИСЛО
$num_rows = round ( $num_rows / $chislo ); // 20 ДЕЛИМ НА 5. СКОЛЬКО? :)


// ЗДЕСЬ МЫ ПРОВЕРЯЕМ НА КАКОЙ СТРАНИЦЕ СЕЙЧАС ПОЛЬЗОВАТЕЛЬ
if (isset ( $_GET ['str'] )) {
$nav = $_GET ['str'];
} else {
$nav = 0;
}
$nav = intval ( $nav ); // ДЛЯ ЗАЩИТЫ ОТ НЕХОРОШИХ ДЯДЕНЕК МЫ ВЫДЕЛИМ ЦЕЛУЮ ЧАСТЬ $GET['str']
echo 'Навигация: ';

// А ТЕПЕРЬ ВЫВОДИМ НОМЕРА СТРАНЦ
for($i = 1; $i < $num_rows; $i ++) {
if ($i != $nav) {
echo '' . $i . ' ';
} else {
// АКТИВНУЮ СТРАНИЦУ ДЕЛАЕМ НЕ ГИПЕРССЫЛКОЙ
echo '' . $i . ' ';
}
}

echo ''; // ОТДЕЛИМ НАВИГАЦЮ ОТ КОНТЕНТА ДЛЯ НАГЛЯДНОСТИ


// НАЧИНАЕМ ВЫВОДИТЬ САМУ ИНФОРМАЦИЮ ПОСТРАНИЧНО :)
if (! isset ( $_GET ['str'] )) {
$str = 0;
} else {
$str = $_GET ['str'] * $chislo - $chislo;
}
$nomer = $str + 5;
// ФОРМИРУЕМ ЗАПРОС НУЖНОЙ НАМ ЧАСТИ ИНФОРМАЦИИ
$result = mysql_query ( "SELECT * from $table ORDER by id asc limit $str, $nomer" );
// ИНАЧЕ ВЫВОДИМ ОШИБКУ
if (! $result) {
echo $text_error;
exit ();
}

echo '
';
while ( $row = mysql_fetch_array ( $result ) ) {
echo '

' . $row ['id'] . ' - ' . $row ['name'] . '


' . substr ( $row ['text'], 0, 100 ) . '.. >>
';
}
echo '
';

mysql_close ( $connect );

?>

Поясню лишь, что в переменной "str" передаётся номер страницы, на которой находится пользователь, в адрессной строке браузера это выглядит так:






Вернуться к списку новостей