Гостевая книга на PHP. Как управлять сообщениями с гостевой книги Phoca Guestbook Мысль guest book html

На тему создания гостевых книг было написано большое количество статей, однако большинство из них раскрывали процесс написания не полностью, а частично. К тому же, написанные книги были максимально просты, и не могли ничего, кроме как добавлять сообщения. В данной статье я постараюсь подробно описать процесс создания гостевой книги с неплохим набором функций. Гостевая книга написана на PHP с использованием текстовых файлов для хранения данных.

Итак, прежде всего нам необходимо разобраться с файлами. Их у нас будет четыре, хотя можно объединить и в один, но это уже вам решать…

Файл №1 — guestbook.inc.dat

Создадим его, оставим пустым, и укажем ему права (0777-*nix, rwx/rwx/rwx)

Сюда будут записываться все сообщения… Да-да!!! Именно в один файл! Но не пугайтесь. Мной лично проверялось на всеми известном сервере WallSt. база данных размером в 5, 10, 100, 250, 500, 1000 Кб! Торможения были только на 1000 Кб книге, поверьте, это более 3000 средних записей! Вам хватит ее с лихвой.

Файл №2 – config.inc

Файл №3 – gb.php

Guestbook

*Имя:
E-mail:
*Сообщение:

$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

", ">", $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, которые помогут вашим посетителям несколько разнообразить сообщения в гостевых книгах 🙂

1. На бесплатном хостинге есть только то, что дают.
2. Лучше, но совсем не обязательно. Порядочный гость оставит сообщение так как нужно (через мою форму), а хороший хакер все равно обойдет ваши $_GET, $_POST, $_COOKIE и $HTTP_REFERER тоже.
3. Контроль длины производиться, но только неявно, самой БД (единственно, что только само сообщение может быть огромно - до 64Кб).
4. Да, есть, HtmlSpecialChars была использована, не использовал AddSlashes (и это большая ошибка, признаю свою вину, см. ниже). При в ключеной magic_quotes_gpc, данная проблема не столь остра, но дыра в безопасности остается (в панели управления).
5. Да, согласен, можно было бы и вырезать, но имя #$@%#$^%$ ничем не хуже чем AF4ETX09T43 . В e-mail и url есть дырка, можно использовать скрипты.
6. Интересно, что не неинициализировано?

Есть еще ряд интересных приемов, как например защита от автоматического ввода через картинку (как на этом сайте) http://www.сайт/webmast/php/Security-Images-in-PHP/
...

Картинок кажется небыло, зачем усложнять демонстрационный пример. Пока ни разу не встречал гостевой с подобной защитой. Что касается этого сайта, то это не гостевая.

Анатомия межсайтового скриптинга XSS
http://www.woweb.ru/index.htm/id/1073393942

Очень интересно, спасибо.

З.Ы. Если бы Аффтор потрудился бы почитать (и вниктуть) в статьи что на этом же сайте, то понял бы, на сколько его труд непрофессионален. Стоит учитывать опыт предыдущих Авторов и, по крайней мере, уважать их труды - они же для вас писали.

Где есть не уважение? Извините если кого обидел.

Что касается защиты, то советую еще раз прочесть первый абзац статьи, я не ставил цели расматривать надежную гостевую, а лишь показать как можно написать протейшую гостевую, для тех кто только начинает познавать CGI, ведь не все сразу приходит, надо начинать с простого, и ты тоже не сразу стал таким умным, тоже совершал ошибки, так что давай оставим аспекты защиты другим статьям, другим авторам.

Да, с точки зрения защиты этот скрипт непрофессионален, и я непрофесионал в области защиты, поэтому в первом абзаце и стоит соответвующая оговорка, которую, к сожалению не все прочли.

PS

Цитата:

Закон "Об авторском праве и смежных правах"
Статья 6. Объект авторского права. Общие положения
1. Авторское право распространяется на произведения науки, литературы и искусства, являющиеся результатом творческой деятельности, независимо от назначения и достоинства произведения, а также от способа его выражения.
Остальное можешь прочесть тут: http://www.febras.ru/~patent/copyright/2_3part2.html
В том числе и Статья 9. п.1
И не тебе решать пользоваться мне моим правом или нет.

» » @lexGuestbook

@lex Guestbook – это бесплатный PHP guestbook скрипт для сайтов. Написанный на языке PHP, @lex Guestbook легко устанавливается за считанные минуты, даже новичкам будет легко разобраться.

PHP guestbook полностью бесплатный скрипт – основное условие: не убирать копирайт в низу страницы. PHP guestbook устанавливается на ваш сервер и полностью независим от каких-либо других сайтов. Резервное копирование сообщение в PHP guestbook по вашему желанию, хоть каждый день. Автоматическая установка Alex Guestbook : название таблиц в БД прописываются сами.

