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

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

Теперь осталось разместить на странице форму для добавления нового сообщения. В ее заголовке укажем имя файла, в котором будет размещен код добавления нового отзыва – допустим, это otziv.php:

<form method="post" action="otziv.php">

Чтобы обойтись одним файлом-обработчиком новых отзывов, передадим ему в скрытом поле формы индекс гостевой книги – чтобы обработчик знал, к какой книге относится переданное ему сообщение. Для удобства назовем его так же, как и переменную, содержащую индекс – nom.

<input name="nom" type="hidden" value="<?php echo $nom;?>">

Комментарий
Скрытое поле (типа hidden) не отображается в браузере, однако передается вместе с формой
.

Ну и – непосредственно поле ввода сообщения, уже, ясное дело, не скрытое:

<textarea name="otziv" cols="60" rows="10" wrap="virtual"></textarea>

И вездесущая кнопка отправки формы:

<input name="submit" type="submit" value="Добавить отзыв"></form>

Теперь осталось сделать программу-обработчик новых отзывов. Как это ни удивительно, но она уместится всего в пять строк. Разместить ее надо в том файле, имя которого указано в заголовке формы для ввода сообщения – в нашем случае это otziv.php (см. рис. 9.2).

<?php

Укажем сценарию имя папки с отзывами:

$dirct="gb";

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

Сгенерируем имя для нового файла с сообщением – просто соединим вместе индекс гостевой книги и временную метку Unix, полученную функцией time():

$otznam=$nom.time();

Как вы помните, при передаче сценарию РНР информации через форму значения ее полей записываются в переменные, имена которых соответствуют значениям параметров пате этих полей, поэтому индекс гостевой книги, переданный через поле формы с именем пот, и оказался в переменной Snom.

Теперь создадим новый файл со сгенерированным именем и откроем его для записи – все это делается одной командой – fopen с параметром w+.

Примечание
Для того чтобы из программы на РНР считать содержимое какого-либо файла или записать в него данные, этот файл нужно сначала открыть – командой fopen (так уж устроен РНР). При этом открытому файлу присваивается некое "внутреннее имя" – так называемый дескриптор, и именно его возвращает функция fopen. Первый параметр fopen – имя файла (вместе с относительным или абсолютным путем к нему), второй – способ открытия файла
.

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

  • r – открыть файл только для чтения и приготовиться читать его с начала.;
  • r+ – открыть файл для чтения и для записи и приготовиться работать с ним с его начала;
  • w – открыть файл только для записи, предварительно удалив из него все содержимое, причем если файл с указанным именем не существует, то создается новый файл с таким именем;
  • w+ – открыть файл как для записи, так и для возможного последующего чтения, предварительно удалив из него все содержимое, причем если файл с указанным именем не существует, то создается новый файл с таким именем;
  • а – открыть файл только для записи и приготовиться дописывать данные в его конец. Если файл с указанным именем не существует, то создается новый файл с таким именем;
  • а+ – открыть файл для записи и для чтения и приготовиться дописывать данные в его конец. Если файл с указанным именем не существует, то создается новый файл с таким именем.
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.