31.07.2023

Скрипт гостевой книги на PHP. Гостевая книга на PHP Объявление guest book html


Было рассказано о создании гостевой книги на сайте с помощью готового скрипта. Между тем, на небольших сайтах гостевая книга состоит обычно из нескольких сообщений (десять - пятнадцать) и редко пополняется новыми. В основном, книга засоряется спамом, всякого рода рекламой и ссылками на сайты. В результате, много времени тратится на её очистку и проверку (модерацию) сообщений.

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

Сначала создадим форму для сообщений в гостевой книге с помощью любого редактора HTML и CSS. Для нашего примера не будем отходить от дизайна рассмотренной ранее книги. Кнопку Добавить сообщение сделаем картинкой-ссылкой на форму обратной связи (страница forma_02.html), открывающуюся в небольшом окне (пример действующий, можете проверить!).

ГОСТЕВАЯ КНИГА
компании "Пупкин и партнеры"

23.10.2011
Иван Иваныч
Москва

Заказывал сайт в вашей компании.
Все сделали быстро и качественно.
Спасибо сотрудникам компании SEOMARK! Буду рекомендовать вас своим друзьям.

Админ . Всегда рады помочь!
21.10.2011
Губкин
Лондон

Поздравляем с началом работы гостевой книги.
Желаем успехов в работе и счастья в личной жизни.

Компания "Губкин и партнеры".

Админ . Спасибо!

Код ссылки "Добавить сообщение" следующий:
.

Здесь в JavaScript вы задаете адрес открываемой страницы (forma_02.html), ширину и высоту нового окна (500х600 пиксел) и его положение на экране монитора (верхний левый угол). Содержание окна не имеет каких либо особенностей и определяется необходимой вам информацией о посетителе: имя, адрес, e-mail, ICQ и т.п.

В случае удачной отправки сообщения выводится надпись:
"Спасибо за отправку вашего сообщения.
После проверки администратором сайта
оно будет добавлено в гостевую книгу. "
Полный текст РНР-страницы для рассмотренного примера следующий:





Сообщение




Недавно получил письмо на 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-код:

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


© 2024
zane-host.ru - Программы. Компьютеры. Сетевое оборудование. Оргтехника