На главную

Библиотека Интернет Индустрии I2R.ru

Rambler's Top100

Малобюджетные сайты...

Продвижение веб-сайта...

Контент и авторское право...

Забобрить эту страницу! Забобрить! Блог Библиотека Сайтостроительства на toodoo
  Поиск:   
Рассылки для занятых...»
I2R » Сайтостроительство » Web-программирование

Гостевая книга на PHP

Автор: Дмитрий
Сайт: WebTalk.ru - форум вебмастеров

Содержание

  1. Введение
  2. Структура программы
  3. Каталог данных
  4. Файл настроек гостевой книги
  5. Добавление сообщений
  6. Вывод сообщений
  7. Задачи для самостоятельной работы
  8. Заключение

Введение

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

Зачем может понадобиться гостевая книга Вашему сайту? С ее помощью можно наладить обратную связь с посетителями, выслушать их комментарии по поводу сайта, дать возможность Вашей аудитории поделиться мнениями. Это очень важно, так как действительно позволяет сделать сайт лучше и максимально приблизить его к пользователю. В сети существует множество скриптов гостевых книг. Однако каждый, кто обладает начальными знаниями в PHP, может написать свою гостевую книгу. Зачем? Все очень просто. Написав свой скрипт, Вы можете сделать его исходя из конкретных потребностей Вашего сайта. Обычно в чужих гостевых книгах либо сложно настраивается дизайн, либо сложно управлять ими, либо Вы обязаны сохранять чужие копирайты. Все эти моменты отпадают, когда Вы создаете свой скрипт. Кроме того, немаловажный момент - написание свой гостевой книги позволяет нелишний раз попрактиковаться в программировании :).

Также хочу сказать, что я буду очень рад, если Вы поделитесь своим мнением о статье и выразите комментарии по поводу ее содержания. Если Вам есть что сказать - просьба оставить Ваш комментарий о статье на форуме вебмастеров WebTalk.ru. Там же Вы можете задать любой вопрос, и не только по этой статье, но и по множеству других тем. Ну и, конечно, познакомиться и пообщаться с единомышленниками.

Взять готовый и полностью работоспособный скрипт гостевой книги можно там же на сайте. Оригинал этой статьи, комментарии, мнения и исходники находятся по адресу:
http://www.webtalk.ru/showthread.php?s=&threadid=35

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

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

Чтобы запустить гостевую книгу на сайте, Вам понадобиться хостинг с поддержкой PHP. Я рекомендую Вам хостинг-провайдера RunWeb.Ru. У них поддержка PHP включена в любом, даже самом бюджетном тарифном плане, а служба поддержки всегда поможет, ответит на любой вопрос и решит любую проблему - проверено.

Структура программы

Итак, давайте посмотрим, как будет выглядеть наша гостевая книга.

Гостевая книга состоит их нескольких файлов. Каждый выполняет свои действия, предназначенные только ему. Сразу определимся со структурой программы. Подразумевается, что файлы гостевой книги размещаются в отдельном каталоге. Я рекомендую Вам выделить для тестирования скрипта отдельный хост в Вашем Apache (если Вы прочитали статью про установку Apache, то Вам не составит труда сделать это). Давайте теперь рассмотрим структуру файлов подробно:

  • Главный каталог "/":
  • /index.php - главный файл гостевой книги. Он выводит все сообщения.
  • /add.php - скрипт добавления сообщений в базу.
  • /inc.php - файл, содержащий настройки гостевой книги

  • Каталог данных "/data":
  • /data/header.php - дизайн верхушки страниц
  • /data/footer.php - дизайн низа страниц
  • /data/guest.dat - база данных гостевой книги

Каталог данных

Отдельно расскажу про файлы в каталоге data. Файлы header.php и footer.php задают общий дизайн страниц гостевой книги. Как минимум они должны содержать обязательные тэги html-документа. Рассмотрим структуру html документа:

<html>
<head>
	<title>Гостевая книга</title>
</head>

<body>

<!-- данные гостевой книги -->

</body>
</html>

Как видите, до комментария <!-- данные гостевой книги --> есть обязательные тэги. Это - верхушка документа и их нужно разместить в файле header.php. Все что ниже этого комментария - нужно разместить в файле footer.php. В нашем случае это всего две строчки закрывающие обязательные тэги </body> и </html>. Кроме того, обратите внимание, оба файла являются php скриптами, поэтому Вы можете использовать в них любые php-тэги.

