Умалишенный guestbook html. Скрипт гостевой книги на PHP

💖 Нравится? Поделись с друзьями ссылкой

Привет читателям сайт )

В данной статье мы рассмотрим Phoca Guestbook - компонент гостевой книги для Joomla-сайтов .

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

Возможности Phoca Guestbook:

  • выбор прав доступа для пользователей;
  • фильтрация не желаемых слов и фраз;
  • блокировка IP-адресов;
  • ограничение количества печатаемых символов;
  • капча;
  • модернизация сообщений (проверка модератором);
  • внешний вид отзывов (цвет, отображение имя, отображение e-mailи адреса сайта).

Итак рассмотрим компонент.

После установки, Phoca Guestbook не нуждается в глобальных настройках.

Панель управления:

  • Posts - все сообщения оставленные пользователями;
  • Guestbooks - категории (созданные гостевые книги);
  • Info - Информация и обновление компонента.

Как видно, на рисунке справа есть кнопка "Параметры". Если нажать на нее, то можно более обширно настроить гостевую книгу и сам компонент.

Параметр

Значение

Display Subject In Form

(Да | Да (обязательно) | Нет) показать или скрыть поле Объект в форме, устанавливается, если поле Тема будет требоваться

Display Name In Form

(Да | Да (обязательно) | Нет) показать или скрыть имя поля в форме, устанавливается, если поле Name будет необходимо

Display Email In Form

(Да | Да (обязательно) | Нет) показать или скрыть поле e-mail в форму, установите поле e-mail, если потребуется

Display Website In Form

(Да | Да (обязательно) | Нет) показать или скрыть поле Сайт в форме, установите поле, если сайт будет требоваться

Display Content In Form

(Да | Да (обязательно) | Нет) показать или скрыть содержимое поля в форме

Enable Javascript Editor

(Да | Нет) Включить или выключить JavaScript Editor

Display Path In Javascript Editor

(Да | Нет) показать или скрыть информацию о пути в редактор JavaScript

(Скрыть | Дисплей) Установите, если форма должна отображаться или нет.

(Top | Нижний) Выберите Текущее местоположение

Display Required Sign

(Да | Нет) Установите для отображения полей, которые требуются

(Да | Нет) Установите, для отображения сообщений.

ширина (в пикселях)

высота (в пикселях)

Установить ширину таблицы (таблица, в которой отображается форма, в пикселях)

Параметр

Значение

Если не зарегистрированный пользователь оставляет сообщение, то можно дать ему имя по умолчанию. Например: Гость

Username Or Name

(Имя пользователя | Имя) выберите имя которое должно быть отображено в Гостевой книге (Имя пользователя или реальное имя пользователя)

Disable User Check

(Нет | Да) Проверка пользователя (отключение этого параметра не рекомендуется)

Registered Users Only

(Да | Нет) Если Да, то только зарегистрированные пользователи могут добавлять новые сообщения

(Да | Нет) Если да, то сообщение будет отображаться после одобрения администратора

Отправить письмо

Параметр

Значение

Display Name In Post

(Да | Нет) показать или скрыть имя (имя пользователя) (гостевой книге)

Display Email In Post

(Да | Нет) показать или скрыть электронную почту (гостевой книге)

Display Website In Post

(Да | Нет) показать или скрыть сайт в (гостевой книге)

Установить формат даты

Установить цвет шрифта

Second Font Color

Установить второй цвет шрифта (цвет шрифта даты)

Background Color

Установить цвет фона

Установка цвета границы

Pagination Default Value

Установите значение по умолчанию для нумерации страниц

Установить нумерацию страниц. Отделяются друг от друга запятой (,)

Pagination Hide All

(Да | Нет) все значения будут скрыты (нумерация страниц)

Параметр

Значение

Forbidden Word Filter

Установить запрещенные слова, которые не будут отображаться в интерфейсе. Слова отделяются друг от друга запятой (,)

Forbidden Whole Word Filter

Установить все запрещенные слова, которые не будут отображаться в интерфейсе. Слова отделяются друг от друга запятой (,)

Save post with forbidden words

(Да | Нет) Если да, то посты, которые включают в себя запрещенные слова, будут сохранены в гостевой книге (запрещенные слова будут скрыты, если сохранены)

Добавить IP которые вы хотите заблокировать. Отделите каждый IP запятой (,)

Maximum Characters

Установить максимальное число символов, они могут быть сохранены в базе данных

