Пишем гостевую книгу
Наверняка каждому из вас не раз хотелось узнать, что думают о Вашем сайте Ваши посетители. И Вы наверняка уже искали в Интернете различные php скрипты, и довольно часто сталкивались с тем, что большинство таких скриптов используют базы данных, что затрудняет ее применение на бесплатных хостингах, где поддержка баз данных осуществляется только за $$.
Поэтому я пришел к выводу, что лучшая гостевая книга та, которую напишешь сам. Я отталкивался от того, что гостевая книга должна работать без поддержки баз данных, используя самый слабенький хостинг и самую старую версию PHP движка.
Опишу наперёд все минусы и плюсы этой гостевой книги.
- Переносимость. Вся база сообщений храниться в одном файле, который может быть с легкостью скопирован в архив или еще куда-нибудь.
- Легкость. PHP скрипт занимает всего 12 килобайт. Даже на слабой машине такой код будет «летать»
- Многофункциональность. Делалось «для себя», поэтому добавлены такие удобные вещи как СМС и Приват сообщения.
- В гостевой книге используется в качестве базы текстовый файл, поэтому не требуется поддержка баз данных и прочих наворотов.
Итак, если Вам всё еще интересно как она работает, приступим.
Прежде всего нужно рассказать её общий принцип работы. Скрипт гостевой состоит из двух частей: основной и дополнительный. Основной скрипт гостевой умеет всего на всего отображать сообщения, форматировать их и корректно выводить смайлики. Эта часть скрипта будет вызываться каждый раз при доступе к гостевой книге. Дополнительная часть скрипта добавляет записи в базу, отправляет СМС'ки (необходима поддержка моб. оператора), и отправляет по почте Приват сообщения. А теперь подробно о работе каждого из них.
Основной модуль.
Основной модуль выполняется при отображении записей гостевой книги. Вызывается только если переменная скрипта $go пустая!
Сначала нам нужно отобразить вверху страницы саму форму для сообщений.
echo "
<script language=JavaScript>var ico;function smile(ico) {document.guest.mess.value=document.guest.mess.value+ico;}</script>
<body bgcolor=\"#D6DFEF\">
<form action=\"guestbook.php?go=add\" method=post name=guest>
<center>
<TABLE border=0 style=\"border: 1px solid #C2CBDB \" width=\"150\" height=\"100\">
<TR>
<TD bgcolor=\"#C2CBDB\" align=center colspan=2>
<I><B><font size=4 color=\"#000000\">Отправка сообщения</font></B></I>
</TD></TR>
<TR>
<TD>
Автор: <INPUT TYPE=\"text\" style=\"BORDER-BOTTOM: 1px solid; BORDER-LEFT: 1px solid; BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; BACKGROUND:#D6DFEF\" SIZE=\"10\" VALUE=\"\" NAME=nick>
E-mail: <INPUT TYPE=\"text\" style=\"BORDER-BOTTOM: 1px solid; BORDER-LEFT: 1px solid; BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; BACKGROUND:#D6DFEF\" SIZE=\"15\" VALUE=\"\" NAME=mail>
Тип сообщения:
<SELECT NAME=type style=\"BORDER-BOTTOM: 1px solid; BORDER-LEFT: 1px solid; BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; BACKGROUND:#D6DFEF\">
<OPTION SELECTED>Сообщение
<OPTION>Приват
<OPTION>SMS
</SELECT><BR>
<textarea name=mess rows=9 cols=63 style=\"BORDER-BOTTOM: 1px solid; BORDER-LEFT: 1px solid; BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; BACKGROUND:#D6DFEF\">
</textarea>
<align=\"right\">
<input style=\"border: 1px solid #C2CBDB; BACKGROUND:#C2CBDB \" type=\"submit\" value=\"Отправить\" name=\"add\" >
</TD>
<TD>
После чего вставляем таблицу со смайлами:
<TABLE border=0 style=\"border: 1px solid #C2CBDB \">
<tr>
<td width=22 height=22 align=center valign=middle><a href=\"JavaScript: smile(' :smile: ');\"><img src=img/smile.gif border=0 width=15 height=15></a></td>
…
<td width=22 height=22 align=center valign=middle><a href=\"JavaScript: smile(' :cry: ');\"><img src=img/cry.gif border=0 width=15 height=15></a></td>
<td width=22 height=22 align=center valign=middle><a href=\"JavaScript: smile(' :evil: ');\"><img src=img/evil.gif border=0 width=15 height=15></a></td>
</tr></table>
</TD>
</TR></TABLE><BR>
";
Дальше всё просто. Формат базы такой, что каждая следующая ячейка базы находиться в новой строке, поэтому считываем эти строки, форматируем и запоминаем.
$cnt=0;
// Говорим о том, что все данные лежат тут:
$base=file("base.dat");
$work=0;
$out='';
$ready='';
// Кол-во строк в файле:
$num=count($base);
$curr=-1;
//Начинаем считывать текст, попутно форматируя его.
while ($cnt<$num)
{
$curr++;
$str=$base[$cnt];
$out=$out."<table width=100%>\n";
$out=$out."<TR><TD bgcolor=\"#C2CBDB\" align=left><font size=2>\n";
$out=$out."Номер: ".$str." / ";
$cnt++;
$str=$base[$cnt];
$out=$out."Автор: <a href=\"mailto:".$str."\">";
$cnt++;
$str=$base[$cnt];
$out=$out.$str."</a> / \n";
$cnt++;
$str=$base[$cnt];
$out=$out.$str." / \n";
$cnt++;
$str=$base[$cnt];
$out=$out."Дата: ".$str."</TD></TR>\n";
$cnt++;
$str=$base[$cnt];
$out=$out."<TR><TD align=left>\n";
$out=$out.$str.$br;
$out=$out."</TD></TR></Table>\n";
// Собираем в массив все записи
$records[$curr]=$out;
$out='';
$cnt++;
}
Нулевой странички у нас нет, поэтому если она нулевая, присваиваем значение 1.
if ($page==0) {$page=1;};
Важная часть программы. Эта процедура заменяет названия смайлов на их ссылки к рисункам (а также маты на звездочки и т.д.)
function replace ($string)
{
$exech="autochange.dat";
$string = " ".$string;
$autochange = file ($exech);
$lines = count ($autochange);
for($i=0;$i<$lines;$i++)
{
list($change1,$change2)=explode("|", $autochange[$i]);
$string = eregi_replace("$change1","$change2",$string);
}
return trim($string);
}
Проверяем на какой мы находимся странице и выводим соответствующие записи
while ($curr>-1) {
if ($curr<(count($records)-$rpp*($page-1)) and $curr>=(count($records)-$rpp*($page))) {
$out=$out.$records[$curr];
$out=replace($out);
}
$curr=$curr-1;
}
низу страницы выводим ссылки на все станицы гостевой книги
echo "<TABLE border=0 style=\"border: 0px solid #C2CBDB\" width=\"100%\">";
echo "<TR><TD bgcolor=\"#C2CBDB\" align=center>";
While ($curr<count($records)) {
$pp++;
$curr=$curr+$rpp;
if ($pp==$page) {echo "<B>$page</B> ";} else {
echo "<a href=guestbook.php?page=$pp>$pp</a> ";
};
};
echo "</font></B></I></TD></TR>";
Дополнительный модуль
Выполняется, только если переменная $go равна «add».
Дальнейшие действия зависят от переменной $type. (Тип сообщения)
СМС:
@mail("380670000000@2sms.kyivstar.net",$mail,$nick.":".$mess);
@mail("380670000000@2sms.kyivstar.net","HomePage","Trying to send sms for you!".$ip);
Следующие функции отправляют СМС на мобильные телефоны.
Внимание! Эти функции доступны только при поддержке моб. оператора. Позвоните своему оператору и узнайте, как с простого e-mail послать СМС на телефон. Полученный адрес впишите вместо 380670000000@2sms.kyivstar.net
Сообщение:
Сообщаем себе на телефон (или куда угодно на почтовый ящик) о новом сообщении
@mail("380670000000@2sms.kyivstar.net","HomePage","New item in your guestbook!".$ip);
Следующая часть кода расчитана на всяких уродов, которые любят ламать гостевые книги портя нам при этом настроение. Поэтому все "опасные" символы мы заменяем на спец. сиволы html
$mess = stripslashes($mess);
$mess = ereg_replace("<","<",$mess);
$mess = ereg_replace(">",">",$mess);
$mess = ereg_replace('\\\"',""",$mess);
$mess = ereg_replace("!","!",$mess);
$mess = ereg_replace("\r","",$mess);
$mess = ereg_replace("\n","<br>",$mess);
$mess = ereg_replace("%","%",$mess);
$mess = ereg_replace("^ +","",$mess);
$mess = ereg_replace(" +$","",$mess);
$mess = ereg_replace(" +"," ",$mess);
Открыли базу и дописали в конец новое сообщение:
$base=file("base.dat");
$count=round(count($base)/6);
$base=fopen("base.dat","a");
fputs($base,$count.$br.$mail.$br.$nick.$br.$ip.$br.$dd.$br.$mess.$br);
Приват:
Отправили себе на ящик приват сообщение, и заодно напоминание об этом на телефон:
@mail("JeyDee@fm.com.ua","HomePage",$nick.$br.$mail.$br.$ip.$br.$date.$br.$mess.$br);
@mail("380670000000@2sms.kyivstar.net","HomePage","New item in your private guestbook!".$ip);
Вывод
Написать гостевую книгу не так и сложно, как может показаться на первый взгляд. Самое главное определиться с требованиями к гостевой. Остальное – дело техники.
В следующей статье я подробно расскажу как можно написать модуль администрирования гостевой книги, и как реализовать функции ответа на сообщение. (Как я отвечаю на сообщения смотри на моём сайте www.jeydee.iatp.org.ua).
Со всеми вопросами и замечаниями обращайтесь по адресу JeyDee@fm.com.ua, или пишите в гостевой ;-)
Удачи!
Скачать гостевую можно в разделе «Загрузка»
© LS[Jey] / LineSoft creative group