Отправка отзыва для сайта на PHP



Для каждого из уроков есть Исходники, найти их можно в конце статьи

В уроках НЕ заостряется внимание на основных моментах программирования на PHP. Тут просто описан процесс создания скрипта, что бы Вы могли сделать скрипт нужный для Вас. Потому как разобраться в чужих скриптах бывает тяжелее чем сделать самому.

Скрипт можно использовать для Обратной связи и даже в виде простенькой гостевой книги :)

Делаем форму обратной связи на PHP, с отправкой на почту.

На самом деле скрипт и его реализация не столь сложна как может показаться :), так что приступим. Для начала нам нужно сделать форму для отправки сообщения, делается это с помощью HTML форм. Вот так будет выглядеть наш вариант:

<form name="f_add_otziv" action="" method="post">
Имя: <input name="name" type="text" value=""><br>
E-mail: <input name="email" type="text" value=""><br>
Сообщение: <textarea name="otziv" rows=5 cols=20 wrap="off"></textarea><br>
Надеюсь Вы не бот? <input name="chek" type="checkbox" value="nobot"><br>
<input type="submit" name="add_otziv" value="Отправить">
</form>

Вот простая форма. Если Вам надо, можете добавить еще какие то поля. Только обратите внимание, на то что у каждого элемента формы, должно быть свое уникальное имя! А теперь давайте обработаем полученные данные от формы, для отправки их на почту админу. Во первых определимся когда будет вызван обработчик формы. Запрос должен обработаться после нажатия кнопки Отправить. Потому делаем проверку, есть нажатие или нету (правильнее сказать, просто проверяем есть в переменной add_otziv какое либо значение). Делается это оператором Если (IF):

<?php
if($_POST['add_otziv']) {
/*обрабатываем запрос*/
}?>

Обратите внимание на то что написанно POST. Этот параметр зависит от типа передачи данных из формы: method="post". Т.е. Если Вы передаете данные через get, то проверка будет выглядеть так:

if($_GET['add_otziv]) {
/*обрабатываем запрос*/
}

С этим разобрались. Теперь для безопасности сделаем следующее:

$name = htmlspecialchars($_POST['name']);
$email = htmlspecialchars($_POST['email']);
$otziv = htmlspecialchars($_POST['otziv']);
$chek = htmlspecialchars($_POST['chek']);

Поясняю что мы делаем. Мы передаем переменным со схожими именами данные из формы, переданные методом POST. А htmlspecialchars() преобразует спец символы, в текстовый вид. Т.е. например символ > будет записан как >. Делается это для того что бы в поля нельзя было вставить скрипт, точнее вставлен он будет, но не обработается, потому что он будет передан как текст.

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

$page = $_SERVER['REQUEST_URI'];
$date = date("d.m.Y - H:i");

В переменную $page будет передана информация которая находится после www.имя_сайта.ru, т.е. если страница на которой находится скрипт называется text.php, то переменная $page примет значение /text.php. Да и еще почему именно $_SERVER['REQUEST_URI'], этот параметр передает не только название страницы, но и все ее параметры, это важно если у Вас к одной странице привязан вывод данных из БД например по id, в таком случае в переменную передастся /text.php?id=номер.

Теперь начинаем обрабатывать наши данные. Для начала проверим, поставлен ли 'чек бокс'. Если стоит и он равен nobot, то скрипт выполняется дальше, иначе выведем ошибку.

if($chek == 'nobot'){
/*Выполняем скрипт*/
}else{
$err='Вы не человек :( ';
}

Ну и заодно проверим все ли данные ввел пользователь. Просто после проверки 'чек бокса' дописываем следующее:

if($name != '' AND $email != '' AND $otziv != ''){
/*продолжаем выполнение кода*/
}else{
$err = 'Вы заполнили не все поля!';
}

Думаю все понятно. Давайте посмотрим что у нас получается если собрать все вместе:

<?php
if($_POST['add_otziv']) {

$name = htmlspecialchars($_POST['name']);
$email = htmlspecialchars($_POST['email']);
$otziv = htmlspecialchars($_POST['otziv']);
$chek = htmlspecialchars($_POST['chek']);

$page = $_SERVER['REQUEST_URI'];
$date = date("d.m.Y - H:i");

if($chek == 'nobot'){
if($name != '' AND $email != '' AND $otziv != ''){
/*Выполняем скрипт дальше*/
}else{
$err = 'Вы заполнили не все поля!';
}
}else{
$err='Вы не человек :( ';
}
}?>

Проверили на то что отправляет сообщение человек. Думаю надо проверить еще правильность ввода почтового ящика. Ставим вот этот код после проверки на не пустые поля:

if (!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $email))
{$err = 'Неверно введен е-mail.';}

