Бдительный guest book html. Скрипт гостевой книги на PHP
На тему создания гостевых книг
было написано большое количество статей, однако большинство из них раскрывали процесс написания не полностью, а частично. К тому же, написанные книги были максимально просты, и не могли ничего, кроме как добавлять сообщения. В данной статье я постараюсь подробно описать процесс создания гостевой книги с неплохим набором функций. Гостевая книга
написана на PHP с использованием текстовых файлов для хранения данных.
Итак, прежде всего нам необходимо разобраться с файлами. Их у нас будет четыре, хотя можно объединить и в один, но это уже вам решать…
Файл №1 — guestbook.inc.dat
Создадим его, оставим пустым, и укажем ему права (0777-*nix, rwx/rwx/rwx)
Сюда будут записываться все сообщения… Да-да!!! Именно в один файл! Но не пугайтесь. Мной лично проверялось на всеми известном сервере WallSt. база данных размером в 5, 10, 100, 250, 500, 1000 Кб! Торможения были только на 1000 Кб книге, поверьте, это более 3000 средних записей! Вам хватит ее с лихвой.
Файл №2 – config.inc
$gb_on_page = "10";//кол-во мессаг в гостевой на стр.
$name_max_size = "15"; // максимальная длина ника
$email_max_size = "50"; // максимальная длина мыла
$message_max_size = "1000";//максимальная длина сообщения
$recipient ="Name.Sirname@email.zone";
$subject = "Новое сообщение на сайте";
$site_name = “Ваш сайт”;
?>
Файл №3 – gb.php
Guestbook
include("config.inc"); ?>
$data=file("guestbook.inc.dat");
$c=count($data);
$page=$_GET["page"];
if (!isset($page)) { $page=0; }
for ($i=$page*$gb_on_page;$i<$page*$gb_on_page+$gb_on_page;$i++)
{
if($i>$c-1)break;
list($name,$email,$date,$time,$guesttext)=split(":::","$data[$i]", 5);
/* я нарочно не стал делать супер_мега_навороченных дизайнов, я лишь ограничусь простым выводом текста! Кому надо, тот легко поймет, что нужно делать! Кто не поймет, мыло будет ниже, посему читайте дальше… */
echo "$name @ [$date, $time] $guesttext ";
}
$col=$c/$gb_on_page;
echo "
";
if ($c<$gb_on_page){ echo ""; }
else {
echo "Страницы: ";
/* Здесь такая штука, что если можно перейти на предыдущую страницу, то показывается примерно что то вроде этого:) << 2 */
if($c>$gb_on_page & $page>0){ echo "<<"; }
/* Ниже функция, которая отвечает за вывод нумерации страниц с сообщениями… */
for($i=0;$i<$col;$i++)
{
if(($i)!=$page)echo "[".($i+1)."] ";
else echo "".($i+1).""." ";
}
}
/* Здесь такая штука, что если можно перейти на следующую страницу, то показывается примерно что то вроде этого:) 1 >>*/
if($c>$gb_on_page & $page<$col-1){ echo ">>"; }
echo " Всего сообщений: $c";
echo "
";
?>
Файл №4 — gbadd.php
include("config.inc");
/* укажем, что данные должны передаться скрипту из формы... иначе можно было бы отправить сообщение примерно таким образом:
http://myhost.ru/gb/gbadd.php?name=admine&email=you@#admin.com&guesttext=message_have_been_posted спасибо CompDocs */
$name=$_POST["name"];
$email=$_POST["email"];
$guesttext=$_POST["guesttext"];
if ($name !="" and $guesttext !="")
{
$date=date("d.m.Y");
$time=date("H:i");
// заменяем двоеточия
$guesttext = ereg_replace(":::",":::",$guesttext);
$name = ereg_replace(":::",":::",$name);
$email = ereg_replace(":::",":::",$email);
// разрешим только шрифты, картинки и списки
// теги как украшение
$guesttext = ereg_replace("<", "<", $guesttext);
$guesttext = ereg_replace(">", ">", $guesttext);
$name = ereg_replace("<", "<", $name);
$name = ereg_replace(">", ">", $name);
$email = ereg_replace("<", "<", $email);
$email = ereg_replace(">", ">", $email);
// нет кавычкам! 2=DeaD= thanX!
$name = ereg_replace(""", """, $name);
$email = ereg_replace(""", """, $email);
$guesttext = ereg_replace(""", """, $guesttext);
// удаление лишних пробелов
// в центре
$guesttext=ereg_replace(" +"," ",$guesttext);
$name=ereg_replace(" +"," ",$name);
$email=ereg_replace(" +"," ",$email);
//cправа и слева
$name=trim($name);
$email=trim($email);
$guesttext=trim($guesttext);
// перевод строки
$guesttext = ereg_replace("n", " ", $guesttext);
// чтобы весь текст был на одной строке!
$guesttext = ereg_replace("r", "", $guesttext);
// мегакавычки
$name = stripslashes($name);
$email = stripslashes($email);
$guesttext= stripslashes($guesttext);
// правильные тире
$guesttext = preg_replace ("/{1,}-{1,}/", " - ", $guesttext);
$guesttext = preg_replace ("/^- /", "- ", $guesttext);
// число-число
$guesttext = preg_replace ("/(d)-(d)/", "\1–\2", $guesttext);
// слова с дефисом
$guesttext = preg_replace ("/(S+)-(S+)/", "\1-\2", $guesttext);
// частицы и предлоги
$guesttext = preg_replace ("/([А-Яа-яA-Za-z]) (ли|ль|же|ж|бы|б)([^А-Яа-яA-Za-z])/", "\1 \2\3", $guesttext);
$guesttext = preg_replace ("/(s)([А-Яа-я]{1})s/", "\1\2 ", $guesttext);
// A.C. Пушкин
$guesttext = preg_replace ("/([А-ЯA-Z])([. ]{1}){0,1}([А-ЯA-Z])([. ]{1}){0,1}([А-ЯA-Z][А-Яа-яA-Za-z]*)/", "\1. \3. \5", $guesttext);
// Пушкин А. С.
$guesttext = preg_replace ("/([А-ЯA-Z][А-Яа-яA-Za-z]*) ([А-ЯA-Z])[. ]{1}{0,1}([А-ЯA-Z]).([,)]{1})/", "\1 \2. \3.\4", $guesttext);
// преобразовываем адреса в ссылки!
$guesttext = eregi_replace("([_a-z0-9-]+(.[_a-z0-9-]+)*@+(.+)*(.{2,3}))", "\0", $guesttext);
$guesttext = eregi_replace("((ht|f)tp://www.|www.)(+(.+)*(.{2,3})((/|?)*)*)", "http://www.\3", $guesttext);
$guesttext = eregi_replace("((ht|f)tp://)(((+(.+)*(.{2,3}))|(({1,3}.){3}({1,3})))((/|?)*)*)", "\0", $guesttext);
// делаем "обрезание" слишком большого куска информации
$name=substr($name,0,$name_max_size);
$email=substr($email,0,$email_max_size);
$guesttext=substr($guesttext,0,$message_max_size);
// BBcodes
$guesttext = ereg_replace("[b]", "", $guesttext);
$guesttext = ereg_replace("", "", $guesttext);
$guesttext = ereg_replace("[i]", "", $guesttext);
$guesttext = ereg_replace("", "", $guesttext);
$guesttext = ereg_replace("[u]", "", $guesttext);
$guesttext = ereg_replace("", "", $guesttext);
$guesttext = ereg_replace("", "", $guesttext);
$guesttext = ereg_replace("", "", $guesttext);
$guesttext = ereg_replace("", "", $guesttext);
$guesttext = ereg_replace("", "", $guesttext);
$guesttext = ereg_replace("", "", $guesttext);
$guesttext = ereg_replace("", "", $guesttext);
$guesttext = ereg_replace("", "", $guesttext);
$guesttext = ereg_replace("", "", $guesttext);
// отправка сообщения на мой электронный адрес
// сообщение
$message .="".$date.", ".$time." n";
$message .="Имя: ".$name.", e-mail: ".$email."nСообщениеn";
$message .="".$guesttext."n ";
$message .="----------rn";
$message .="Сообщение из гостевой книги";
// заголовки
$headers .="From: $site_name <$recipient>n";
$headers .="X-Mailer: Pseon’s Guestbookn";
$headers .="X-Priority: 1n";
$headers .="Content-Type: text/plain; charset=windows-1251n";
// отправляем все нафиг!
mail($recipient, $subject, $message, $headers);
$msg="$name:::$email:::$date:::$time:::$guesttext ";
$lines = file("guestbook.inc.dat");
$fp = fopen("guestbook.inc.dat", "w");
fwrite($fp, "$msgn");
for ($i = 0; $i < count($lines); $i++)
{
@fwrite($fp, "$lines[$i]");
}
fclose($fp);
clearstatcache();
}
// если не удалось, отсылаем его обратно!
else
{
header("Location: gb.php");
}
?>
Ну а теперь банановый 🙂 На закуску хочу предложить вам набор BB-codes, которые помогут вашим посетителям несколько разнообразить сообщения в гостевых книгах 🙂
A guest book can be a great way for your website visitors to make a permanent impression on their presence on your website without being too intrusive. Before you start thinking about the HTML source for a guestbook, you need to decide how you want it to flow and how you want it look. In this case we will look at a guestbook that places a form for users to sign at the top. Below that there will then be a list of all the comments posted by the readers.
The HTML Source Code
The HTML source for our guestbook will consist of a web form and a list of DIV containers which will hold the display for the signed comments. The Part of the code that will handle the form is a simple as this.