На тему создания гостевых книг было написано большое количество статей, однако большинство из них раскрывали процесс написания не полностью, а частично. К тому же, написанные книги были максимально просты, и не могли ничего, кроме как добавлять сообщения. В данной статье я постараюсь подробно описать процесс создания гостевой книги с неплохим набором функций. Гостевая книга написана на PHP с использованием текстовых файлов для хранения данных.
Итак, прежде всего нам необходимо разобраться с файлами. Их у нас будет четыре, хотя можно объединить и в один, но это уже вам решать...
Файл №1 - guestbook.inc.dat
Создадим его, оставим пустым, и укажем ему права (0777-*nix, rwx/rwx/rwx)
Сюда будут записываться все сообщения... Да-да!!! Именно в один файл! Но не пугайтесь :) Мной лично проверялось на всеми известном сервере WallSt. база данных размером в 5, 10, 100, 250, 500, 1000 Кб! Торможения были только на 1000 Кб книге, поверьте, это более 3000 средних записей! Вам хватит ее с лихвой :)
Создадим его, оставим пустым, и укажем ему права (0777-*nix, rwx/rwx/rwx)
Сюда будут записываться все сообщения... Да-да!!! Именно в один файл! Но не пугайтесь :) Мной лично проверялось на всеми известном сервере WallSt. база данных размером в 5, 10, 100, 250, 500, 1000 Кб! Торможения были только на 1000 Кб книге, поверьте, это более 3000 средних записей! Вам хватит ее с лихвой :)
Файл №2 – config.inc
<? $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>"; /* Здесь такая штука, что если можно перейти на предыдущую страницу, то показывается примерно что то вроде этого :) << [1] 2 */ if($c>$gb_on_page & $page>0){ echo "<a href=\"gb.php?page=".($page-1)."\"><<</a>"; }
/* Ниже функция, которая отвечает за вывод нумерации страниц с сообщениями… */
/* Здесь такая штука, что если можно перейти на следующую страницу, то показывается примерно что то вроде этого :) 1 [2] >>*/
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
<? include(config.inc); /* укажем, что данные должны передаться скрипту из формы... иначе можно было бы отправить сообщение примерно таким образом: http://myhost.ru/gb/gbadd.php?name=admine&email=you@#admin.com&guesttext=message_have_been_posted спасибо CompDocs */ $name=$_POST[name]; $email=$_POST[email]; $guesttext=$_POST[guesttext];
// делаем "обрезание" слишком большого куска информации $name=substr($name,0,$name_max_size); $email=substr($email,0,$email_max_size); $guesttext=substr($guesttext,0,$message_max_size);
// если не удалось, отсылаем его обратно! else { header("Location: gb.php"); }
?> <!-- какой то умник пытается нас сломать :) пошел он на индекс :) --> <html> <body onload=window.location="gb.php?page=0"> </html>
Ну а теперь банановый :) На закуску хочу предложить вам набор BB-codes, которые помогут вашим посетителям несколько разнообразить сообщения в гостевых книгах :)
Ну и вот что мы получаем после наших недолгих мытарств...
Как можно увидеть, вот он наш скриптик... Сверху формочка, ниже сообщения... Еще ниже, сортировка по страницам.
И еще! «Шура, я вас умоляю»(с), если у вас что-то не получилось, не надо обвинять автора в криворукости и тупости, ибо я сам только что все проверил, и книга пошла отлично… Попробуйте вернуться к искомому и начните заново… А для тех, у кого совсем ничего не получилось, скачайте архив книги отсюда: http://pseon.dax.ru/scripts/gb.rar (3670 Bytes)