Преимущества скрипта.

  • Благодаря скинам, вы можете изменять внешний вид @lexGuestbook под дизайн вашего сайта. (все скины валидные XHTML 1.0 Transitional)
  • В PHP guestbook встроено около 20 языков.
  • У каждой страны, отображается свой флаг.
  • Поддержка смайликов: возможность добавить свои смайлики, удалить, редактировать.
  • Отображается статистика символов: вы можете задать максимальное количество букв в одном сообщении.
  • Внутренняя поисковая система.
  • Возможность оценки со стороны посетителей. Оценка по 10-ти бальной системе.

Поддерживаемые языки

Полный перевод.
Французский, Английский, Польский, Немецкий, Норвежский, Итальянский, Голландский язык, Словацкий, Персидский, Турецкий.

Частичный перевод. Некоторые слова по-прежнему на английском.
Испанский, Русский, Шведский, Чешский, Хорватский, Португальский, Исландский, Сербский, Датский.

» DRBGuestbook

Гостевая книга DRBGuestbook – это бесплатный, простой PHP скрипт, который не требует БД MySql. Не смотря на это, вы можете управлять программой, удалять сообщения, одобрять сообщения, банить пользователей по IP адресу, через защищенную паролем панель администратора. Скрипт так же включает себя анти-спам проверку, такую как image verification, блокировку URL и модерирование всех сообщение в книге. Можно установить функцию, что каждый раз, когда кто-то оставляет сообщение, вы будете получать уведомление на e-mail.

Преимущества скрипта.

  • Быстрая и лёгкая установка.
  • Не требует БД MySQL. Все сообщения хранятся в файле.
  • Можно удалить множество сообщений за один раз.
  • Содержит анти-спам проверку.
  • Можно забанить IP адрес, чтобы не смогли оставлять сообщения.
  • Поддерживает модерацию сообщений, так, что только одобренные сообщения будут публиковаться.
  • Получайте уведомление на почту, каждый раз, когда кто-то подписал вашу гостевую книгу.
  • Проверка сообщение: список «запрещенных» (матерных) слов к публикации.
  • Функция анти-флуд. Чтобы пользователи не публиковали сообщения так часто.
  • Скрипт предотвращает публикацию HTML кодов или ссылок (URL) в теле сообщения, в качестве анти-спам предосторожности.
  • Настройка минимум и максимум букв в одном сообщении.
  • Скрипт можно легко настроить: сообщения об ошибке, предупреждения, дата и время.
  • Дата и часовой пояс легко настраивается.
  • Генерируемые страницы содержат синтаксис XHTML и прекрасно работают в браузерах IE и Firefox.
  • Вход в панель администратора через веб – интерфейс.

Системные требования

  • PHP версия 4.4 или выше
  • GD library
  • Apache HTTP Server с файлом.htaccess с функцией Override Allowed (рекомендовано)
  • Linux, Windows, Unix, Mac OSX, Sun Solaris, IIS

– компонент гостевой книги для Joomla! Простой и лёгкий в управлении компонент гостевой книги с Captcha, в настройках компонента вы можете определить запрещенные слова, которые не будут отображаться, защититься от автоматической публикации не желательных сообщений можно также включив дополнительно модерацию сообщений.

  • Для управления компонентом и сообщениями Вам требуется через административную панель сайта войти со своим логином и паролем.

  • На панели управления находите вкладку «Компоненты», наводите на неё курсор и из выпадающего списка выбираете интересующий Вас компонент, в данном случае нас интересует компонент гостевой книги «Phoca Guestbook» и так как материал о том, как управлять сообщениями, нажимаем на закладку «сообщения».

  • В новом открывшемся окне «Сообщения», Вы увидите все сообщения гостевой книги. Неопубликованные сообщения помечены красным кружком.
    Вы можете:
  1. опубликовать неопубликованное сообщение, нажав на красный кружок;
  2. опубликовать неопубликованное сообщение, поставив галочку напротив сообщения и вверху нажать на кнопку «Опубликовать»;
  3. сначала прочитать неопубликованное сообщение, при необходимости отредактировать его;
  4. создать сами новое сообщение.

  • Для того чтобы прочитать сообщение гостевой книги, нажмите на тему сообщения. Откроется страница редактирования сообщения «Сообщение: [редактировать]». Если сообщение не спам, то Вы можете в колонке справа «Настройки публикации», выбрать «Опубликовано» и нажать на кнопку «Сохранить» или «Сохранить и закрыть».

  • Для того чтобы создать новое сообщение гостевой книги, нажмите на кнопку «Создать» (оранжевый крестик). Откроется форма создания сообщения «Сообщение: [редактировать]».
  • Заполняете поля: Тема и Имя пользователя. Затем обязательно выберете название гостевой книги в поле «Гостевая книга», вписываете текст сообщения, в колонке справа «Настройки публикации», выбрать «Опубликовано» и нажать на кнопку «Сохранить» или «Сохранить и закрыть». После этого сообщение появится на сайте.