Гостевая книга на PHP
На тему создания гостевых книг было написано большое количество статей, однако большинство из них раскрывали процесс написания не полностью, а частично. К тому же, написанные книги были максимально просты и не могли ничего, кроме как добавлять сообщения. В данной статье я постараюсь подробно описать процесс создания гостевой книги с неплохим набором функций. Гостевая книга написана на PHP с использованием текстовых файлов для хранения данных.
Итак, прежде всего нам необходимо разобраться с файлами. Их у нас будет четыре, хотя можно объединить и в один, но это уже вам решать.
Файл №1 - guestbook.inc.datСоздадим его, оставим пустым, и укажем ему права (0777-*nix, rwx/rwx/rwx)
Сюда будут записываться все сообщения. Да-да! Именно в один файл! Но не пугайтесь. Мной лично проверялось на всеми известном сервере WallSt. база данных размером в 5, 10, 100, 250, 500, 1000 Кб! Торможения были только на 1000 Кб книге, поверьте, это более 3000 средних записей! Вам хватит ее с лихвой.
Файл №2 – config.inc<?php
$gb_on_page = "10"; // кол-во сообщений в гостевой на стр.
$name_max_size = "15"; // максимальная длина ника
$email_max_size = "50"; // максимальная длина мыла
$message_max_size = "1000"; // максимальная длина сообщения
$recipient ="Name.Sirname@email.zone";
$subject = "Новое сообщение на сайте";
$site_name = "Ваш сайт";
?>
Файл №3 – gb.php<html>
<head>
<title>Guestbook</title>
</head>
<body>
<!-- включаем вышеописанный файл -->
<? include(‘config.inc’); ?>
<!-- пишем форму для добавки сообщений -->
<!-- ниже указываем в свойствах формы защиту от повторного нажатия кнопки Submit -->
<form onSubmit="newmsg.Submit.disabled='true'" name='newmsg' action='gbadd.php' method=post>
<!-- для всех трех полей устанавливаются максимально возможные размеры для полей имени, адреса электронной почты и сообщения -->
*Имя:<input type=text maxlength="<? echo $name_max_size; ?>" name=name><br>
E-mail:<input type=text maxlength="<? echo $email_max_size; ?>" name=email><br>
*Сообщение:<br><textarea maxlength="<? echo $message_max_size; ?>" name=guesttext cols=42 rows=10></textarea><br>
<!-- ниже указано, что при нажатии кнопки Submit она станет недоступна, и взамен ее появится кнопка с надписью «ждите!!!» -->
<input type="Submit" onClick="newmsg.Submit.value='ждите!!!'" name="Submit" value="Отправить">
<input type="reset" value="Стереть">
</form>
<!-- думаете это весь файл? :) нет, ошибаетесь… Сейчас начнется самое интересное! -->
<?
$data=file("guestbook.inc.dat");
$c=count($data);
if (!isset($page)) { $page=0; }
for ($i=$page*$gb_on_page;$i<$page*$gb_on_page+$gb_on_page;$i++) {
if($i>$c-1)break;
list($name,$email,$date,$time,$guesttext)=split(":::","$data[$i]", 5);
echo "<a href=\"mailto:$email\">$name</a> @ [$date, $time]<br>$guesttext<br><hr>";
}
$col=$c/$gb_on_page;
echo "<center>";
if ($c<$gb_on_page){ echo ""; }
else {
echo "<b>Страницы: </b>";
if($c>$gb_on_page & $page>0){ echo "<a href=\"gb.php?page=".($page-1)."\"><<</a>"; }
for($i=0;$i<$col;$i++) {
if(($i)!=$page)echo "[<a href=\"gb.php?page=$i\">".($i+1)."</a>] ";
else echo "<b><i>".($i+1)."</b></i>"." ";
}
}
if($c>$gb_on_page & $page<$col-1){ echo "<a href=\"gb.php?page=".($page+1)."\">>></a>"; }
echo "<br>Всего сообщений: $c";
echo "</center></font>";
?>
<!-- Уффффффффффф. Все! С этим файлом покончили, но остался главный, отвечающий собственно за добавление сообщения в гостевую книгу -->
</body>
</html>
Файл №4 — gbadd.php<?php
include('config.inc');
$name = $_POST['name'];
$email = $_POST['email'];
$guesttext = $_POST['guesttext'];
if (!empty($name) && !empty($guesttext)) {
$date = date('d.m.Y');
$time = date('H:i');
$guesttext = str_replace(":::", ":::", $guesttext);
$name = str_replace(":::", ":::", $name);
$email = str_replace(":::", ":::", $email);
$guesttext = htmlspecialchars($guesttext, ENT_QUOTES);
$name = htmlspecialchars($name, ENT_QUOTES);
$email = htmlspecialchars($email, ENT_QUOTES);
$guesttext = preg_replace("/\s+/", " ", $guesttext);
$name = preg_replace("/\s+/", " ", $name);
$email = preg_replace("/\s+/", " ", $email);
$guesttext = nl2br($guesttext);
$guesttext = str_replace("\r", "", $guesttext);
$guesttext = stripslashes($guesttext);
$name = stripslashes($name);
$email = stripslashes($email);
$message = $date.", ".$time."\n";
$message .= "Имя: ".$name.", e-mail: ".$email."\nСообщение\n";
$message .= $guesttext."\n ";
$message .= "Сообщение из гостевой книги";
$headers = "From: $site_name <$recipient>\n";
$headers .= "X-Mailer: Pseon’s Guestbook\n";
$headers .= "X-Priority: 1\n";
$headers .= "Content-Type: text/plain; charset=UTF-8\n";
mail($recipient, $subject, $message, $headers);
$msg = "$name:::$email:::$date:::$time:::$guesttext ";
$lines = file("guestbook.inc.dat");
$fp = fopen("guestbook.inc.dat", "w");
fwrite($fp, "$msg\n");
for ($i = 0; $i < count($lines); $i++) {
fwrite($fp, $lines[$i]);
}
fclose($fp);
clearstatcache();
} else {
header("Location: gb.php");
}
?>
Ну и вот что мы получаем после наших недолгих мытарств...

