Форма обратной связи на языке PHP

Сегодня, я расскажу основы по созданию форм обратной связи с помощью php. Данная информация, полагаю, будет полезна только новичкам.

HTML-код формы:

Для начала рассмотрим простой html-код, который содержит всё что нам надо для формы обратной связи.

<form method='post' action="" name="formname" target="_self">  
    <p> 
       <label for="name">Контактное лицо:</label><br> 
       <input name="name" maxlength="50" type="text" size="10"> 
    </p> 
    <p> 
       <label for="mailfrom">E-mail для связи:</label><br> 
       <input name="mailfrom" type="text" size="10" value="Email"> 
    </p> 
    <p> 
       <label for="message">Сообщение:</label><br> 
       <textarea rows="5" cols="14" name="message"></textarea> 
    </p> 
    <p> 
       <input name="submit" type="submit" value="Отправить"> 
    </p> 
</form>

Итак, вот собственно html форма. Она содержит две строки для ввода имени и адреса почты, одно поле для сообщения и собственно кнопку отправить.

Первая строка, тег <form>. В нём содержатся все элементы формы. Тег может содержать параметры:

1 Method Указывается протокол HTTP. GET или POST. Нужен второй.

2 Action Указывается адрес скрипта, который будет обрабатывать форму. Если параметр отсутствует, или не указан (как в листинге), то форма будет обращаться к этой же странице.

3 Name Имя формы. Сейчас нам уникальное имя формы не актуально.

4 Target Аналогичен таргету у тега ссылки <a>.

5 Enctype Нужен только в том случае, когда через форму отправляется ещё и файл. В этом случае указывается значение multipart/form-data.

В форме у всех трёх элементов, куда вводится информация, имеются рядом теги label с указанным именем поля (значение поля name у полей идентично полю for у тега label). По большому счёту создавать тег лейбл не обязательно.

Далее, <input>. Создаёт строчное поле, для ввода информации. Тег принимает параметры:

1 Name Имя поля. Обязательный параметр. С его помощью php-скрипт сможет его распознать.

2 Type Тип элемента. Обязательное поле. В нашем случае это text, то есть текстовое поле. Для кнопки отправки формы используется значение submit. Есть и другие значения, но в этом случии они не нужны.

3 Size Размер поля.

4 Maxlength Максимальное число символов, которые можно ввести в поле.

5 Value Для нашей, текстовой строки, принимает значение поля по умолчанию. То есть вы загружаете страницу, а в поле уже будет прописан тот текст, который вы указали. А для кнопки отправки играет роль названия кнопки.

Тег принимает и другие параметры, но сейчас они не нужны.

Большое текстовое поле формы создано тегом textarea. Параметры rows и cols позволяют задать ширину и высоту поля (обратите внимание, что в разных браузерах поле будет немного варьировать по ширине – заметно, когда хочешь создать текстовую строку и текстовое поле одинаковой ширины). Параметр name аналогичен тому, что в инпуте.

Обработка формы на PHP:

Итак, у нас есть форма.

<?php
$mailto = "vashe_milo@mail.ru";
$charset = "windows-1251";
$subject = "Имя письма";
$content = "text/html";
$status="<br>";
if (!empty($_POST))
{
   $headers  = "MIME-Version: 1.0\r\n";
   $headers .= "Content-Type: ".$content." charset=".$charset."\r\n";
   $headers .= "From: \"".$_POST['name']."\" <".$_POST['mailfrom'].">\r\n";
   $headers .= "Bcc: vashe_milo2@yaya.ru\r\n";
   $headers .= "X-Mailer: E-mail from my super-site \r\n";
   $sendmessage = "<html><body>
     <p><b>E-mail для связи:</b> ".$_POST['mailfrom']."</p>
     <p><b>Сообщение:</b> ".$_POST['message']."</p>
     </body></html>";
   if (mail($mailto,$subject,$sendmessage,$headers))
   {
      unset($_POST['name'], $_POST['mailfrom'], $_POST['message']);
      $status = 'Ваше сообщение отправлено!';
   }
   else
   {
      $status = 'По техническим причинам сообщение не было отправлено. Попробуйте снова, а если не получится, обратитесь к разработчикам';
   }
}
?>