Файл data/guest.dat содержит данные гостевой книги. Эти данные выводятся файлом index.php, а добавляются в него файлом add.php (см. структуру программы выше). По умолчанию, когда сообщения отсутствуют, этот файл пустой. Чтобы не отвлекаться в дальнейшем, сразу сделайте каталог data и создайте в нем три файла. guest.php оставьте пустым, а в header.php и footer.php запишите html из примера, приведенного выше. Готово? Тогда продолжим.

Файл настроек гостевой книги

Файл настроек в нашей гостевой книге - inc.php. В нем записываются имена файлов данных, описанных выше, а также некоторые другие переменные. Это сделано для того, чтобы при необходимости не редактировать все скрипты, изменяя пути или имена файлов, а просто изменить значения переменных в inc.php. Кстати, учитесь выносить такие переменные как пути к служебным файлам, формат дат или административный email в отдельные файлы настроек. Возьмите за правило называть его одинаково во всех Ваших программах. Это избавить Вас в дальнейшем от копания в исходных кодах да и просто является хорошим тоном в программировании.

Вот код файла настроек:

<?

  $header = "data/header.php";
  $footer = "data/footer.php";
  $data = "data/guest.dat";

  $data_format = "d-m-y, H:i";
  $admin_email = "admin@your_site.ru";
  $notify = 1;
?>

Переменные $header, $footer и $data, как Вы уже догадались, задают пути к уже известным нам файлам в каталоге "data".

Переменная $data_format задает формат дат, которые указываются в заголовке сообщения (когда и во сколько оно было добавлено). В варианте "d-m-y H:i" это означает "день-месяц-год Часы-Минуты". Например, сообщение, добавленное 10 января 2004 года в 21:30 будет выглядеть как "01-01-04 21:30".

Переменная $admin_email указывает Email администратора гостевой книги. Переменная $notify указывает нужно ли отправлять по адресу $admin_email уведомления о добавлении новых сообщений. Если установить $notify=0, уведомления отправляться не будут, если поставить $notify=1, то при добавлении сообщения в гостевую книгу администратору будет отправляться письмо. Как это работает - увидите дальше.

Добавление сообщений

Добавление сообщения производит файл add.php.

Это - практически самый важный файл в гостевой книге. Он осуществляет проверку формы сообщения, формирование и добавление его в базу данных, уведомление администратора и т.п. Рассмотрим его код:

<?

  include "inc.php";
  include $header;

// функция show_form() выводит форму добавление сообщения, а 
// также сообщение об ошибке, если такая возникает

Function show_form($s="") {
  global $name,$email,$url,$message,$footer;
  if ($s) echo "<b>Ошибка:</b> $s<hr>";
?>
<b>Добавление сообщения:</b><hr>
<table width=80% cellpadding=3 cellspacing=3>
<form action=add.php method="post">
<tr>
  <Td>Ваше имя: *</TD>
  <td><input type=text name=name size=20 value="<? echo $name; ?>"></td>
</tr>
<tr>
  <Td>Ваш Email:</TD>
  <td><input type=text name=email size=20 value="<? echo $email; ?>"></td>
</tr>
<tr>
  <Td>Адрес сайта:</TD>
  <td><input type=text name=url size=20 value="<? echo $url; ?>"></td>
</tr>
<tr>
  <Td colspan=2>Текст сообщения: *<br>
  <textarea cols=35 rows=5 name=message><? echo stripslashes($message); ?></textarea>
  </TD>
</tr>
<tr><td colspan=2><input type=submit value=" Добавить сообщение! "></td></tr>
<input type=hidden name=a value=1>
</form>
</table>
<p>Поля, отмеченные звездочкой (*) обязательны к заполнению.
<?
  include $footer;
  exit();
}
	
// проверка на существование файла с данными гостевой книги
  if (!file_exists($data))  { 
    echo "Ошибка! Файл с данными отсутствует!";
    include $footer;
    exit();
  }

// если сообщение еще не добавляется, выводим форму
  if (!$a) show_form();
  
// если сообщение добавляется, проверяем форму на ошибки
  if (!$name) show_form("Укажите Ваше имя!");
  if (!$message) show_form("Вы не заполнили сообщение!");

// формируем сообщение	
  if ($email) $name = "<a href=\"mailto:$email\">$name</a>";
  if ($url) $name .= ", <a href=\"$url\">$url</a>";
  $name .= ", ".date($data_format, time());
  $message = str_replace("<","<",$message);
  $message = str_replace("\n","<br>",$message);

  $s = "<b>Добавлено: ".$name."</b><br>".$message."<p>";

