Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование для начинающих и не только


Информационный Канал Subscribe.Ru

По материалам сайта www.jeydee.iatp.org.ua

www.gigabyte.iatp.org.ua - Новости сайта

На сайте открыта тестовая версия сервиса для On-line проверки правильности ссылок Вашего Сайта - LinkInspector

Пишем гостевую книгу

Наверняка каждому из вас не раз хотелось узнать, что думают о Вашем сайте Ваши посетители. И Вы наверняка уже искали в Интернете различные 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("<","& lt;",$mess);
$mess = ereg_replace(">","& gt;",$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.

Удачи!

(c) LS[Jey] / LineSoft creative group
JeyDee@fm.com.ua
www.jeydee.iatp.org.ua


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.programmershelp
Отписаться

В избранное