Установить максимальное количество URL, которые могут быть отображены в сообщении (0: нет, ссылки будут отображаться в сообщениях, -1: все URL-адреса будут отображаться в сообщениях, например 3: только три ссылки из всех URL будут отображаться в сообщениях)

Not Allowed URL Identification Words

Набор слов, который будет определять допускать ли URL-адреса в сообщении. Отделите каждое слово запятая (,). Пример:: / /,. HTM,. ASP,. JSP,. PHP, WWW.,. COM,. ORG,.

Включение или отключение защиты Captcha

Измените этот параметр только в том случае, вы не будете видеть капчу.

Enable Captcha - Users

(Все | Не зарегистрированы) Параметр отображения капчи для груп пользователей (показывать ли капчу зарегистрированным)

Standard Captcha Characters

Числа, строчные буквы, символы верхнего регистра, которые будут отображаться в стандартном изображении Captcha

Math Captcha Characters

Числа, строчные буквы, символы верхнего регистра, которые будут отображаться в Math изображения Captcha

TTF Символы

Числа, строчные буквы, символы верхнего регистра, которые будут отображаться в TTF изображения Captcha

TTF Captcha Characters

Для отображения ре-капчи, введите публичный код

reCAPTCHA Public Key

Установить рекапчи Public Key

Enable Akismet Spam Protection

(Нет | Да) Посылает все данные новой записи geustbook в Akismet - веб-сервис для проверки спама

Block Spam (Akismet)

(Нет | Да) Блокировать посты, которые не прошли проверку в Akismet

Установить Akismet API ключ, который необходимо использовать в Akismet-Spam. Получите ваш на https://akismet.com/signup/ бесплатно

