Перейти к содержимому


Выбрать шаблон и создать сайт

Простая гостевая книга - толчок на идею

#1 alex159

alex159
  • Пользователь
  • 492 сообщений
  • Репутация: 32
-2

Отправлено 01 Февраль 2013 - 23:17

Почти на каждом более-менее популярном сайте есть форум или гостевая книга, эти элементы нужны для постоянного общения автора сайта с его пользователями.
Но многие начинающие веб-мастера не знают, как реализовать гостевую книгу или форум самостоятельно. Некоторые веб-мастера прибегают к использованию специальных интернет-сервисов, которые предоставляют уже готовый продукт в виде гостевых или форумов, расположенных на сайте этих сервисов и показывающих всем пользователям, которые заходят в вашу гостевуюфорум свою рекламу. Это не лучший вариант, поэтому попробуем написать свою собственную гостевую книгу на php.

Для начала разберем порядок работы любой гостевой книги или форума:
  • Генерация формы для отправки сообщения пользователем и вывод уже существующих сообщений из гостевой книги.
  • Ввод пользователем своих данных и текста сообщения. Отправка формы на обработку любому скрипту, который работает на стороне сервера (php, asp, cgi, perl, …)
  • Обработка скриптом введенных данных, проверка этих данных на валидность (правильность).
  • Запись обработанных данных в файл или БД, расположенных на том же сервере, что и скрипт.
  • Вывод сообщения о результатах добавления сообщения.
Теперь разберем каждый этап по отдельности.


Генерация формы
Форма для отправки сообщения пользователя скрипту-обработчику обычно хранится в шаблоне, который в свою очередь расположен в базе данных или в файле. В качестве простого примера можно использовать следующую форму с тремя полями (имя пользователя, e-mail, текст сообщения):
<form name="gbook" target="_self" method="post" action="gbook_add.php">
<table border="1" width="90%" align="center">
	<tr>
		<td width="50%" align="right" valign="top">Ваше имя:&nbsp;</td>
		<td width="50%" align="left"><input type="text" name="username"></td>
	</tr>
	<tr>
		<td width="50%" align="right" valign="top">Ваш e-mail:&nbsp;</td>
		<td width="50%" align="left"><input type="text" name="email"></td>
	</tr>
	<tr>
		<td width="50%" align="right" valign="top">Ваше сообщение:&nbsp;</td>
		<td width="50%" align="left"><textarea name="message" rows="6" cols="37"></textarea></td>
	</tr>
	<tr>
		<td width="50%" colspan="2" align="center"><input type="submit" name="send" value="Добавить сообщение"></td>
	</tr>
</table>
</form>


Вывод уже введенных сообщений
Для вывода сообщения нам понадобиться для начала написать php скрипт, который будет отвечать за вывод сообщений, а так же предопределить будущую структуру файла, в котором будут храниться сообщения пользователей.
Начнем с конца, и напишем структуру файла с сообщениями, назовем его к примеру messages.dat. Каждое сообщение расположено на отдельной строке, а элементы сообщения разбиты с помощью условного разделителя <|-|>:
имя пользователя n<|-|>e-mail пользователя n<|-|>сообщение n<|-|>дата n
...
имя пользователя 2<|-|>e-mail пользователя 2<|-|>сообщение 2<|-|>дата 2
имя пользователя 1<|-|>e-mail пользователя 1<|-|>сообщение 1<|-|>дата 1

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

<?php
$filename = "messages.dat";
$delitmer = "<|-|>";
$shablon = '
<table border="1" width="100%">
	<tr>
		<td width="100%">Имя пользователя: <a href="mailto:%email%">%username%</a></td>
	</tr>
	<tr>
		<td width="100%">%message%</td>
	</tr>
	<tr>
		<td width="100%" align="right">%add_date%</td>
	</tr>
</table>
<br>';


$data = @file($filename);

