Гостевая книга Joomla — Phoca Guestbook. Пишем скрипт гостевой книги Установка и русификация Phoca Guestbook

» » @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-ти бальной системе.

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

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

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

For HTML codes, guestbook programming might seem unchallenging at first, and rightly so. When you see a guestbook, basic information is requested and it appears that anyone with a fundamental knowledge of the HTML programming language can write guestbook HTML codes. However, guestbooks, from the best to the worst, require a bit more skill than you think.

What is a Guestbook?

A guestbook is an online way to let visitors to your site comment or request information. Most guestbooks post what is written to the webpage so that everyone can read guest comments. The most common items you see on a guestbook are:

  • Name or Username
  • Where they reside (though you can set the HTML code to hide this fact)
  • Email (again, you can hide this fact and have it sent only to your email for communication purposes
  • Comments
  • Some guestbooks forego a comments section for a quick survey. You can usually find questions like "What did you think of this site: good, decent, bad, awesome" or "Was the information provided: enough, not enough, just right"
  • Options to request a reply or other information
Related Articles

Guestbooks can be programmed to send this information to an email address of your choice so that you don"t have to continually log into the site to view guestbook entries.

Where to Find HTML Codes, Guestbook

Whether you know HTML programming, you are a beginning web designer or you simply want a guestbook on your site, using prewritten HTML codes can save you time. The codes you can find online are typically well-tested and provide the most basic programming needed for easy-to-use guestbooks.

  • The code at HTML Comment Box provides the basic outline of an HTML code guestbook. All you need to do is customize the text to your needs and for your domain name. Instructions are provided at the beginning of the page. The code includes lines for name and address.
  • For a large selection of HTML codes and scripts, visit . With such a varied and large selection, you should be able to find one that works into the website you are creating. You can choose from basic guestbooks to more advanced programming that includes drop down menus and code for Macs and Linux machines. The codes are only 30-day free trials, so if you find a set of codes you like you"ll have to pay for the full use.
  • At Freebok you can input some basic information about what text you want on your guestbook and the website will generate the code for you. Afterwards, you can customize the guestbook even more by creating a template and editing the code in Freebok"s template layout mode. Other instructions are available on the site to help you with certain links you may need. You do need to sign up for an account in order to use Freebok.
  • To quickly add a guestbook with just a comment box, go to Guestbook Code . The initial code is already generated, but there are five options you can check and uncheck in order to alter the code slightly:
    • Collapse Guest Book. This includes a link that can open and close the guestbook on the webpage you insert it on.
    • Put Guest Book At Top. If this is unchecked, the guestbook and comment box will appear below any entries in the list.
    • Show Submission Date of Entries. This will add a date and time. The time will be the user"s local time zone, not yours.
    • Profanity Filter. Deletes any profanities that people may write.
    • You can also change the number of comments that are posted to the page for others to read. Minimum is one and maximum is one hundred. It"s recommended that you set it between five to twenty-five.

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
И не тебе решать пользоваться мне моим правом или нет.

На тему создания гостевых книг было написано большое количество статей, однако большинство из них раскрывали процесс написания не полностью, а частично. К тому же, написанные книги были максимально просты, и не могли ничего, кроме как добавлять сообщения. В данной статье я постараюсь подробно описать процесс создания гостевой книги с неплохим набором функций. Гостевая книга написана на 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, которые помогут вашим посетителям несколько разнообразить сообщения в гостевых книгах 🙂

Сегодня я опишу, пожалуй, лучшую задачу для новичков языка программирования PHP — Гостевая книга. На мой взгляд эта задача является наипростейшей, но при этом позволяет узнать все основные особенности работы с PHP и базой данных MySQL. Помимо этого, данная задача до бесконечности расширяема, что позволяет оттачивать новые технологии.

Описание и решение данной задачи будет написано сразу здесь, без проверок на работоспособность, поэтому, возможно, где-то есть опечатка. Сделано это не из-за моей лени, а опять таки из за дополнительной тренировки, при создании гостевой книги Вами. Так же представленное решение будет немного «кривовато», но об этом уже в конце данной статьи в разделе «Самостоятельная работа».

Если Вы совсем не знаете как работать с PHP, то для начала советую прочитать заметку PHP — с чего начать .

Мы будем разбирать создание самой примитивной гостевой книги, без дизайна и администрирования. Другими словами мы ограничимся входом в книгу, регистрацией ну и оставлением сообщений.
Из самой задачи становится понятно, что мы можем вполне ограничится тремя файлами php, для реализации данной задачи. Конечно задачку регистрации можно разбить на две: форма регистрации и добавления данных в базу, однако делать мы этого не будем. Аналогичные рассуждения допустимы и для процедуры оставления комментариев. Таким образом создаем три файла: index.php, registration.php, book.php.

По названиям файлов, можно сразу понять, за что они будут отвечать: index.php — страница входа, registration.php — страница регистрации, book.php — страница гостевой книги.

Самое простое в нашем случае это страница входа. Так как страница отвечает за ввод пары логина и пароля — на ней должна присутствовать форма для отправки этих данных на страницу book.php. А так же ссылка на страницу с регистрацией. Имеем:

Вход в гостевую книгу

Логин:
Пароль:

Регистрация

Немного отойдя от темы, для тех кто не вкусе что означает код выше. Здесь мы имеем голый HTML. Ключевым моментом является тег form который принимает два параметра action , который отвечает за адрес страницы, который откроется после подтверждения ввода данных, и параметр method , который отвечает каким способом данные формы будут отправляться на указанную страницу (см. POST и GET простыми словами). Внутри тега form указываются поля для ввода (input, select), которые обязательно должны иметь атрибут name . Именно по значению данного атрибута можно будет получить введенные пользователем данные на странице указанной в параметре формы action. Обязательно внутри формы должен находится input с типом submit , который по своей сути является кнопкой, по нажатию на которую и произойдет отправка данных на страницу action.

Продолжим… Теперь нам нужно создать страницу с регистрацией нового пользователя. Стоит сразу продумать, что именно мы хотим иметь. Я решил, что для простой гостевой книги будет вполне достаточно иметь пользователей с уникальными логинами, а так же знать адрес их Web сайта (если он есть). Раз мы определились с тем что мы хотим знать о пользователе, значит мы можем начать проектировать нашу базу данных.

Заходим в phpMyAdmin. Создадим там базу с именем gb. В данной базе создадим таблицу Users со следующими полями:

Login varchar(50) unique //логин пользователя, уникальное поле password varchar(150) //пароль www varchar(255) //адрес сайта

А раз мы уже зашли в редактор базы, то можно сразу и подумать о том как мы будем хранить сообщения. В нашем случае вполне подойдет знать кто и когда оставил сообщение, ну и собственно текст нашего сообщения. Так же для удобство стоит пронумеровать наши сообщения. С этим мы определились, значит можно смело создавать еще одну таблицу Messages со следующей структурой:

Id int ai(auto_increment) primary_key //номер сообщения, счетчик, который сам будет увеличиваться mes text //текст сообщения who varchar(50) //логин того, кто оставил сообщение when timestamp default(current) //время оставления сообщения, по умолчанию текущая дата и время

С базой данных разобрались. Теперь переходим к файлу registration.php. Подведя итог вышеизложенному имеем:

Регистрация

Логин:
Пароль:
Пароль еще раз:
WWW: http://


На главную

Немного о коде. Как Вы уже заметили, здесь присутствует PHP. Описывать форму я уже не буду, но как мы видим, здесь данные формы посылаются на ту же страницу, где расположена данная форма. Другими словами файл registration.php шлет данные сам на себя. Так делать никто не запрещает, однако использовать это можно не всегда, так как это сильно портит читабельность кода. Однако с другой стороны это наглядно демонстрирует возможности языка PHP. По сути наша страница разделена на два случая. Первый случай это когда на страницу шлются данные POST запросом, второй случай, когда на страницу никакого POST запроса не послано. Во втором случаем мы покажем форму для регистрации, а первом же начнем выполнять проверки присланных данных. Как видно данные шлются в виде ассоциативного массива (т.е. массива, индексами которого являются строки). Причем индексы совпадают с названиями полей input, указанными в форме отправки данных. Т.е. если мы пишем

то у нас, при отправке этих данных POST запросом, будет переменная

$_POST["vasa-peta"]

Так же стоит заметить, что никаких проверок на повтор логина мы не делаем. Данная проверка будет осуществляться на уровне базы данных, так как поле логин помечено как уникальное.

Теперь последнее. Осталось сделать саму гостевую книгу. Немного рассуждений. Так как гостевая книга работает по логину и паролю, то первое что нам придется делать — проверять введенный логин и пароль на наличие в базе. Так как мы решили добавлять сообщения так же в файле book.php, то очевидно следом должна осуществляться процедура добавления сообщения. Ну и в самом конце отображение всех сообщений. (если сделать добавление сообщение, после их отображения, то добавленное сообщение отобразится только после перезагрузки страницы). Имеем:

Гостевая книга "; } else { echo "Ваше сообщение не добавлено!


"; } } ?>
" name="login" /> " name="password" />

"; echo "Текст: ".$row["mes"]."
"; } } mysql_close($link); ?>

Вот по сути и все. Если код 100% рабочий, хорошо. Если нет, то советую Вам постараться самостоятельно исправить ошибки. Теперь обещанный раздел.

Самостоятельная работа
Как уже говорилось в начале, данное решение «кривое». Если Вы еще не поняли почему, то я сейчас поясню. Как вы могли заметить в файле book.php в форме добавления комментария присутсвуют несколько скрытых полей, при этом два из них — это введенный пользователем логин и пароль. Не хорошо, не правда ли? Попробуйте исправить данный недочет использую сессии (Как работать с сессиями в PHP).
Постарайтесь ответить на вопрос, чем отличаюься функции empty/isset и exit/die ?
Измените запрос выборки сообщений из базы так, чтобы при при выводе сообщений отображался web сайт автора сообщения.
Если вы заметили, то пароль пользователей в базе данных храниться в открытом виде, а это очень не хорошо. Отредактируйте код так, чтобы в базе хранился хэш пароля пользователя (например MD5 или SHA1).