"ВОКРУГ САЙТА" www.vokrug-saita.ru

как создать сайт самостоятельно

Главная Рассылка Секрет Автор сайта

Уроки PHP для начинающих


Как создать сайт на PHP - легко, быстро, ПРОФЕССИОНАЛЬНО?

Скрипт добавления комментариев на сайте: создаём скрипт-обработчик формы

На самом деле я не стану давать здесь разработку скрипта с нуля. В Сети можно найти много разных безплатных скриптов. Просто нужно уметь некоторые скрипты немного доработать. Чем и займёмся в этом уроке.

Этот скрипт мне попался давным-давно, я даже не помню уже где. Тогда я только начинал интересоваться сайтостроением вообще и php в частности. А потому подогнал его под свои нужды, насколько хватило разумения. И, надо сказать, скоро уж два года, как всё работает, следовательно, разумения всё-таки хватило. Сегодня делюсь своим скромным опытом.

Это довольно простой скрипт...

Итак, вот сам скрипт, как он был изначально. (Можете заменить приведённым ниже кодом полностью код в файле index.php, созданном в прошлом уроке для экспериментов с добавлением комментариев.)

<?php
$gbpath="gb.dat";// Путь к файлу с записями
if(!file_exists($gbpath))// проверяем есть ли файл $gbpath 
{
// если отсутствует, то создаем его
$f=fopen($gbpath,"w") or die ("Не могу создать файл"); // создание файла
flock($f,2) or die("Невозможно заблокировать файл"); // блокируем файл
fwrite ($f,"",0); // имитация записи в него
@chmod($f, 0664); // установка прав на запись
fclose($f); // Закрытие созданного файла
}
if(getenv("REQUEST_METHOD")=="POST"){// проверяем, если метод запроса POST
// то значит скрипт вызван формой записи сообщения
$f=fopen($gbpath,"r") or die("Не могу открыть файл"); // Открываем файл для чтения
$oldData = fread($f, filesize ($gbpath)); // считываем данные
fclose($f); // закрываем файл
$f=fopen($gbpath,"w+") or die("Не могу открыть файл"); // открываем файл для дописи
flock($f,2) or die("Невозможно заблокировать файл"); // блокируем файл
fputs($f,"$name\n"); // записываем имя автора
fputs($f,"$email\n"); // его e-mail
$text=ereg_replace("\n"," ",$text);// убираем возвраты каретки из сообщения
fputs($f,"$text\n"); // записываем сообщение
fwrite($f,$oldData); // записываем прежние данные
fclose($f); // закрываем файл
}
// Вывод заголовка гостевой
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html xmlns="undefined">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>
Гостевая книга - Добавляем комментарии на сайте.</title>
</head>
<body>

<?php
$f=fopen($gbpath,"r") or die("Не могу открыть файл");// открываем файл с записями
while(1){// вырожденный цикл, для чтения записей из файла
$name=fgets($f,1000);// считываем имя автора
$email=fgets($f,1000);// его e-mail
$text=fgets($f,1000);// сообщение
if(feof($f)) break; // если записей больше нет выходим из цикла
// Выводим данные
echo "<hr>Автор:<a href=mailto:$email>$name</a><br>";
echo "Сообщение:<br>$text<br>";
}
fclose($f);// закрываем файл
// форма для записи сообщения
?>
<p align="center">Разбираюсь со скриптом для добавления комментариев.</p>
<div align="center">
<form action="" method="post">
<p> <label>
Ваше имя <font color="#FF0000">* </font>:</label> <br>
<input type="text" name="name"></p>
<p> <label>
E-mail: </label><br>
<input type="text" name="email"></p>
<p> <label>
Сообщение <font color="#FF0000">* </font>:<br>
<textarea name="text" cols="40" rows="5"></textarea></label></p>
<p>
Введите сумму чисел с картинки <font color="#FF0000">* </font>:<br>
<img src="images/sum.gif" width="80" height="50" border="1">
=
<input name="summa" type="text" size="10" maxlength="5"></p>
<p><input type="submit" value="Добавить комментарий"></p>
</form>
</div>
</body>
</html>

* Форма в этом скрипте уже заменена на созданную в прошлом уроке. Как и названия всех переменных.

Скритп работает... Однако есть в нём несколько недостатков, которые следует исправить.

Недостаток 1. Его вы обнаружите, запустив скрипт в браузере первый раз: вылезет следующее сообщение:

Warning: fread(): Length parameter must be greater than 0. in z:\home\php\www\index.php on line 16

Сообщение говорит, что "Длина параметра должна быть больше, чем 0" и указывает на строку 16 в скрипте:

$oldData = fread($f, filesize ($gbpath)); // считываем данные

Это и естественно: программа не понимает, как это можно считать данные, если их нет. То есть, такой глюк вылезет только при первом обращении к скрипту. После того, как в файле gb.dat появится первая запись, сообщений об ошибке не будет. Попробуйте - убедитесь.

Недостаток 2. Нет проверки, полностью ли заполнена форма.

Недостаток 3. Нет защиты от вредоносного кода.

Недостаток 4. Нет защиты от спама и флуда, от нецензурных высказываний (ессно, последнее не обязательно, возможно, кому-то такие надписи нравятся, что ж...).

Недостаток 5. Скрипт находится вместе с формой в одном файле и, значит, увеличивает вес страницы. Практичней поместить скрипт в отдельный файл. Этот скрипт будет один для всех страниц, на которых будет размещаться форма для комментариев.

В общем, это примерный список наших задач, если что-то придёт в голову по ходу, дополним.

Итак, поехали

Автор: Андрей Чернобай

P. S. Подпишитесь на безплатную рассылку Вокруг Сайта и получайте на свой электронный адрес новые уроки по созданию сайта.

P. S. 2. Как сделать сайт на PHP - ПРОФЕССИОНАЛЬНО?

Оставьте свой отзыв о статье:



Введите цифровой код с картинки*:

Подпишитесь на рассылку
"Вокруг Сайта "
и получайте на свой e-mail уроки, книги, статьи, скрипты, а также подарки и скидки на товары, продаваемые с сайта


Узнать подробней о рассылке "Вокруг Сайта" >>




PHP-песочница
Подписаться письмом



Карта
rss
Карта