foreach($data as $val)
{
  list($username, $email, $message, $date) = explode($delitmer, trim($val));
  $tmp_message = str_replace("%username%", $username, $shablon);
  $tmp_message = str_replace("%email%", $email, $tmp_message);
  $tmp_message = str_replace("%message%", $message, $tmp_message);
  $tmp_message = str_replace("%add_date%", $date, $tmp_message);
  echo $tmp_message;
}
?>


Обработка php-скриптом введенных данных и запись их в файл messages.dat
Обработка данных php скриптом заключается в проверке введенных данных (длинны, правильности). Мы будем проверять только длину полученных значений переменных:
  • для имени пользователя – 50 символов
  • для e-mail – 80 символов
  • для сообщения – 500 символов с учетом пробелов
Для повышения безопасности создадим отдельный php-скрипт gbook_add.php, который будет брать все значения из глобальной переменной $_POSTи при этом заменять все опасные HTML и JavaScript теги на их эквиваленты, но безопасные. Вот код этого php скрипта:
<?php
$filename = "messages.dat";
$delitmer = "<|-|>";
$username_limit = 50;
$email_limit = 80;
$message_limit = 500;

if (isset($_POST))
{
	if (isset($_POST['username']) & isset($_POST['email']) & isset($_POST['message']))
	{
		 if (((strlen($_POST['username'])>0) & (strlen($_POST['username'])<=$username_limit)) &
			((strlen($_POST['email'])>0) & (strlen($_POST['email'])<=$email_limit)) &
			((strlen($_POST['message'])>0) & (strlen($_POST['message'])<=$message_limit)))
			{
				$username = str_replace("rn", "<br>", htmlspecialchars($_POST['username']));
				$email = str_replace("rn", "<br>", htmlspecialchars($_POST['email']));
				$message = str_replace("rn", "<br>", htmlspecialchars($_POST['message']));
				$arr = array($username, $email, $message, date("d.m.Y"));
				$new_message = implode($delitmer, $arr) . "rn";
				$messages_arr = @file($filename);
				$messages_str = $new_message;
				$messages_str .= trim(implode("", $messages_arr));

				$fp = fopen($filename, "w+");
				fwrite($fp, $messages_str);
				fclose($fp);
				echo "<META HTTP-EQUIV="Refresh" CONTENT="2; URL=index.php">";
				echo "Ваше сообщение добавленно!";
			}
			else
			{
				echo "Ошибка!!!<br>Не все данные введенны, либо в одном из полей формы слишком символов.";
			}
	}
}
?>[/size][/font][/color]
[color=#232A4B][font=Verdana, Geneva, Arial, Helvetica, sans-serif][size=3]

Это простейший вариант гостевой книги, написанной на php, который только показывает, по какому именно принципу работает гостевая книга или форум. В данной гостевой книге не реализованы такие важные возможности как защита гостевой от спам-ботов, удаление и редактирование сообщений, разбиение сообщений гостевой книги на страницы...
Готовый Прикрепленный файл  gbook.zip   1,91К   Количество загрузок: 104
Могу доработать но уже при отдельных условиях.

 

 

  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85
Советую обратить внимание на следующее:
  1. Скрипт гостевой книги без mysql
  2. Как написать гостевую книгу
  3. Какой плагин лучше для гостевой книги?

#2 k1on

k1on
  • Пользователь
  • 63 сообщений
  • Репутация: 7

Отправлено 02 Февраль 2013 - 13:47

какие файлы, на дворе 2013 год.
имхо, бесполезный набор кода.
  • 0

#3 alex159

alex159
    Topic Starter
  • Пользователь
  • 492 сообщений
  • Репутация: 32

Отправлено 03 Февраль 2013 - 09:26

Хочу немного не согласиться, начинающие php программисты часто начинаю с написание гостевой книги.
Не все же делать на бесплатной CMS :D


  • 0


Оформление форума – IPBSkins.ru