1. Собственно первая и последняя строка кода – открытие и закрытие кода php.

2. 2-6 строки – создание некоторых необходимых переменных: адрес вашей почты, куда будут приходить письма с формы; кодировка; имя письма, которое указывается при получении письма в поле Тема; тип контента, в нашем случае текст и html, то есть для форматирования можно (читай нужно) использовать xhtml-разметку; объявление переменной, содержащей статус об отправке письма – надо же как-то говорить, что письмо отправлено или нет.

3. 7 строка. “Если существуют переменные, переданные методом POST, то…” Так следует правильно читать эту строку. Для пояснений упростим её и прочитаем как “Если не пуст POST, то..” “Если” – это функция if (да что вы говорите, не может быть – прим.ред.). “Не” – это восклицательный знак. “Пусто” – функция empty, определяет существует ли переменная, в данном случае глобальная переменная $_POST, которая содержит всё то, что было отправлено формой.

4. 9-14 строки. Здесь создаются необходимые заголовки для письма. 9 строка – версия MIME. 10 строка – тип контента и его кодировка. 11 строка – от кого письмо; в данном случае в качестве отправителя будет указано имя и адрес почты того человека, который заполнял форму. 13 строка – через запятую указываются адресаты, которым будет отправлена копия письма. 14 строка – почтовая программа отправителя; можно маскироваться под The Bat или ещё кого; один из не стандартизованных полей заголовка – они все на X начинаются; среди не стандартизированных также существует поле приоритета письма X-Priority, принимает значения вроде бы от 1 до 5, где 1 самый высокий приоритет, 3 – нормальный.

5. 15-18 строки. Переменная, в которой содержится всё письмо с форматированием. В письме, естественно, используются переданные данные из формы (да, кто не помнит, точкой производится склейка строк =) ).

6. 19 строка. В условии функции “Если” указана функция отправки письма – mail. Функция mail принимает 4 основных параметра: адрес получателя, тема письма, само письмо, заголовки. Первые три являются обязательными, четвёртого может не быть. Так вот, поскольку функция расположена в условии оператора if, то если письмо отправится (функция mail вернёт положительный ответ), то…

7. 21-22 строки. … отправленные формой значения полей очистятся, а статус сообщения сменится на то, что сообщения отправлено. А если функция mail вернёт отрицательный ответ, то…

8. 26 строка. … статус скажет, что облом вышел.

Итак, всё готово. Создаём php-файл и сначала засовываем в него листинг с PHP кодом, затем после него следом вставляем код из первого листинга с HTML-кодом. Всё? Нет! Помните мы создавали статус, который нам будет говорить отправлено письмо, или не очень? Так вот, чтобы это работало, где-нибудь в html-коде разместите строку:

<p><?=$status;?></p>

Всё? В принципе да, но можно было бы сделать ещё вот что. Помните что в html мы можем делать так, что когда загружается страница, то в форме уже значения какие-то указаны? А почему не сделать так, чтобы когда человек отправляет форму, он не только получает статус о том, что там с письмом, но и при этом поля бы формы не очищались? А всё просто. В нужных местах (либо между открывающим и закрывающим тегом textarea, либо в параметре value поля <input>) прописываем строку, например:

<?=$_POST['mailfrom']?>

для поля почты. И что самое главное: если письмо будет отправлено, то функция unset очистит значения этих переменных и тогда форма будет пустой. Иными словами если письмо не отправляется, человеку не надо будет по-новой заполнять форму, она останется заполненной =).

В завершении

Теперь мы умеем создавать форму обратной связи. В следующих записях будут рассмотрены способы валидации форм на php, на jquery и, может быть, на javascript. Также будет рассмотрен пример отправки формы со вложениями, а также использовании форм для загрузки различных файлов на сервер. А на этом пока всё. Удачи в ваших начинаниях (и желательно чтобы без неприятных окончаний – прим.ред.).

Добавить комментарии



[CODE] [/CODE]


Комментариев нет!