Гостевая книга - один из полезных инструментов Web-мастера, позволяющий узнать мнение о своей работе, то есть о созданном сайте. Сейчас мы рассмотрим как написать гостевую книгу своими собственными руками (только драйвер "прямые_руки.dll" установите :) и поехали ...)
Перейдем к алгоритму нашей гостевой книги. Пользователь открывает гостевую книгу и видит максимальное количество сообщений, которое задается Вами. На этой же странице находится форма для ввода сообщений. А внизу страницы мы сделаем страницы, чтобы пользователь смог просматривать предыдушие сообщения.
После того, как пользователь ввел свои данные, текст сообщения и нажал на кнопку "Отправить", скрипт записывыет эту информацию в начало файла, чтобы другие пользователи смогли видеть сообщения "от последнего".
В файл гостевой книги будем записывать следующую информацию:
Имя пользователя
Дату и время (администратор может устанавливать сам, по своему вкусу) отправки сообщения
Само сообщение
E-mail пользователя (при желании пользователя)
ICQ(при желании пользователя)
Дом. страницу (при желании пользователя)
IP пользователя (только для администратора)
Итого: 7 полей. После каждого поля стоит спец. символом №01
Так же при добавлении сообщения все поля будут проверятся на теги, чтобы увеличить безопастность нашей гостевой книги.
Ниже приведен листинг формы для добавления сообщений, сохраните его на диске как файл с названием "form.txt":
<script language=JavaScript type=text/javascript> function checkForm() {
formErrors = false;
if (document.post.mes.value.length < 2) { formErrors = Вы должны ввести текст сообщения; } else
if (document.post.mes.value.length > 1000) { var simbols = document.post.mes.value.length; formErrors = Вы должны ввести текст сообщения меньше 1000 символов, а у вас + simbols; } else
if (document.post.user.value.length > 20) { var simbols = document.post.user.value.length; formErrors = Вы должны ввести ваше имя меньше 20 символов, а у вас + simbols; } else
if (document.post.user.value.length < 3) { var simbols = document.post.user.value.length; formErrors = Вы должны ввести ваше имя больше 3 символов; }
body{ background: #FFF; color: #222; font-family: Verdana, Tahoma, Arial, Trebuchet MS, Sans-Serif, Georgia, Courier, Times New Roman, Serif; font-size: 11px; line-height: 135%; margin: 0; padding: 0; text-align: center; } </style> </head> <body> <div> <br><br><br><br><br><br> <p>Спасибо...<br> За ваше сообщение<br> Нам важно каждое мнение</p> <p>(<a href=index.php>Или нажмите сюда, если не хотите ждать</a>)</p> </div> </body> </html>
Ниже приведен листинг, сохраните его на диске как файл с названием "index.php":
<?php
Error_Reporting(E_ALL & ~E_NOTICE);
################ Информация для администратора ################ $file_guest = guest.txt; // файл гостевой книги $kol_fields = 7; // количество полей для каждого сообщения // (nick, date, text, email, icq, homepage, IP) $max_mes_on_page = 20; // максимальное количество сообщений на страницу $tamples_file = tamples.txt; // файл для вывода сообщений $addform = form.txt; // форма для добавления сообщений $date_format = d.m.Y / H:i; // формат даты $otvet = otvet.txt; // файл для ответа на добавление сообщения ################===============================################
function strtosafe($str) // Защита данных то несанкционированного воздействия { $str = nl2br(htmlspecialchars($str)); // заменяем спец. символы на их эквиваленты $str = str_replace(#, #, $str); $str = str_replace(., ., $str);
function fswrite($file_name, $text) // Делаем дозапись данных в начало файла($file_name) { $file_temp = $file_name . .tmp; // Резервный файл
if (is_file($file_temp)) die(Не удалось записать информацию: в прошлый раз работа скрипта была прервана(сбой в системе).<br> Пожайлуста обратитесь к администратору);
if ( @chmod($file_name, 0777) == false ) @chmod($file_name, 0777);
if (copy($file_name, $file_temp)) { file_write($file_name, $text); fewrite($file_name, file_read($file_temp)); @unlink($file_temp); } else return -1; // код ошибки (не удалось произвести копирование) return 0; }
if (!is_file($file_guest)) file_write($file_guest, ); // если файла гостевой гниги не существет, тогда создаем пустой fswrite($file_guest, $user .\x01. $date .\x01. $text .\x01. $email .\x01. $icq .\x01. $homepage .\x01. $IP .\x01); // записываем информацию
include($otvet); // вставляем ответ для пользователя по окончании добавления } else {
$page = $HTTP_GET_VARS[page] - 1; // номер страницы if ($page < 1) $page = 0;
$cont = file_read($file_guest); // данные из файла $conts = explode(\x01, $cont); // записываем данные из фала в массив $all_mes = (count($conts)-1) / 7; // общее количество сообщений
include($addform);
for ($i = ($max_mes_on_page * $page); $i < (($max_mes_on_page * $page) + $max_mes_on_page); $i++) { if ($i >= $all_mes) break;
Я не стану объяснять код, т.к. уже подписал комментарии в нем.
Этот код конечно же несовершенен, поэтому ненадо сильно критиковать. Я специально некоторые функции недоделал или несделал вообще (что бы Вы сами пошевелили своим сером веществом и заставили его думать :) ). Например осталось без внимания то, что здесь нет лимита на показ страниц, т.е. нужно выводить по 10 страниц и две стрелочки: на предыдущие 10 (если таковые имеются) и на следующие. Так же можно добавить ф-цию на проверку e-mail, icq и дом.страницу. Можно и BB-коды присобачить см. подробнее сдесь. Про администрирование я уже и неговорю, сами делайте как хотите
Немного о защите данных: создайте в дериктории с файлом "index.php" файл ".htaccess", и впищите в него следующую информацию:
<Files *.txt> deny from all </Files> DirectoryIndex index.php
Это похволит вам скрыть все *.txt файлы и назначить главным файлом в дериктории "index.php"
Вроде все сказал, все хорошо... да потребности у всех разные, кому-то этот скрипт подойдет, а кому-то и нет. Идею я вам дал, остальное делайте сами. Как говорится: "На всех не угодишь".