Среда, 17.06.2026, 01:48
Приветствую Вас Гость | RSS
Поиск по каталогу
Главная страница | Каталог статей | Регистрация | Вход

Информационные технологии
Форма входа
Меню сайта

Категории каталога
php [246]
perl [1]
perl
ASP [1]
AJAX [0]

Друзья сайта

Наш опрос
Оцените мой сайт
Всего ответов: 69

Начало » Статьи » Web программирование » php

Гостевая книга шаг за шагом 2
$recs - это массив с записями. Если файл $file_gb существует, то с помощью функции file() мы присваиваем каждую строчку файла одному элементу массива, в противном же случае $recs - пустой массив. Далее идёт редактирование данных описанных выше. Затем с помощью функции array_unshift() добавляем в начало записей нашу запись. Далее следует проверка на количество записей, и если количество больше нужного, то с помощью функции array_slice() мы выделяем первые элементы в нужном нам количестве. Ну и, наконец, записываем наши записи в файл.

Итак, функции для добавления записей мы сделали, теперь нужно сделать функцию для постраничного вывода данных на экран. В принципе в выводе данных ничего сложного нет, считали запись - вывели в соответствии с дизайном и всё, но ведь мы хотим сделать вывод постраничным - вот в этом как раз и может возникнуть сложность. Итак приступим: Сначала я приведу код функции view(), а потом мы его разберём.


// Функция вывода записей //
function view() {
global
$file_gb;
global
$HTTP_GET_VARS;
global
$rec_page;

if (
file_exists($file_gb)) {
$messages = file($file_gb);
$count = count($messages);
if (
$count>$rec_page) {
nav_page(ceil($count/$rec_page), (isset($HTTP_GET_VARS['page']) ?
$HTTP_GET_VARS['page']: 1),"gb.php?page=");
echo
"<br>";
}
$num_page=1;
if (isset(
$HTTP_GET_VARS['page'])) {
if ((
$HTTP_GET_VARS['page']>0) and
(
$HTTP_GET_VARS['page']<=ceil($count/$rec_page)))
$num_page=$HTTP_GET_VARS['page'];
}
for (
$i=($num_page-1)*$rec_page; $i<=(($num_page*$rec_page<$count) ?
$num_page*$rec_page-1: $count-1); $i++) {
$tmp = explode("|",$messages[$i]);
echo
"<table class="text_info" border="0" width="100%">n";
echo
"<tr class="sel_p">n";
echo
"<td>n";
echo
"<b>От:</b><br>";
if (
$tmp[2]<>"") echo "<b>URL:</b><br>";
echo
"<b>Дата:</b>n";
echo
"</td>n";
echo
"<td class="text_info_sel" width="100%">n";
echo
$tmp[0];
if (
$tmp[1]<>"") { echo " | <a href="mailto:".$tmp[1]."">".$tmp[1]."</a>"; }
echo
"<br>";
if (
$tmp[2]<>"") echo "<a href="http://".$tmp[2]."">".$tmp[2]."</a><br>";
echo $tmp[3]."n";
echo
"</td>n</tr>n";
echo
"<td colspan="2"><br>n";
echo
$tmp[4];
echo
"</td>n</tr>n</table>n";
echo
"<br>";
}
// for
if ($count>$rec_page) { nav_page(ceil($count/$rec_page),
(isset(
$HTTP_GET_VARS['page']) ? $HTTP_GET_VARS['page']: 1),"gb.php?page="); }
echo
"<br>";
} else {
echo
"<center>Записей нет. Вы можете быть первым ;)</center><br>n";
}
}
// view()


Глобальные переменные: $file_gb - файл с записями, $rec_page - количество записей выводимых на одну страницу - эти переменные мы определили в самом начале в настройках нашей гостевой книги. А вот $HTTP_GET_VARS - это массив содержащий все ключи и значения переданные методом GET, т.е. через URL (работает при register_globals = Off) - это нам понадобится, т.к. номер страницы мы будем передавать как раз через URL. Разберёмся, что же делает наша функция. Сначала выполняется проверка - есть ли файл с записями - и если есть, то выполняется работа по выводу записей, а если нет файла, то выводится сообщение, что записей нет. Итак, если всё нормально и у нас есть файл с записями, то с помощью функции file() мы создаём массив строк файла $messages, а переменной $count присваиваем кол-во элементов полученного массива, т.е. количества записей. Далее идёт выполняется вывод навигации страниц и сами записи в соответствии с нужной страницей. В частности мы используем функцию nav_page, я приведу лишь её код.