// записываем его в файл
  $f = fopen($data, "a");
  fputs($f, stripslashes($s));
  fclose($f);
  
// уведомление администратора о новом сообщении
  if ($notify) @mail($admin_email, "НОВОЕ СООБЩЕНИЕ", 
  "В Гостевую книгу добавлено новое сообщение!", "From: $email");

  echo "Сообщение успешно добавлено!<br>";
  echo "<a href=\"index.php\">Вернуться в гостевую книгу</a>";
	
  include $footer;

?>
рекомендуем также:

Веб-сервисы.
Для профессионалов

Understanding Web Services: XML, WSDL, SOAP and UDDI, Eric Newcomer
[Заказать]

Теперь давайте рассмотрим работу этого скрипта:

1. Функция show_form() выводит html-форму добавления сообщения. Как Вы видите, ей передается необязательный параметр $s="", а также через раздел global все переменные формы. Эти переменные подставляются в поля формы при повторном ее вызове, чтобы пользователь не заполнял их повторно. Важный момент - форма содержит скрытое поле a (<input type=hidden name=a value=1>), которое передает переменную $a=1. Тут и скрыт алгоритм вызова формы. Работает он следующим образом:

  • Выполнение скрипта начинается с проверки на существование файла с данными гостевой книги. Далее проверяется, установлена ли переменная $a, которая передается из формы. По сути, здесь проверяется, выводилась ли форма и если нет (переменная $a не установлена), она выводится.
  • Далее в форме вместе с данными передается параметр $a и скрипт вызывается еще раз путем нажатия кнопки "Добавить сообщение" (submit). Теперь он видит эту переменную и продолжает выполнение.

2. Далее проверяется, заполнены ли обязательные поля $name и $message. Email и адрес сайта пользователь может не указывать - ведь сайта у посетителя может и не быть, а Email хотят указывать не все. Здесь и нужен необязательный параметр функции $s="". В случае, если какое-то из полей не заполнено, в нем передается сообщение об ошибке и форма вызывается снова. Как видите, в show_form() проверяется, заполнен ли этот параметр. Если он присутствует - то строка $s выводится на экран.

3. Следующий шаг - формирование сообщения. В первую очередь формируется заглавная строка путем преобразования переменной $name. Тут все просто: если пользователь указал Email, то его имя окружается тэгом <a href="mailo:указанный_email">Имя</a>. То же самое происходит с адресом сайта (переменная $url). После этого добавляется дата и в сообщении пользователя заменяются все тэги html, а также символы переноса строки на тэги <br>.

4. Теперь сообщение записывается в файл данных (data/guest.dat). Для этого файл открывается с параметром "a" (добавление в конец файла).

5. И последний важный шаг - отправка уведомления о новом сообщении администратору. Если задана переменная $notify, то с помощью функции mail() сообщение отправляется. На случай, если Вы не знакомы с функцией mail() объясню ее синтаксис. mail() принимает 4 параметра. Первый - это email, на который нужно отправлять сообщение. Второй - это тема письма, третий - текст сообщения, а четверый - дополнительные RFC заголовки. В них мы указываем параметр "From: ", то есть от кого пришло сообщение. В качестве "From: " указывается Email пользователя, добавившего сообщение.

6. Под конец выводится строка "Сообщение успешно добавлено!" и файл с нижней частью документа.

Вывод сообщений

Как Вы помните из структуры программы, выводим сообщений занимается файл index.php. Рассмотрим его код:

<?

// подключаем файл с данными
   include "inc.php";
   
// выводим верхушку документа
   include $header;

// проверка на существование файла с данными гостевой книги
   if (!file_exists($data))  { 
      echo "Ошибка! Файл с данными отсутствует!";
      include $footer;
      exit();
   }
   
// проверка количества сообщений. 
// если файл пустой - пишем, что сообщения отсутствуют.
   $f = file($data);
   if (!count($f)) { 
      echo "Сообщения в гостевой книге отсутствуют.<br>".
      "<a href=\"add.php\">Добавить сообщение</a>";
      include $footer;
      exit();
   }

// выводим все сообщения
   echo "<a href=\"add.php\">Добавить сообщение</a><hr>";
   echo implode($f,"");
   echo "<hr><a href=\"add.php\">Добавить сообщение</a>";
   include $footer;

