Ответов: 24 Просмотров: 303
|
Пожалуй одна из самых распростанённых задач для веб-программистов. Большинство новичков сталкиваются с ней, я не был исключением. Попытаемся же разобраться с логикой скрипта и реализовать его. Приступим?
Первое, что нам нужно для этого иметь – это базу данных с несколькими десятками строк, например статей или комментариев к ним (что угодно). Мы будем рассматривать базу данных MySQL, она является самой популярной на данный момент. Естественно используемый язык – это PHP.
Есть? Отлично! Продолжаем…
1. Создаём для примера файл primer.php;
2. Создаём Базу данных primer (можете не создавать, если у вас уже есть подходящая);
3. Создаём таблицу primer вот такой структуры (опять же, если нет другой);
CODE ( SQL):
скопировать код в буфер обмена
CREATE TABLE primer ( id int AUTO_INCREMENT PRIMARY KEY KEY, name varchar(100) NOT NULL, text longtext NOT NULL );
4. Набиваем её информацией. Я сделаю 20 записей, мне не день ;)
5. Набираемся терпения – сейчас будем кодить.
Сам код довольно небольшой и несложный, поэтому вылажу его сразу весь, пометки Вам помогут разобраться без проблем.
Запихиваем нижележаций код в primer.php и пытаемся понять как же он работает:
PHP:
скопировать код в буфер обмена
<? $server = 'localhost'; // ИМЯ СЕРВЕРА $user = 'root'; // ПОЛЬЗОВАТЕЛЬ - НЕ ИСПОЛЬЗУЙТЕ ROOT ДЛЯ ВАШЕЙ ЖЕ БЕЗОПАСНОСТИ $pass = ''; // ПАРОЛЬ ПОЛЬЗОВАТЕЛЯ $db = 'primer'; // БАЗА ДАННЫХ $table = 'primer'; // НАЗВАНИЕ ТАБЛИЦЫ $chislo = 5; // ЧИСЛО СООБЩЕНИЙ НА СТРАНИЦЕ // ДЛЯ УДОБСТВА ОБОЗНАЧИМ ПЕРЕМЕННУЮ С ТЕКСТОМ ОШИБКИ $text_error = '<br />Ошибочка вышла!'; // СОЕДЕНИМСЯ С MySQL if (!$connect) { echo $text_error; } // СОЕДЕНИЯЕМСЯ С БАЗОЙ ДАННЫХ if (!$select) { echo $text_error; } // СОЗДАЁМ ЗАПРОС $result = mysql_query("SELECT * from $table ORDER by id desc"); // СЧИТАЕМ КОЛЛИЧЕСТВО ЗАПИСЕЙ В ТАБЛИЦЕ - У МЕНЯ ИХ 20 // А ТЕПЕРЬ СЧИТАЕМ НА СКОЛЬКО СТРАНИЦ НАМ РАЗБИТЬ ЗАПИСИ И ВЫДЕЛЯЕМ ЦЕЛОЕ ЧИСЛО $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 '<a href="'.$PHP_SELF.'?str='.$i.'">'.$i.'</a> '; } else { // АКТИВНУЮ СТРАНИЦУ ДЕЛАЕМ НЕ ГИПЕРССЫЛКОЙ echo '<span>'.$i.'</span> '; } } echo '<hr />'; // ОТДЕЛИМ НАВИГАЦЮ ОТ КОНТЕНТА ДЛЯ НАГЛЯДНОСТИ // НАЧИНАЕМ ВЫВОДИТЬ САМУ ИНФОРМАЦИЮ ПОСТРАНИЧНО :) 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; } echo '<div style="width: 40%;">'; echo '<p>'.$row['id'].' - <strong>'.$row['name'].'</strong> '.substr($row['text'],0,100).'.. <a href="text.php?nomer='.$row['id'].'">>></a></p>'; } echo '</div>'; ?>
(Добавление)
А этот код я подстроил по себя. Хоть и работает корявенько, но меня устраивает.
PHP:
скопировать код в буфер обмена
<?PHP $chislo = 5; // ЧИСЛО СООБЩЕНИЙ НА СТРАНИЦЕ // ДЛЯ УДОБСТВА ОБОЗНАЧИМ ПЕРЕМЕННУЮ С ТЕКСТОМ ОШИБКИ $text_error = '<br />Ошибочка вышла!'; // СОЗДАЁМ ЗАПРОС $result = mysql_query("SELECT * from $table ORDER by $id desc"); // СЧИТАЕМ КОЛЛИЧЕСТВО ЗАПИСЕЙ В ТАБЛИЦЕ - У МЕНЯ ИХ 20 // А ТЕПЕРЬ СЧИТАЕМ НА СКОЛЬКО СТРАНИЦ НАМ РАЗБИТЬ ЗАПИСИ И ВЫДЕЛЯЕМ ЦЕЛОЕ ЧИСЛО $num_rows = round($num_rows/$chislo); // 20 ДЕЛИМ НА 5. СКОЛЬКО? :) if (is_double($num_rows)) // Если получаем не целое число { $num_rows = (int) $num_rows; // Делаем его таковым $num_rows = $num_rows + 1; // И прибавляем единицу. } // ЗДЕСЬ МЫ ПРОВЕРЯЕМ НА КАКОЙ СТРАНИЦЕ СЕЙЧАС ПОЛЬЗОВАТЕЛЬ if (isset($_GET['page'])) { $nav = $_GET['page']; } else { $nav = 0; } $nav = intval($nav); // ДЛЯ ЗАЩИТЫ ОТ НЕХОРОШИХ ДЯДЕНЕК МЫ ВЫДЕЛИМ ЦЕЛУЮ ЧАСТЬ $GET['str'] echo 'Страницы: '; // А ТЕПЕРЬ ВЫВОДИМ НОМЕРА СТРАНЦ for ($i=1; $i<$num_rows; $i++) { if ($i != $nav) { echo '<a href="'.$PHP_SELF.'?page='.$i.'">'.$i.'</a> '; } else { // АКТИВНУЮ СТРАНИЦУ ДЕЛАЕМ НЕ ГИПЕРССЫЛКОЙ echo '<span>'.$i.'</span> '; } } // НАЧИНАЕМ ВЫВОДИТЬ САМУ ИНФОРМАЦИЮ ПОСТРАНИЧНО :) if (!isset($_GET['page'])) { $page = 0; } else { $page = $_GET['page']*$chislo - $chislo; } $nomer = $page + 5; // ФОРМИРУЕМ ЗАПРОС НУЖНОЙ НАМ ЧАСТИ ИНФОРМАЦИИ $result = mysql_query("SELECT * from $table ORDER by $id DESC limit $page, $nomer"); // ИНАЧЕ ВЫВОДИМ ОШИБКУ if (!$result) { echo $text_error; } ?>
|