Как видно из приведенного примера, интерфейс состоит из вводной формы, расположенной в верхней части, и отображения сообщений, которые сортируются по страницам в нижней части.
Следует подчеркнуть, что если у вас возникли трудности при реализации данного функционала, не стоит делать поспешных выводов о недостатках руководства. Автор убедился в корректности представленного материала, проведя самостоятельное тестирование. В случае возникновения проблем рекомендуется вернуться к исходным пунктам и проанализировать выполненные шаги заново.
BB-коды
BB-коды, или Bulletin Board Codes, являются специальными инструкциями, заключенными в квадратные скобки, которые используются для форматирования и стилизации текста на форумах, в гостевых книгах и других веб-приложениях. Эти коды облегчают процесс оформления текста, позволяя, например, делать его жирным, курсивным или изменять его цвет без необходимости знания HTML или CSS.
В данной части рассматривается набор BB-кодов, предназначенный для дополнительной стилизации сообщений в гостевых книгах.
Форматирование текста | |
---|---|
[i]test[/i] | наклонный |
[b]test[/b] | жирный |
[u]test[/u] | подчеркнутый |
[s]test[/s] | перечеркнутый |
[size=12]test[/size] | изменение размера шрифта |
Цвет | |
[red]test[/red] | красный |
[blue]test[/blue] | синий |
[green]test[/green] | зеленый |
[yellow]test[/yellow] | желтый |
Выравнивание | |
[center]test[/center] | выравнивание по центру |
[left]test[/left] | выравнивание по левому краю |
[right]test[/right] | выравнивание по правому краю |
Списки и скрытый текст | |
[list]test[/list] | создание списка |
[li]test[/li] | элемент списка |
[spoiler]test[/spoiler] | скрытый текст |
Специальные функции | |
[quote]test[/quote] | цитирование |
[code]test[/code] | вставка кода |
[url]test[/url] | гиперссылка |
[img]test[/img] | вставка изображения |