Пишем гостевуху

warlock

Новичок
Репутация
0 / 411
Наверняка каждому из вас не раз хотелось узнать, что думают о Вашем сайте Ваши посетители. И Вы наверняка уже искали в Интернете различные 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>

<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=\"java script: 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=\"java script: 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=\"java script: smile(' :evil: ');\"><img src=img/evil.gif border=0 width=15 height=15></a></td>
</tr></table>
</TD>
</TR></TABLE>

"; 
Дальше всё просто. Формат базы такой, что каждая следующая ячейка базы находиться в новой строке, поэтому считываем эти строки, форматируем и запоминаем.
Код:
$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;};
Важная часть программы. Эта процедура заменяет названия смайлов на их ссылки к рисункам (а также маты на звездочки и т.д.)
Код:
$cnt=0;
// Говорим о том, что все данные лежат тут:
$base=file("base.dat");
$work=0;
$out='';
$ready='';
// Кол-во строк в файле:
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("mailto:[email protected]);
@mail("mailto:[email protected] to send sms for you!".$ip); 
Следующие функции отправляют СМС на мобильные телефоны.

Внимание! Эти функции доступны только при поддержке моб. оператора. Позвоните своему оператору и узнайте, как с просто e-mail послать СМС на телефон. Полученный адрес впишите вместо [email protected].
  
Сообщение:
Сообщаем себе на телефон (или куда угодно на почтовый ящик) о новом сообщении
Код:
@mail("[email protected]","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","
",$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("[email protected]","HomePage",$nick.$br.$mail.$br.$ip.$br.$date. $br.$mess.$br); 
@mail("[email protected]","HomePage", "New item in your private guestbook!".$ip);
Вывод:
Написать гостевую книгу не так и сложно, как может показаться на первый взгляд. Самое главное определиться с требованиями к гостевой. Остальное – дело техники.

</div>
 
Сверху