С
первых дней World Wide Web разработчики сайтов стремились к тому, чтобы посетители
могли поделиться своими мыслями и комментариями по поводу сайта. На сайтах эта
возможность обычно называется <гостевой книгой> (guestbook). Я покажу, как
легко создать гостевую книгу при помощи форм HTML, средств обработки форм РНР
и текстового файла.
Прежде всего создается инициализационный файл, содержащий
некоторые глобальные переменные и функции приложения (листинг 10.10).
Листинг
10.10. Файл init.inc, используемый при создании гостевой книги
<?
//
Файл: init.inc
// Назначение: глобальные переменные и функции для проекта
гостевой книги
// Заголовок страницы по умолчанию
$title = "My
Guestbook";
// Цвет фона
$bg_color = "white": /
//
Гарнитура шрифта
$font_face = "Arial, Verdana, Times New Roman";
//
Цвет шрифта
$font_color = "black";
// Дата отправки $post_date
- date("M d y");
// Файл данных гостевой книги
$guest_file
= "comments.txt";
// Функция читает данные гостевой книги
//и
отображает их в браузере
function view_guest($guest_file) {
GLOBAL
$font_face, $font_color;
print "Return to <a href=\"index.php\">index</a>,<br><br>";
//
Если в файле гостевой книги имеются данные...
if (filesize($guest_file)
> 0) :
// Открыть файл данных гостевой книги
$fh = fopen($guest_file.
"r") or die("Couldn't open $guest_file");
print "<table
border=1 cellpadding=2 cellspacing=0 width=\"600\">";
//
Повторять до конца файла
while (! feof($fh)) :
// Прочитать следующую
строку
$line <= fgetsdfh, 4096);
// Разбить строку на компоненты
//
и присвоить каждый компонент переменной
list($date. $name, $email, $comments)
= explode("|", $line):
// Если указано имя посетителя, вывести
его
if ($name != "") :
print "<tr>":
print
"<td><font color=\"$font_co!or\"
face=\"$font_face\">Date:</font></td>";
print
"<td><font color=\"$font_color\"
face=\"$font_face\">$date</font></td>";
print
"</tr>";
print "<tr>";
print "<td><font
color=\"$font_color\"
face=\"$font_face\">Name:</font></td>";
print
"<td><font color=\"$font_color\"
face=\"$font_face\">$name</font></td>";
print
"</tr>";
print "<tr>";
print "<td><font
color=\"$font_color\"
face=\"$font_face\">Email:</font></td>";
print
"<td><font color=\"$font_color\"
face=\"$font_face\">$email</font></td>";
print
"</tr>";
print "<tr>";
print "<td
valign=\'top\"><font color=\"$font_color\"
face=\"$font_face\">Message:</font></td>";
print
"<td><font color=\"$font_color\"
face=\"$font_face\">$comments</font></td>";
print
"</tr>";
print "<tr><td colspan=\"2\"> :</td></tr>";
endif;
endwhile;
print
"</table>";
// Закрыть файл
fclose($fh);
else
:
print "<h3>Currently there are no entries in the guestbook!</h3>";
endif;
}
// view_guest
// Функция сохраняет новую информацию в файле данных
function
add_guest($name, $email, $comments) {
GLOBAL $post_date, $guest_file;
//
Отформатировать данные для ввода ,
$contents = "$post_date|$name|$email
|$comments\n";
// Открыть файл данных
$fh = fopen($guest_file.
"a") or dieC'Could not open $guest_file!");
// Записать данные
в файл
$wr = fwrite($fh, $contents) or die("Could not write to $guest_file!");
//
Закрыть файл fclose($fh);
} // add_guest
?>
Затем создаются
еще три файла: файл ссылок index.php, файл add_guest.php для вывода информации
гостевой книги и файл view_guest.php для ввода новых данных. Файл index.php (листинг
10.11) просто отображает две ссылки для выполнения основных функций гостевой книги
- просмотра и добавления новых данных. Эти ссылки легко включаются в сайт, имеющий
более сложную структуру.
Листинг 10.11. Файл index.php со ссылками для просмотра
и добавления новых данных в гостевую книгу
<html>
<?
INCLUDE("init.inc");
?>
<head>
<title><?=$page_title;?></title>
</head>
<body
bgcolor="<?=$bg_color;?>" text="#000000" link="#808040"
vlink="#808040" alink="#808040">
<a href="view_guest.php">View
the guestbook!</a><br>
<a href="add_guest.php">Sign
the guestbook!</a><br>
</body>
</html>
Файл
view_guest.php (листинг 10.12) выводит всю информацию гостевой книги, хранящуюся
в файле данных.
Листинг 10.12. Файл view_guest.php
<html>
<?
INCLUDE("init.inc");
?>
<head>
<t1tle><?=$page_title;?></t1tle>
</head>
<body
bgcolor="<?=$bg_color:?>" text="#000000" link="
vlink="#808040" alink="#808040">
vi ew_guest ( $guest_file
);
?>
Файл add_guest.php (листинг 10.13) запрашивает у пользователя
новые данные для внесения в гостевую книгу. Введенная информация записывается
в файл данных.
Листинг 10.13. Файл add_guest.php
<html>
<?
INCLUDE("init.inc");
?>
<head>
<title><?=$page_title:?></title>
</head>
<body
bgcolor="#ffffff" text="#000000" link="#808040"
vlink="#808040" alink="#808040">
?<
// Если
форма еще не отображалась - запросить данные у пользователя
if (! $seenform)
:
?>
<form action="add_guest.php" method="post">
<input
type="hidden" name="seenform" value="y">
Name:<br>
<input
type="text" name="name" size="15" maxlength="30"
value=""><br>
Email:<br>
<input type="text"
name="email" size="15" maxlength="35" value=""><br>
Comment:
<br>
<textarea name="comment" rows="'3" cols="40"></textarea><br>
<input
type="submit" value="submit">
</form>
//
Форма уже отображалась - добавить данные в текстовый файл.
else :
add_guest($name,
$email, $comment);
print "<h3>Your comments have been added to
the guestbook.
<a href=\"index.php\">Click here</a>
to return to the index. </h3>";
endif;
?>
К числу
основных преимуществ модульной разработки приложений относится простота адаптации
для других систем. Допустим, вы решили перейти от хранения данных в текстовом
файле к использованию базы данных. Стоит изменить содержимое add_guest( ) и view_guest(
), и ваша гостевая книга перейдет на работу с базой данных.
На рис. 10.8
показано, как выглядит гостевая книга после сохранения пары записей.

Рис. 10.8. Просмотр гостевой книги (view_guest.php)
Информация, показанная
на рис. 10.8, хранится в файле данных в следующем виде:
Oct 29 00|Michele|michelle@latorre.com|I
love cheese!
Oct 29 00|Nino|nino@latorre.com|Great site!