PHP 4 на практике

       

Проект: гостевая книга


С первых дней 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\">&nbsp:</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!


Содержание раздела