// Функция вывода навигации по страницам //
function nav_page(
$count, // Общее кол-во страниц
$num_page, // Номер текущей страницы
$url // Какой URL для ссылки на страницу
// (к нему добавляется номер страницы)
) {

$page_nav = 3; // сколько страниц выводить одновременно

$begin_loop=1; // начальное значение в цикле
$end_loop=$count; // конечное значение в цикле
echo "<div align="center">[ Страницы ($count):";
// Проверка на корректность номера текущей страницы
if ($num_page>$count or $num_page<1) $num_page=1;

// Далее в функции идёт сам вывод навигации, получено здесь всё опытным путём
if ($num_page>$page_nav) {
echo
" <a href="$url".($page_nav*(floor($num_page/$page_nav)-
($num_page%$page_nav==0 ? 1: 0)))."">("
.($page_nav*(floor($num_page/$page_nav)-
1-($num_page%$page_nav==0 ? 1: 0))+1)."-".($page_nav*(floor($num_page/$page_nav)-
(
$num_page%$page_nav==0 ? 1: 0))).")</a> ...";
$begin_loop=$page_nav*(floor($num_page/$page_nav)-($num_page%$page_nav==0 ? 1: 0))+1;
}
if (
$count>$page_nav*(floor($num_page/$page_nav)-($num_page%$page_nav==0 ? 1: 0)+1)) {
$end_loop=$page_nav*ceil($num_page/$page_nav);
}
for (
$i = $begin_loop; $i <= $end_loop; $i++) {
if (
$i==$num_page) echo "&nbsp; <b>$i</b>";
else echo
"&nbsp; <a href="$url$i">$i</a>";
}
// for
if ($count>$page_nav*(floor($num_page/$page_nav)-($num_page%$page_nav==0 ? 1: 0)+1)) {
echo
"&nbsp;&nbsp;... <a href="$url".($page_nav*ceil($num_page/$page_nav) + 1).
"">("
.($page_nav*ceil($num_page/$page_nav) + 1);
if (
$page_nav*ceil($num_page/$page_nav)+1<$count) {
echo
"-".($count<=$page_nav*(ceil($num_page/$page_nav)+1) ?
$count: $page_nav*(ceil($num_page/$page_nav)+1));
}
echo
")</a>";
}
echo
"&nbsp;&nbsp;]</div>n";
}
// nav_page()


Описывать я этот кусок не буду, вы можете прочитать об этом в моей статье постраничный вывод, где всё это подробно описано. Здесь я опишу только то, как мы выводим записи. Мы имеем цикл, в котором начальное и конечное значение $i - изменяется в зависимости от страницы, которую мы хотим отобразить. В цикле мы из элемента массива $messages[$i] создаём массив $tmp с помощью функции explode, которая разбивает строку на строки по границам образованными сепаратором |. Т.е. мы получаем массив в котором 0-й элемент - Имя, 1-й - e-mail, 2-й - url, 3-й - дата и время добавления, 4-й - само сообщение. Ну а дальше мы выводим нашу запись так как хотим.

Вот мы и написали все необходимые функции для гостевой книги, осталось только написать код который будет выполняться в начале, т.е. будет выбирать, какую функцию запустить. Вот он:


if (isset($HTTP_POST_VARS['msg_submit'])) { if (test()) add(); }
view();


Думаю ничего сложного в нём нет и вы сами разберётесь что куда :)

Всё! Мы написали всё, что нужно! Теперь соберите всё в кучу и получите полноценную гостевую книгу. Собирать в следующем порядке: 1)Заголовок файла, 2) Настройки GB, 3) Функции, 4) Нашу последнюю написанную строчку, 5) Форму для добавления, 6) колонтитул.

Кому лень всё собирать - можете скачать уже готовый. См. файл gb.zip.

Подведём итоги: Мы написали полноценную гостевую книгу и выполнили все задачи, которые поставили перед собой. Конечно можно сделать ещё кучу всяких фишек, написать администрирование гостевой книги и многое другое, но это уже тема другой статьи. В общем, надеюсь статья была вам полезна. Если что-то было не понятно, то милости прошу: пишите на мыло - обязательно отвечу.
Категория: php | Добавил: freeone (14.06.2007)
Просмотров: 625 | Комментарии: 1 | Рейтинг: 0.0 |

Всего комментариев: 1
1 amosmonisew  
0
Если хочешь сказать слово, посмотри сначала на того, кто его будет слушать.

Имя *:
Email *:
Код *:

Copyright Информационные технологии © 2006