Основной URL вашего сайта.(URL должен включать префикс http://)

Enable HTML Purifier

(Нет | Да) Включить или выключить HTML Purifier

Установить суффикс сессии (Это функция безопасности, чтобы изменить имя сессии, установите уникальный суффикс, например: a100b20c3)

Enable Hidden Field

(Нет | Да) Включить или выключить скрытые поля. Некоторые спам-ботов пытаются заполнить все поля на месте, если они заполняют это скрытое поле, которое человек не видит, запись не будет добавлена в гостевой книге.

(Да | Нет) Включить кэш.

Enable Detecting Incoming Page

(Да | Нет) Включить или выключить обнаружение входящих страниц. Это функция безопасности. Если вы включите её,то страницу, с которой пришел пост к гостевой книге, будет сохраняться и отображаться в интерфейсе.

Недавно получил письмо на email с просьбой помочь разобраться со скриптом гостевой книги или книги отзывов. Поэтому выполняю свое обещание и сегодняшняя статья будет именно на эту тему.

Что такое гостевая книга и зачем она вообще нужна на сайте?

Гостевая книга — это своего рода книга жалоб или пожеланий, где любой посетитель Вашего сайта может оставить свое сообщение, которое (в случае одобрения админом) смогут прочитать все желающие. Т.е. это самые обычные комментарии, только не к отдельной заметки, а к целому сайту!

Гостевая книга добавляет интерактивность на Ваш сайт и является распространенным способом обратной связи.

Итак, для начала создадим табличку в базе данных mysql , где будут храниться все комментарии пользователей:

CREATE TABLE IF NOT EXISTS `guestbook` (`id` int(11) NOT NULL auto_increment, `user_ip` int(10) unsigned NOT NULL, `user_email` varchar(50) NOT NULL, `addtime` int(11) NOT NULL, `name` varchar(15) NOT NULL, `text` text NOT NULL, `admin_text` text NOT NULL, `image` varchar(40) NOT NULL, `sex` tinyint(1) NOT NULL default "1", PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

  • id — порядковый номер сообщения
  • user_ip — IP-адрес пользователя, представленный в виде целого цисла
  • user_email — email-адрес пользователя
  • addtime — время добавления сообщения
  • name - имя пользователя
  • text — текст сообщения
  • admin_text — текст ответа администратора на сообщение
  • image — аватар пользователя
  • sex — пол пользователя (мужской/женский)

Как Вы видите в табличке есть поле для IP-адреса пользователя. Это делается для того, чтобы можно было потом сделать черный список, куда можно заносить IP-адреса «не хороших» пользователей, которые в дальнейшем не смогут оставлять сообщения.

Поле sex нужно для того, чтобы выводить «правильный» аватар, в случае, когда пользователей не загрузит свой.

С базой данных разобрались. Переходим к программированию. Так как мы работаем с базой данных, то первым делом создадим самый простой класс для работы с базой данных. Для этого создадим файл DB.class.php и поместим туда следующий код:

Class DB { private static $instance; private $MySQLi; private function __construct(array $dbOptions){ $this->MySQLi = @ new mysqli($dbOptions["db_host"],$dbOptions["db_user"], $dbOptions["db_pass"],$dbOptions["db_name"]); if (mysqli_connect_errno()) { throw new Exception("Ошибка базы данных."); } $this->MySQLi->set_charset("utf8"); } public static function init(array $dbOptions){ if(self::$instance instanceof self){ return false; } self::$instance = new self($dbOptions); } public static function getMySQLiObject(){ return self::$instance->MySQLi; } public static function query($q){ return self::$instance->MySQLi->query($q); } public static function esc($str){ return self::$instance->MySQLi->real_escape_string(htmlspecialchars($str)); } }

Стоит сказать, что конструктор этого класса объявлен как private, таким образом, объект не может быть создан вне пределов класса, и инициализация возможна только из статического метода init(). Он берет массив с параметрами соединения с MySQL и создает экземпляр класса, который содержится в статической переменной self::$instance. Таким образом, обеспечивается существование единственного соединения с базой данных в конкретный момент времени.

Остальная часть класса, выполняет запросы к базе данных, на основе статического метода query().

При желании Вы можете доработать этот класс, так как Вам это нужно!

Также в разработке гостевой книги нам понадобятся вспомогательные функции, которые я вынесу в отдельный файл и назову его helper.php.

Теперь мы плавно подошли к самому главному файлу в нашем скрипте — index.php. Именно здесь и будет выполняться вся логика скрипта.

Итак, первым делом необходимо инициализировать сессию, задать основные настройки и выполнить подключение к базе данных mysql. В сессии будет храниться защитный код (капча) формы.

Session_start(); /* Конфигурация базы данных. Добавьте свои данные */ $dbOptions = array("db_host" => "localhost", "db_user" => "", "db_pass" => "", "db_name" => ""); //Подключаем класс для работы с базой данных require "DB.class.php" //Подключаем вспомогательные функции require "helper.php" // Соединение с базой данных DB::init($dbOptions); $appath = realpath(dirname(__FILE__))."/"; //Папка на сервере, куда будут загружаться аватарки $uploaddir = "images/avatars"; //Максимальное число сообщений на одной странице $per_page = 10; //Число страниц в пейджинге $num_page = 2;

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

//Получаем общее число сообщений $result = DB::query("SELECT COUNT(*) AS numrows FROM guestbook"); $total = $result->fetch_object()->numrows;

Теперь определим номер страницы, которую необходимо показать. Для этого обработаем переменную $_GET["p"]

$start_row = (!empty($_GET["p"]))? intval($_GET["p"]): 0; if($start_row < 0) $start_row = 0; if($start_row > $total) $start_row = $total;

$result = DB::query("SELECT * FROM guestbook ORDER BY addtime DESC LIMIT ".$start_row.",".$per_page); //Здесь будет храниться список сообщений $items = array(); while($row = $result->fetch_assoc()){ $row["addtime"] = format_date($row["addtime"],"date")."|".format_date($row["addtime"],"time"); $items = $row; }

Здесь я использовал функцию format_date() для работы с датой и временем, которую я создал в файле helper.php. Основная её задача — это вывод даты и времени в русском формате. Вот ее код:

Function format_date($date,$format = "date"){ if(empty($date)) return ""; $months = array("1" => "января", "2" => "февраля", "3" => "марта", "4" => "апреля", "5" => "мая", "6" => "июня", "7" => "июля", "8" => "августа", "9" => "сентября", "10" => "октября", "11" => "ноября", "12" => "декабря"); if($format == "time"){ return date("H:i",$date); } elseif($format == "date"){ $m = date("n", $date); $m = $months[$m]; $d = date("j",$date); $y = date("Y",$date); return $d." ".$m." ".$y; } else{ return date("d.M.Y H:i",$date); } }

Данная функция имеет всего 2 параметра:

  • $date — дата в формате UNIX (количество секунд пройденных с ночи 1-ого января 1970 - ого года)
  • $format — форма вывода даты.

Теперь мы можешь вывести список сообщений на странице. Для этого я использую следующий html-код:

Гостевая книга Отзывы оставить отзыв

Рассказать друзьям