Статья:Модуль гостевой книги, extends "Модуль оформления"
Я искренне рад представить вам вторую статью из цикла "Помодульное построение Веб-сайта" под названием "Модуль гостевой книги".Эта статья описывает создание поначалу простенькой но потом все более и более сложной гостевой книги.Все следующие статьи будут являться лишь продолжением первой, названия будут такого плана "Модуль гостевой книги №2" и так далее.Они не будут являться отдельными статьями цикла а только частями этой статьи.
Мы уже создали модуль оформления в первой статьей цикла, и создадим гостевую книгу сразу же только по одной причине: мы сразу хотим знать мнение посетителей о нашем сайте:)Для того чтобы показать насколько просто изменяется дизайн сайта, я изменил шаблон, сделав его чуть чуть посложнее.Вот обновленный дизайн сайта:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>[name]</title>
<meta name="keywords" content="[keywords]">
<meta name="description" content="[descr]">
<style>
a{
color:navy;
font-decoration:none;
}
font{
color:navy;
font-weight:bold;
}
p{
color:navy;
font-weight:bold;
}
</style>
</head>
<body bgcolor="#3366FF">
<div align="center">
<table border="0" cellpadding="0" cellspacing="0" bgcolor="#F3F3EF" width="70%" height="100%">
<tr>
<td valign="top">
<center><h2>[name]</h2></center></td>
<td valign="top" height="86">
<b>
место под логотип</td>
</b>
</tr>
<tr>
<td valign="top" width="519" align="center">
<b>
[content]
</b>
</td>
<td valign="top" height="693" width="200" align="center">
<b>Навигация</b><p>
<a href="index.php">Главная страница</a></p>
<p><a href="guest.php">Гостевая книга</a></p>
</table>
</div>
</body>
</html>
Дизайн чуток проще, но это уже не так примитивно как было.Теперь подумаем о дизайне гостевой книги, для этого сделаем шаблон сообщения в нашей гостевой.Вот шаблон который сделал я, сделайте такой же по его образцу:
<table border="2" width="100%" bgcolor="#99CCFF" bordercolor="#FFFFFF" bordercolorlight="#FFFFFF" bordercolordark="#FFFFFF">
<tr>
<td height="23">[messinfo]</td>
</tr>
<tr>
<td valign="top">[message]</td>
</tr>
</table>
Его мы не будем грузить ни в какую папку а будем использовать прямо в рабочем файле guest.php.Вместо [messinfo] скрипт будет ставить строку типа "Написал Brodyaga 24.12.05 в 00:00:00", а вместо [message] будет стоять сам текст сообщения.снизу всех сообщений будет выводиться форма для добавления новых сообщений.пока это первая версия гостевой книги, поэтому начнем с простого вывода и добавления сообщений.У нас пока нет шаблона формы для добавления сообщений, но это временно.Вот шаблон добавления сообщения, который я составил(назовите этот файл gbform.html и положите в папку с другими шаблонами.):
[error]
<p><form method='post'>
Все поля, помеченные звездочкой обязательны для заполнения
<center><b>
Ваше имя*:<br>
<input type='text' name='nick' value='[nick]' size=35><br>
Ваш e-mail*:<br>
<input type='text' name='email' value='[email]' size=35><br>
Ваш сайт:<br>
<input type='text' name='site' value='[site]' size=35><br>
Ваше сообщение*:<br> <textarea name='mess' rows=8 cols=30>[mess]]</textarea>
<br>
<input type='submit' name='submit' value='Отправить сообщение'>
</p></form>
Сообщения будут храниться в файлах, т.к. в независимости от моей страстной любви к базам данных, не все могут себе её позволить.Итак, начнем писать скрипт.Сейчас я приведу весь код скрипта guest.php, в котором напишу комментарии почти ко всем строчкам.
Примечание:создайте в корневой папке файл messages.txt и выставьте ему права 666.Все сообщения будут храниться в таком формате:
номер----имя----e-mail----сайт----сообщение----дата и время
например:1----Бродяга----brodyaga007@mail.ru---- http://www.web-maste.ru----Крутой сайт!----24/12/05 12:35
Наконец код:
<?php
require "header.php";
//Блок вывода уже имеющихся сообщений.
echo "<center><h2>Гостевая книга</h2></center>";
$mes1=file("messages.txt");//1
for($i=0;$i<=count($mes1)-1;$i++){//2
$mes[$i]=$mes1[count($mes1)-$i-1];//2
}//2
$smiles=file("smile.txt");//3
for($i=0;$i<=count($mes)-1;$i++){//4
if(!ereg("----",$mes[$i]))//5
continue;//5
$value=$mes[$i];//6
$info=split("----",$value,6);//7
$upline="Логин:$info[1] e-mail:<a href='mailto:$info[2]'>$info[2]</a> www:$info[3] <div align='right'><i>Добавлено $info[5]</i></div>";//8
$downline=$info[4];//9
foreach($smiles as $v){//10
list($smile,$img)=split("<<>>",$v);//10
$downline=str_replace($smile,"<img src=$img border=0>",$downline);//10
}//10
echo "Сообщение №$info[0]<table border='2' width='100%' bgcolor='#99CCFF' bordercolor='#FFFFFF' bordercolorlight='#FFFFFF' bordercolordark='#FFFFFF'>
<tr>
<td height='23'><b><div>$upline</font></b></td>
</tr>
<tr>
<td valign='top'><font color='navy'>$downline</font></td>
</tr>
</table><br>";//11
}//закончили выводить имеющиеся сообщения.
$fp=fopen("./template/gbform.html","r");//12
$gbform=fread($fp,filesize("./template/gbform.html"));//13
fclose($fp);//14
if($submit){//15
$error="";//16
$gbform=str_replace("[nick]",$nick,$gbform);//17
$gbform=str_replace("[email]",$email,$gbform);//17
$gbform=str_replace("[mess]",$mess,$gbform);//17
$gbform=str_replace("[site]",$site,$gbform);//17
if($nick=="")//18
$error.="Вы должны ввести свое имя!<br>";//18
if($email=="")//18
$error.="Вы должны ввести свой email!<br>";//18
if($mess=="")//18
$error.="Вы должны ввести свое сообщение!<br>";//18
if($error!="")//19
$gbform=str_replace("[error]","<div>$error</div>",$gbform);//19
else{
$mes11=file("messages.txt");//20
$value=$mes11[count($mes11)-1];//20
$info=split("----",$value,6);//20
$LAST_ID=$info[0];//20
$gbform=str_replace("[error]","<font>Ваше сообщение успешно добавлено!Сейчас страница будет обновлена<meta http-equiv='refresh' content='0'></font>",$gbform);//21
$datetime=date("Y/m/d H:i");//22
$id=$LAST_ID+1;//23
$fp=fopen("messages.txt","a");//24
fwrite($fp,"$id----$nick----$email----$site----$mess----$datetime\n");//25
fclose($fp);//26
}
echo $gbform;//27
}
else{
$gbform=str_replace("[error]","",$gbform);//28
$gbform=str_replace("[nick]","",$gbform);//28
$gbform=str_replace("[email]","",$gbform);//28
$gbform=str_replace("[mess]","",$gbform);//28
$gbform=str_replace("[site]","",$gbform);//28
echo $gbform;//28
}
require "footer.php";
А теперь обьяснение кода:
1.Загружаем функцией file каждую строчку файла messages.txt в массив $mes1
2.В этом цикле мы сортируем сообщения таким образом:недавно добавленные вверху, позже добавленные внизу.А делаем мы это след.образом:мы создаем новый массив $mes и в цикле его 0 элементу присваиваем последний элемент $mes1, 1 элементу присваиваем предпоследний элемент $mes1 и.т.д.
3.Загружаем каждую строчку файла с описанием смайликов в массив $smiles
4.Запускаем цикл, выводящий все сообщения.
5.Проверяем строчку на пустоту, если в ней присутствует разделитель ----, то это строка с сообщением.Если нет, то пропускаем эту итерацию цикла оператором continue
6.Для облегчения работы с данными, текущее сообщение хранится в переменной $value.
7.Разделяем $value на 6 частей(посмотрите в каком формате у нас находится сообщение в файле выше) сепаратором ----.
8.Формируем верхнюю строчку сообщения гостевой из получившегося после разделения $value массива $info.В нем хранится вся инфа о сообщении.
9.Присваиваем переменной $downline сам текст сообщения.
10.В этом цикле мы проходим весь массив $smiles, разделяем его элементы на 2 части сепаратором <<>> и получаем две переменных $smile, в которой храниться код смайлика(например ":(" ) и $img в которой находится путь к картинке этого смайла.Затем мы заменяем в сообщении все коды смайлов на эквивалентные им картинки и закрываем цикл.
11.Выводим получившуюся запись в гостевой книге
12,13,14.записываем в переменную $gbform данные из файла-шаблона gbform.html
15.Здесь начинается блок добавления сообщения.Мы проверяем наличие переменной $submit, наличие которой свидетельствует о передавании одним из методов в программу данной переменной вместе с другими данными.Проще говоря это нажатие кнопки "Отправить сообщение".
16.Создаем спец. переменную $error в которую будет записывать сообщения об ошибках.
17.Заменяем кл.слова на их значения, введенные пользователем
18.Проверяем наличие и НЕ пустоту Ника, E-мэйла, Сообщения.Если один из пунктов отсутствует, мы прибавляем к переменной $error сообщение о необходимости заполнения данного поля.
19.Если переменная $error не пустая, то выводим её на форме добавления вместо кл.слова [error] и не добавляем сообщение.
20.Если перемення $error пустая, то продолжаем работу и добавляем сообщение.Для начала определяем номер у последнего добавленного сообщения.
21.Заменяем кл.слово [error] на сообщение об успешном добавлении записи в гостевую.
22.Определяем дату и время в нужном формате.
23.Определяем номер этого сообщения, для этого прибавляем к определенному номеру последнего сообщения единицу.
24.Открываем файл с сообщениями для записи.
25.Записываем туда строку в особом формате.
26.Закрываем файл с сообщениями
27.Выводим форму для добавления сообщения.
28.Опустошаем поля формы и выводим снова форму для добавления сообщения.
Вот и все.Если остались какие-то вопросы, то пишите их в комментариях к статье.Получившийся на данный момент сайт вы можете скачать в разделе "Скрипты" в категории "Книжные".
В следующей части статьи мы добавим в статью распознаватель BB-кодов и начнем проверять входные данные на предмет html тегов и других пакостей.
Лента материалов
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.
Сейчас обсуждают