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


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

Итак, вот наш скрипт в файле comments.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); // закрываем файл
}
$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);// закрываем файл
?>

Первое, что сделаем, - добавим проверку на заполненность формы (новый код зелёным):

<?php
if (empty ($name) or empty ($email) or empty ($text)) //если перечисленные переменные отсутствуют
//выводим следующее сообщение
{
echo "Форма заполнена не полностью!";
exit (); //и останавливаем выполнение программы
}
else
{

$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); // закрываем файл
}
}
$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);// закрываем файл
?>

Обратите внимание: здесь я использовал конструкцию if (empty ($name) or empty ($email) or empty ($text)) вместо ранее использовавшейся if ( ($name == 0) || ($email == 0) || ($text == 0)). Смысл в обоих случаях один, просто с некоторых пор, не знаю отчего, прежняя запись перестала работать. Так что, если столкнётесь с тем же, экспериментируйте с вариантами записи.

Есть ещё вариант этого же условия: if (!isset ($name) or !isset ($email) or !isset ($text)).

Проверим, сохранив файл, как работает скрипт. У меня работает. Разумеется, вылазит предупреждение:

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

Но пока проигнорируем. Идём дальше

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

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

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



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


Комментарий добавил(а): asdasdad
22-07-2012
13 час. 06 мин.

Комментарий:
постояно пишет что форма не заполнена полностью не знаю с чем связано

Ответ: Не видя вашего кода, ответить не смогу. Если не разобрались ещё сами и вам не трудно, перешлите код на kapitansg@yandex.ru. Причём код и формы и скрипта.


Комментарий добавил(а): asdasdad
05-08-2012
00 час. 49 мин.

Комментарий:
спасибо, сам разобрался

Новое на сайте

Другие статьи...

Видеокурсы

Рассылки

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

SmartResponder.ru
Ваше имя: *
Ваш e-mail: *

"PHP-песочница"
- PHP для начинающих: уроки с подробным анализом скриптов, необходимых для вашего сайта:

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

Разделы Сайта