Гостевая книга
Теперь осталось разместить на странице форму для добавления нового сообщения. В ее заголовке укажем имя файла, в котором будет размещен код добавления нового отзыва – допустим, это 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+ – открыть файл как для записи, так и для возможного последующего чтения, предварительно удалив из него все содержимое, причем если файл с указанным именем не существует, то создается новый файл с таким именем;
- а – открыть файл только для записи и приготовиться дописывать данные в его конец. Если файл с указанным именем не существует, то создается новый файл с таким именем;
- а+ – открыть файл для записи и для чтения и приготовиться дописывать данные в его конец. Если файл с указанным именем не существует, то создается новый файл с таким именем.