Главная » Полезные статьи » Язык PHP » Создание гостевой книги
Распечатать статью

Создание гостевой книги

На тему создания гостевых книг было написано большое количество статей, однако большинство из них раскрывали процесс написания не полностью, а частично. К тому же, написанные книги были максимально просты, и не могли ничего, кроме как добавлять сообщения. В данной статье я постараюсь подробно описать процесс создания гостевой книги с неплохим набором функций. Гостевая книга написана на PHP с использованием текстовых файлов для хранения данных.


Итак, прежде всего нам необходимо разобраться с файлами. Их у нас будет четыре, хотя можно объединить и в один, но это уже вам решать…

Файл №1 — guestbook.inc.dat

Создадим его, оставим пустым, и укажем ему права (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); $page=$_GET['page']; 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>"; }    /* Ниже функция, которая отвечает за вывод нумерации страниц с сообщениями… */    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>"." ";    } } /* Здесь такая штука, что если можно перейти на следующую страницу, то показывается примерно что то вроде этого :)  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']; if ($name !="" and $guesttext !="") {    $date=date('d.m.Y');    $time=date('H:i');    // заменяем двоеточия    $guesttext = ereg_replace(":::",":::",$guesttext);    $name = ereg_replace(":::",":::",$name);    $email = ereg_replace(":::",":::",$email);    // разрешим только шрифты, картинки и списки    // теги как украшение    $guesttext = ereg_replace("<", "<", $guesttext);    $guesttext = ereg_replace(">", ">", $guesttext);    $name = ereg_replace("<", "<", $name);    $name = ereg_replace(">", ">", $name);    $email = ereg_replace("<", "<", $email);    $email = ereg_replace(">", ">", $email);    // нет кавычкам! 2=DeaD= thanX!    $name = ereg_replace("\"", """, $name);    $email = ereg_replace("\"", """, $email);    $guesttext = ereg_replace("\"", """, $guesttext);    // удаление лишних пробелов    // в центре    $guesttext=ereg_replace(" +"," ",$guesttext);    $name=ereg_replace(" +"," ",$name);    $email=ereg_replace(" +"," ",$email);     //cправа и слева     $name=trim($name);     $email=trim($email);    $guesttext=trim($guesttext);    // перевод строки    $guesttext = ereg_replace("\n", "<br>", $guesttext);    // чтобы весь текст был на одной строке!  $guesttext = ereg_replace("\r", "", $guesttext);    // мегакавычки    $name = stripslashes($name);    $email = stripslashes($email);    $guesttext= stripslashes($guesttext);    // правильные тире    $guesttext = preg_replace ("/[ ]{1,}-[ ]{1,}/", " — ", $guesttext);    $guesttext = preg_replace ("/^- /", "— ", $guesttext);    // число-число    $guesttext = preg_replace ("/(\d)-(\d)/", "\\1–\\2", $guesttext);    // слова с дефисом    $guesttext = preg_replace ("/(\S+)-(\S+)/", "<nobr>\\1-\\2</nobr>", $guesttext);    // частицы и предлоги    $guesttext = preg_replace ("/([А-Яа-яA-Za-z]) (ли|ль|же|ж|бы|б)([^А-Яа-яA-Za-z])/", '\\1 \\2\\3', $guesttext);    $guesttext = preg_replace ("/(\s)([А-Яа-я]{1})\s/", '\\1\\2 ', $guesttext);    // A.C. Пушкин    $guesttext = preg_replace ("/([А-ЯA-Z])([\. ]{1})[ ]{0,1}([А-ЯA-Z])([\. ]{1})[ ]{0,1}([А-ЯA-Z][А-Яа-яA-Za-z]*)/", '\\1. \\3. \\5', $guesttext);    // Пушкин А. С.    $guesttext = preg_replace ("/([А-ЯA-Z][А-Яа-яA-Za-z]*) ([А-ЯA-Z])[\. ]{1}[ ]{0,1}([А-ЯA-Z])\.([,\ )]{1})/", '\\1 \\2. \\3.\\4', $guesttext);    // преобразовываем адреса в ссылки!    $guesttext = eregi_replace("([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3}))", "<a href=\"mailto:\\">\</a>", $guesttext);    $guesttext = eregi_replace("((ht|f)tp://www\.|www\.)([a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})((/|\?)[a-z0-9~#%&\\/'_\+=:\?\.-]*)*)", "http://www.\\3", $guesttext);    $guesttext = eregi_replace("((ht|f)tp://)((([a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3}))|(([0-9]{1,3}\.){3}([0-9]{1,3})))((/|\?)[a-z0-9~#%&'_\+=:\?\.-]*)*)", "<a href=\"\\" target=\"_top\">\</a>", $guesttext);    // делаем "обрезание" слишком большого куска информации    $name=substr($name,0,$name_max_size);    $email=substr($email,0,$email_max_size);    $guesttext=substr($guesttext,0,$message_max_size);    // BBcodes    $guesttext = ereg_replace("\[b\]", "<b>", $guesttext);    $guesttext = ereg_replace("\[\/b\]", "</b>", $guesttext);    $guesttext = ereg_replace("\[i\]", "<i>", $guesttext);    $guesttext = ereg_replace("\[\/i\]", "</i>", $guesttext);    $guesttext = ereg_replace("\[u\]", "<u>", $guesttext);    $guesttext = ereg_replace("\[\/u\]", "</u>", $guesttext);    $guesttext = ereg_replace("\[red\]", "<font color=\"red\">", $guesttext);    $guesttext = ereg_replace("\[\/red\]", "</font>", $guesttext);    $guesttext = ereg_replace("\[green\]", "<font color=\"green\">", $guesttext);    $guesttext = ereg_replace("\[\/green\]", "</font>", $guesttext);    $guesttext = ereg_replace("\[blue\]", "<font color=\"blue\">", $guesttext);    $guesttext = ereg_replace("\[\/blue\]", "</font>", $guesttext);    $guesttext = ereg_replace("\[yellow\]", "<font color=\"yellow\">", $guesttext);    $guesttext = ereg_replace("\[\/yellow\]", "</font>", $guesttext);    // отправка сообщения на мой электронный адрес    // сообщение    $message .="".$date.", ".$time." \n";    $message .="Имя: ".$name.", e-mail: ".$email."\nСообщение\n";    $message .="".$guesttext."\n ";    $message .="----------\r\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=windows-1251\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"); } ?> <!-- какой то умник пытается нас сломать :) пошел он на индекс :) --> <html> <body onload='window.location="gb.php?page=0"'> </html>

Ну а теперь банановый :) На закуску хочу предложить вам набор BB-codes, которые помогут вашим посетителям несколько разнообразить сообщения в гостевых книгах :)

  • [i]test[/i] — наклонный
  • [b]test[/b] — жирный
  • [u]test[/u] — подчеркнутый
  • [red]test[/red] — красный
  • [blue]test[/blue] — синий
  • [green]test[/green] — зеленый
  • [yellow]test[/yellow] — желтый

И еще! «Шура, я вас умоляю»(с), если у вас что-то не получилось, не надо обвинять автора в криворукости и тупости, ибо я сам только что все проверил, и книга пошла отлично… Попробуйте вернуться к искомому и начните заново…

Источник: internet-technologies.ru

Вы можете оставить комментарий, или обратную ссылку на Ваш сайт.

Оставить комментарий

Похожие статьи