Иллюстрированный самоучитель по PHP

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

В каждую страницу, на которой располагается гостевая книга, следует включить такой сценарий:

<?php
$nоm="имя (без расширения) web-страницы, на которой расположена гостевая книга";
include ("niz.php");?>

Ну а файл niz.php должен содержать весь остальной код:

<?рhр
$dirct="gb"; if ($otziv!="")
{
$otznam=$nom.time();
$hdl = fopen("$dirct/$otznam", "w+"); fwrite($hdl,nl2br(strip_tags($HTTP_POST_VARS['ot ziv'])));
fclose($hdl);
}
$hdl=opendir($dirct); while ($file = readdir($hdl))
{
if (strstr($file, $nom)==True) { $a[]=$file;
$l=sizeof($a); if ($l!=0)
{
rsort($a);
foreach ($a as $k)
include ("$dirct/$k");
echo ("<br>(разделитель сообщений)");

Ваш комментарий:

<form method="post" action="<?php echo ("$nom".".php");?>" name="form">
<textarea name="otziv" cols="60" rows="10" wrap="virtual"></textarea>
<input name="submit" type="submit" value="Послать отзыв"></form>

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

Хотя в принципе указывать в сценарии имя файла в качестве индекса гостевой книги не надо. В начало кода в файле niz.php можно включить код, который бы этот самый индекс определял бы автоматически. Скажем, брал бы значение переменной $PHP_SELF – она содержит имя текущего файла вместе с путем к нему от корневой директории сайта (даже если она находится в файле, включенном в текущий с помощью оператора include), скажем, "/guestbooks/gbOl.php", а затем вытаскивал из него само это имя.

В РНР версии 4.1 и выше имя файла без расширения можно узнать командой basename (), указав в ее параметрах это самое расширение:

$nom=basename($PHP_SELF, ".php");

Примечание
Команда basename выделяет имя файла из его полного имени, указанного в ее параметре – вместе с путем по дереву директорий. Начиная с РНР версии 4.1, в ней можно также указывать расширение, которое должно быть отброшено в том случае, если оно будет найдено в имени файла. До версии 4.1 возможности только с помощью этой команды узнавать имя файла без расширения нет
.

В РНР версии до 4.1 команда basename () имя файла без расширения выдать не сможет, однако расширение можно отбросить путем использования команды substr, указав в ее третьем параметре отрицательную величину – число символов от конца строки, которые не должны включаться в выделяемую строку (подробнее см. Главу 8):

$nom=substr(basename($PHP_SELF), 0, -4);

Если эту команду определения имени файла без расширения включить в самое начало кода файла niz.php, то установку значения переменной Snom на web-страницах, содержащих гостевые книги, можно убрать – достаточно одного оператора include:

<?php include ("niz.php"); "?>

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

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.