Ваш первый Сайт С использованием РНР-скриптов
СОЗДАНИЕ КНИГИ ОТЗЫВОВ ПОСЕТИТЕЛЕЙ САЙТА
Теперь напишем код для книги отзывов. В браузер будет выведена одноколонная таблица с последними 10 отзывами (можете сделать больше или меньше). Далее расположится форма с текстовыми полями для ввода данных посетителя. Ну и потом следует текстовая область для ввода отзыва и кнопка для запуска программы обработки данных. Сделает все это программа Soobshenie.php. На рис. 6.5 изображена часть сграницы statji.php, а именно, то место где расположены отзывы, поля для ввода данных от посетителя и текстовая область с кнопкой для ввода и отправки отзыва.
Но сначала в рабочей папке htdocs создайте новую подпапку otzivi. Там у нас будут храниться текстовые файлы отзывов. В уже знакомом нам РНР - редакторе создайте новый файл и сохраните его под названием soobshe- nie.php. Вообще можете назвать этот файл как угодно, например otziv.php. Естественно, и вставлять его на страницы нужно будет под этим именем. Но я назвал файл вывода отзывов soobshenie.php. С этим именем, при помощи оператора include, я его и вставил на страницу statji.php. Код вам должен быть уже понятен. Данная программа (листинг 6.4) осуществляет вывод в колонку отзывов, сохраненных в обыкновенном текстовом файле, выводит форму для ввода данных пользователем и обрабатывает эти данные.
Листинг 6.4 (файл Soobshenie.Php) <Html> <Head>
<Ш1е>Сообщения<АШе>
</head>
<body>
<div Id="loIoЗ">Здecь вы можете оценить подборку и оставить свое Coo6UieHHe</div><br>
<table width="50%" border="2" bordercolor=" green" bgcoIor="silver"><trxtd> <?php
$filen=" otzi vi/$ind ".". txt"; $chislo=10;
If(!file_exists($filen)) {
$open=fopen($filen, "w");
Fclose($open);
}
$lolo=file($filen); krsort($lolo);
Foreach($lolo as $line2)
{
$j++;
If($j<=$chislo) {
Echo $line2."<brxbr>"; }
}
Echo "</tdx/trx/table>";
If(isset($_POST [ 'otziv* ]))
{
$ind=$_POST[4nd'];
$filen="otzivi/$indM. M.txt";
$otziv=$_POST['otziv'];
$data=date(,d. m.Y');
$iшja=$_POST['imja,];
$adress=$_POST['adress'];
$nov=fopen($filen, "a");
$danie=strip_tags($imja).M e-mail: ".strip_tags($adress)." Добавлено: ".$data; fwrite($nov, "<B
Style=color:#000066>M.$danie."</B><br>".strip_tags($otziv).chr(13).chr(10)); fclose($nov);
Echo "<a href=# onClick='history. back()'xbutton>BepHyTbCH</buttonx/a>";
}
Else {
Echo "<form action=soobshenie. php method=POST> Ваше Имя: <input type=text name=imjaxbr> Ваш e-mail: <input type=text name=adress><br> Ваше Сообщение<Ьг>
<textarea name=otziv cols=50 rows=15 wrap=virtualx/textarea> <input type=hidden name=ind value=$ind>
<input type=SUBMIT Уа1Ие=Добавить>
</form>"; }
?>
</body> </html>
Я объясню лишь некоторые строки кода:
<div id="lolo3">3decb Вы можете оценить подборку и оставить свое сооб - UEHue</div><br> - выводим надпись в контейнере <div>. Идентификатор 1о1оЗ задает тип и цвет шрифта надписи. Этот идентификатор и его параметры должны быть указаны в файле стилей stil.css. А сам файл стилей указан на странице statji.php, куда будет вставлен этот код;
< table width="50%" border^" 2 " bordercolor= "green" bgcolor= "silver "> <tr><td> - делаем одноколонную таблицу, задаем ее цвет линий и фона;
$fden="otzivi/$ind".".txt"; - присваиваем переменной $fden путь к текстовому файлу отзывов. Он у нас будет находиться в папке otzivi. Название этого файла будет соответствовать названию той страницы, куда мы вставим этот код. Название страницы без расширения у нас в переменной Bind. Эта переменная у нас определена на странице statji.php. А поскольку данный код мы вставляем именно на ту страницу, то переменная $ind будет определена и в этом коде. Расширение «.txt» мы присоединяем к названию файла при помощи точки или оператора конкатенации. Само расширение тоже, естественно, должно начинаться с точки. В итоге в нашем случае текстовый файл с отзывами будет называться statji.txt,
$chislo=10; - в этой переменной будем хранить число вывода последних отзывов в браузер. Можете изменить его на свое усмотрение;
If(!fde_exists($fden)) - если файла с отзывами еще нет (данный код запускается впервые), то он будет создан (следующие две строки в фигурных скобках под номером 1);
Ц
$Ореп = fopen (Sfilen, "w"); fclose(Sopen); i}
$lolo=fde($fden); - при помощи функции fde создаем массив строк (отзывов) и присваиваем этот массив переменной $lolo
Krsort(Slolo); - сортируем массив в обратной последовательности, чтобы более свежие отзывы были наверху;
Foreach($lolo as $line2) - далее идет известный вам цикл, который построчно выводит 10 отзывов в окно браузера. Принцип его работы я объяснять не буду, поскольку это уже было сделано в прошлых главах;
2{ $j++;
If(Sj<=Schislo)
Echo $Нпе2. "<br><br> ";
3} 2} ■
Echo "</td></tr></table>"; - закрываем таблицу с отзывами посетителей;
If(isset($_POST['otziv'])) - далее идет условие. Мы проверяем, получен ли элемент суперглобального массива $_POST['otziv']. Дело в том, что именем Otziv мы назвали текстовую область формы (форма создается ниже, в конце этого же кода), в которую посетитель будет вводить новый отзыв. Программный код в фигурных скобках под номером 4 выполнится только тогда, когда посетитель записал свой отзыв и нажал на кнопку формы «Добавить». Если кнопка еще не нажата и данные формы не отправлены, этот программный код (в фигурных скобках под номером 4) выполняться не будет!
4{
$ind=$ POST ['ind']; - здесь мы переменной $ind присваиваем значение элемента суперглобального массива $ POST ['ind']. Вы спросите, а зачем мы это делаем, ведь этой переменной мы присвоили название файла, куда мы вставляем весь этот код листинга 6.4? Дело в том, что при нажатии кнопки Добавить» посетитель перейдет снова на эту же страницу (Soobshenie.php), поскольку в теге формы <form> (см. окончание этого кода) мы указали именно эту страницу, а не statji.php, где мы определили переменную Bind. Получается, что после нажатия кнопки «Добавить», переменная $ind опять будет не определена. Но до нажатия кнопки эта переменная еще будет иметь значение statji. Как же это значение вновь передать на эту же страницу soobshenie.php после нажатия кнопки? Сделать это просто. В форме у нас есть скрытое поле (Type=hiddenj с именем name=ind. С помощью этого поля в параметре value мы и передаем при отправке данных значение statji на эту страницу. Как и все передаваемые из формы данные, это значение помещается в суперглобальный массив $_POST (в теге формы был выбран метод передачи Method=POST). И поскольку мы присвоили скрытому полю имя ind, значение Statji будет находиться в элементе этого массива $ POST ['ind']. Вот и все, теперь значение statji мы опять присваиваем как бы вновь созданной переменной $ind;
$fden="otzivi/$ind".".txt"; - снова присваиваем переменной $filen путь к текстовому файлу отзывов;
$otziv=$_POST['otziv']; - переменной Sotziv присвоено значение суперглобального массива $_POST['otziv'], в котором находится введенный посетителем отзыв;
$data=date('d.m.Y'); - в переменной $data сохраняем текущую дату в формате: день. месяц. год
$imja=$_POST['imja']; - в переменной $imja сохраняем содержимое текстового поля с именем name=imja, куда посетитель вводит имя;
$adress=$_POST['adress'J; - в переменной $ adress сохраняем содержимое текстового поля с именем name=adress, куда посетитель вводит свой e-mail;
$nov=fopen($fden, "а"); - итак, данные из формы получены. Теперь их надо записать в текстовый файл для отзывов. Открываем файл для записи. Второй аргумент ("А") функции fopen говорит о том, что новые данные будут записываться в конец файла. Открытому файлу присваиваем идентификатор $nov;
$danie=strip_tags($imja)." e-mail: ".strip_tags($adress)." Добавлено: ".$data; - Создаем строку с полученными данными от посетителя и датой отправки. Эту строку мы добавим перед отзывом. В начале строки ставим введенное посетителем имя. Функция strip tags удалит все теги и слэши, если вдруг они были введены посетителем. Зачем это нужно, объяснено в разд. 6.1. Затем, используя точку (оператор конкатенации) и кавычки для ввода текста, ставим введенный пользователем e-mail. После этого добавляем в эту строку текущую дату; •
Fwrite($nov, "<В sty le=color :#000066>".$danie." </В>
<br>".strip_tags($otziv).chr(13).chr(10)); - используя функцию fwrite, записываем в текстовый файл для отзывов то, что написано во втором аргументе этой функции. А второй аргумент у нас длинный (в одну строчку не уместился). На самом деле ничего сложного в нем нет. Созданную в прошлой программной строке переменную Sdanie помещаем между тегами <В> и </В>, которые задают тип и цвет шрифта. Это сделано для красоты. Цвет и шрифт можете задать свой. Оператор <br> отделяет строку Sdanie от текста отзыва, который у нас в переменной $otziv. Этот текст тоже нужно обработать функцией strip Jags. Далее идут 2 символа chr(13) и chr(10). Вместе они обозначают перевод строки. Нам нужно, чтобы отзыв очередного посетителя начался с новой строки. Вместо данных символов можно применить символ «п», как мы это делали при записи в файл новостей в прошлой главе, но использование комбинации из двух символов chr(13) и chr(10) более предпочтительно;
Fclose($nov); - после записи закрываем текстовый файл;
Echo "<а href=# onClick='history. back()'><Ъииоп>Вернуться</ЬиПоп></a> "; - Вывод в браузер кнопки для возврата на предыдущую страницу. Запомните эту строку кода. После того как мы нажмем кнопку «Добавить» для отправки данных в форме, мы попадем на эту же страницу soobshenie.php. Но нам же нужно вернуться опять на страницу statji.php. Для этого и существует кнопка «Вернуться». Данная команда универсальна. С какой бы страницы вы ни пришли, т. е. в какую бы страницу вы ни вставили бы данный код soobshenie.php, вы все равно вернетесь на предыдущую страницу;
4} - конец блока команд, который будет выполняться только тогда, когда в форме нажата кнопка «Добавить»-,
Else - если кнопка «Добавить» еще не нажата, то просто загрузится форма для ввода данных и отзыва посетителя. Эта форма появится сразу после загрузки страницы со статьями statji.php, поскольку страница с этим кодом (soobshenie.php) будет вставлена в нее при помощи оператора include
(см. листинг 6.3);
{
Echo "<form action=soobshenie.php method=POST> - далее выводится форма.
Смысл вводимых элементов (2 текстовых поля для ввода имени и адреса,
Текстовой области для записи отзыва, скрытого поля и кнопки «Добавить»)
Разобран выше в этом коде.
Ваше Имя: <input type=text name=imja><br>
Ваш e-mail: <input type=text name=adress><br>
Ваше Сообщение<Ьг>
<textarea name=otziv cols=50 rows=15 wrap=virtual> </textarea> <input type=hidden name=ind value=$ind> <input type=SUBMIT Уа1Ие=Добавить>
</form> "; }
?>
</body> </html>