?>

Как видите, скрипт очень простой. Думаю, нет необходимости отдельно описывать его алгоритм, основная работа понятна из комментариев и объяснений к предыдущему скрипту.

Задачи для самостоятельной работы

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

  1. Вы можете очень просто добавить скрипт администрирования (удаления и редактирования сообщений). Для этого придется модифицировать формат хранимых сообщений. Подсказка: можно сделать файл данных таким образом, чтобы отдельные сообщения хранились на разных строках в файле guest.dat, а поля сообщения разделялись каким-нибудь специальным символом (только не забудьте заменить этот символ в добавляемом сообщении, а также символы переноса строки "\n" ! Переносы можно заменить на "<br>"). База сообщений может выглядеть так:
    1~имя~email~url~сообщение
    2~имя~email~url~сообщение
    3~имя~email~url~сообщение
    
    Потом, например, для удаления, Вы можете загружать этот файл в массив и записывать его обратно исключая какую-либо строку. При этом, понятно, придется модифицировать и вывод сообщений - формировать вид и дизайн сообщения придется используя несколько разных полей из файла данных. Пример (не претендующий на полноту алгоритма):
    <?
    // в примере удаляем сообщение N5
       $del = 5;
       $db = file($data);
       $f = fopen($data,"w");
    
       for ($i=0;$i<count($db);$i++)
          if (($i+1)!=$del) fputs($f, $db[$i]);
    
       fclose($f);
    ?>
    

  2. В гостевой книге сначала выводятся сообщения, добавленные позже, а более ранние выводятся в конце. Вы можете сделать наоборот - так будет удобнее.

  3. Если Вы модифицировали базу, можете сделать разбивку на страницы (например по 10 сообщений на странице).

  4. Можно ввести цензор слов. Например, все неприличные слова могут удаляться при добавлении сообщения или заменяться на символы "ххх".

  5. Если пойти еще дальше, то можно сделать базу нецензурных слов и возможность ее администрирования.

  6. Сделайте смайлики, то есть чтобы символы ":)", ":\", "8-)" и т.п. заменялись при выводе на соответствующие картинки (по сути на url к этим картинкам).

Профессиональное руководство по SQL Server: хранимые процедуры, XML, HTML

Профессиональное руководство по SQL Server: хранимые процедуры, XML, HTML
[Заказать]

Это основные идеи. Однако они (особенно модификация базы) являются основой скрипта уже совсем другого уровня :) Попробуйте сделать и, возможно, придумать что-то свое. Ведь после освоения новой информации главный шаг - ее закрепление. Только одна просьба - если Вы модифицируете скрипт, поделитесь своим творчеством с общественностью на форуме вебмастеров WebTalk.ru. Многие будут Вам благодарны!

Заключение

Как видите, написать гостевую книгу совсем не сложно. Конечно, этот пример является лишь основой для настоящего скрипта, но вполне достаточен для новичка. Теперь Вы сами можете написать гостевую книгу. Если раньше для Вас это было проблема - считайте что Вы сделали большой шаг вперед :).

Удачи Вам! И заходите на наш форум.

С уважением, Дмитрий
Сайт: WebTalk.ru - форум вебмастеров

Оригинал статьи, комментарии, мнения и исходники: http://www.webtalk.ru/showthread.php?s=&threadid=35

Разрешено любое распространение при сохранении всех копирайтов.

Статьи по теме:

Спонсор раздела

Рассылки Subscribe.ru:

Библиотека сайтостроительства - новости, статьи, обзоры
Дискуссионный лист для web-разработчиков
Подписка на MailList.Ru
Автор: NunDesign
Другие разделы
Оптимизация сайтов
Web-студии
» Новое в разделе
Web-дизайн
Web-программирование
Интернет-реклама
Раскрутка сайта
Web-графика
Flash
Adobe Photoshop
Рассылка
Инструменты вебмастера
Контент для сайта
HTML/DHTML
Управление web-проектами
CSS
I2R-Журналы
I2R Business
I2R Web Creation
I2R Computer
рассылки библиотеки +
И2Р Программы
Всё о Windows
Программирование
Софт
Мир Linux
Галерея Попова
Каталог I2R
Партнеры
Amicus Studio
NunDesign
Горящие путевки, идеи путешествийMegaTIS.Ru

2000-2008 г.   
Все авторские права соблюдены.
Rambler's Top100