Ну и наконец давайте отправим наше сообщение на почту :)

if(!$err){
}

Проверили нет ли ошибок, если нет, формируем HTML сообщение.

if(!$err){
$massege = "<html><head></head><body>
Новый отзыв на сайте! <br><br>
К странице http://www.имя_сайта.ru".$page.", написали отзыв:<br><br>
<table width=100% border=0>
<tr><td width=10></td>
<td><b>".$name."</b> (".$email.")<br>".$date."
<br>".$otziv."
</td>
</tr></table><br>
</body></html>";
}

Тут все ясно думаю. Но отмечу о том как вставлять переменные сюда. Сначала закрываем текст кавычкой, затем присоединяем переменную с помощью точки и далее пишем имя переменной, снова ставим точку и пишем открывающую кавычку. Выглядит это так: ".$page."

Сформируем заголовок для письма:

$headers = "Content-type: text/html; charset=utf-8 \r\n";
$headers .= "From: Мой сайт <admin@мой_сайт.ru>\r\n";

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

Ну и само отправление:

if(mail("admin@мой_сайт.ru", "Новый отзыв с Вашегосайта", $massege, $headers))
{$err='Отзыв отправлен';}else{$err='Ошибка в отправлении';}

Указываем первым параметром куда отправлять письмо, затем тема письма, сам отзыв и заголовок письма.

Собираем весь скрипт воедино и помещаем на самый верх страницы с формой:

<?php
if($_POST['add_otziv']) {

$name = htmlspecialchars($_POST['name']);
$email = htmlspecialchars($_POST['email']);
$otziv = htmlspecialchars($_POST['otziv']);
$chek = htmlspecialchars($_POST['chek']);

$page = $_SERVER['REQUEST_URI'];
$date = date("d.m.Y - H:i");

if($chek == 'nobot'){
if($name != '' AND $email != '' AND $otziv != ''){
if (!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $email))
{$err = 'Неверно введен е-mail.';}

if(!$err){
$massege = "<html><head></head><body>
Новый отзыв на сайте! <br><br>
К странице http://www.имя_сайта.ru".$page.", написали отзыв:<br><br>
<table width=100% border=0>
<tr><td width=10></td>
<td><b>".$name."</b> (".$email.")<br>".$date."
<br>".$otziv."
</td>
</tr></table><br>
</body></html>";

$headers = "Content-type: text/html; charset=utf-8 \r\n";
$headers .= "From: Мой сайт <admin@мой_сайт.ru>\r\n";

if(mail("admin@мой_сайт.ru", "Новый отзыв с Вашего сайта", $massege, $headers))
{$err="Спасибо за отзыв".$name;}else{$err='Ошибка в отправлении';}

}
}else{
$err = 'Вы заполнили не все поля!';
}
}else{
$err='Вы не человек :( ';
}
}
?>

А теперь то о чем я еще не говорил, во всех ошибках я создавал переменную $err. Давайте ее выведем. В любо случае в ней что то окажется, например если письмо отправится, то ей будет передано сообщение о том что письмо ушло.

Для этого немного поработаем еще с формой. Зададим ей, чтоб она скрывалась при обработке скрипта и если все нормально, на месте формы отобразится сообщение.

<?if(!$_POST['add_otziv']) {?>
<form name="" action="" method="post">
Имя: <input name="name" type="text" value=""><br>
E-mail: <input name="email" type="text" value=""><br>
Сообщение: <textarea name="otziv" rows=5 cols=20 wrap="off"></textarea><br>
Надеюсь Вы не бот? <input name="chek" type="checkbox" value="nobot"><br>
<input type="submit" value="Отправить">
</form>
<?}else{
echo $err;
}?>

Т.е. если переменная отправленная кнопкой не пуста, то форма скрывается и будет выведен результат работы скрипта.

Вот готовый скрипт с комментариями

Второй урок. Заносим данные в БД


К списку всех уроков PHP