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

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

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

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


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

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

Итак, после всех предыдущих манипуляций у вас должно получиться вот это:

<?php
// проверяем, если метод запроса POST
if(getenv("REQUEST_METHOD")=="POST")
//то выполняем следующее
{
// страховка от хостингов, не поддерживающих глобальные переменные
if (isset ($_POST['name'])) //если существует глобальная переменная $_POST['name'], то
{
$name = $_POST['name']; //заменяем её на обычную переменную $name
}

if (isset ($_POST['email']))
{
$email = $_POST['email'];
}

if (isset ($_POST['text']))
{
$text = $_POST['text'];
}

if (isset ($_POST['summa']))
{
$summa = $_POST['summa'];
}

if (empty ($name) or empty ($email) or empty ($text))//если перечисленные переменные отсутствуют
//выводим следующее сообщение

{
echo "Форма заполнена не полностью!";
exit ();//и останавливаем выполнение программы
}
if ($summa != 17)
{
echo "Сумма чисел с картинки указана не правильно!";
exit ();//и останавливаем выполнение программы
}
else
{
/*удаляем лишние пробелы из формы*/
$name = trim ($name);
$email = trim ($email);
$text = trim ($text);
// ставим запрет на html-теги
$text = strip_tags ($text);
$email = strip_tags ($email);
$name = strip_tags ($name);
// заменяем все специальные символы их html-эквивалентом
$text = htmlspecialchars ($text);
$email = htmlspecialchars ($email);
$name = htmlspecialchars ($name);

if(!file_exists($gbpath)) // проверяем есть ли файл $gbpath 
{
// если отсутствует, то создаем его
$f=fopen($gbpath,"w") or die ("Не могу создать файл"); // создание файла
flock($f,2) or die("Невозможно заблокировать файл"); // блокируем файл
fwrite ($f,"",0); // имитация записи в него
@chmod($f, 0664); // установка прав на запись
fclose($f); // Закрытие созданного файла
}

// то значит скрипт вызван формой записи сообщения
$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"); // записываем сообщение

// далее реализуем отправку нового комментария на адрес админа сайта

$address = "адрес вашей почты"; //сюда полетит сообщение о новом комментарии

//заголовок письма, по которому вы определите, что это именно комментарий с сайта
$subject = "Новый комментарий на сайте";

//сообщение, которое будет в письме
$message = "Появился комментарий на странице - " .$id. "\nКомментарий добавил(а): ".$name."\nАдрес почты: " .$email. "\nТекст комментария: ".$text."\nСсылка на заметку: ".$id;

//далее прописываем функцию для отправки сообщения
mail ($address, $subject, $message, "Content-type:text/plain; Charset=windows-1251\r\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);// закрываем файл
?>

При первом обращении к странице с формой, вероятней всего, будет присутствоать сообщение "Не могу открыть файл". Разумеется, если комментариев к статье ещё не добавлялось, то и файла с записями ещё не создано - открывать нечего. Можно на это никак не реагировать, а можно в этом фрагменте:

$f=fopen($gbpath,"r") or die("Не могу открыть файл");// открываем файл с записями
while(1)........

заменить "Не могу открыть файл" на что-нибудь интересней. Например, "Ваш комментарий будет первым!" или что-то в этом роде.

Но я хотел в этой статье сделать другое: избавиться наконец от сообщения об ошибке при отсутствующем файле записей. Напомню: вот такое сообщение вылезает при первом обращении к форме:

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

Можно, конечно, плюнуть, тем более, что при добавлении следующих комментариев этого сообщения уже не будет. однако можно избавить себя и сайт от его присутствия и с самого начала.

Делается это очень просто, с помощью функции

error_reporting ();

- которую прописываем в самое начало скрипта. Вот сюда:

<?php
error_reporting (0);
// проверяем, если метод запроса POST
if(getenv("REQUEST_METHOD")=="POST")
//то выполняем следующее
{
......
?>

Значение 0 как раз и означает нашу просьбу не беспокоить нас сообщениями о всяких там ошибках. Единственно, моя рекомендация: прежде чем эту функцию с нулевым значением добавлять, протестируйте скрипт без неё от и до, то есть, убедившись, что всё работает, как швейцарские часики.

Продолжаем >>>

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

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

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

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



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

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

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

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





Научитесь записывать видеоролики с экрана монитора и добавлять их на страницы своего сайта >>>


Готовы ли Вы расстаться с убеждением, что создать сайт на PHP - сложно? >>>

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



Карта
rss
Карта