Всем привет! Произошла небольшая заминка с разметкой Schema.org, но все разрешилось успешно. В скором времени подробно опишу ее внедрение. Внесу свою лепту в эту загадочную тему. Загадочную потому, что совсем не просто с наскока взять и внедрить на свой сайт микроразметку. А уж тем более выпилить старую. Но об этом позже, а сегодня расскажу о том, как создавал форму обратной связи на PHP.
Сразу после внедрения в проект теста на знание языка, мне понадобилось добавить возможность потенциальным клиентам оставить заявку на запись в группу, как говорится, не вставая с дивана. Заявка должна быть заполнена в специальной форме и приходить по почте прямо в офис. После чего с клиентом созваниваются и уточняют детали.
Прогуглил, нашел функцию mail, обрадовался, что все велосипеды уже давно написаны. Значит можно просто собрать форму и отправить ее на электронный адрес, отлично.
Для начала глянем на саму функцию отправки письма, я уверен, что она еще много раз мне пригодится. Будет полезно сохранить ее синтаксис и описание.
Функция mail в PHP
Прототип функции mail:
bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )
Аргументы:
$to — получатель письма. Если несколько, то указываются через запятую. Например: user1@example.com, user2@example.com;
$subject — тема отправляемого письма;
$message — отправляемое сообщение. Каждая строка не должна превышать 70 символов и должна заканчиваться на ‘\r\n’;
$additional_headers(необязательный) — дополнительные заголовки. В них может содержаться, например, кодировка письма и адрес отправителя;
$additional_parameters(необязательный) — дополнительные параметры. Например, дополнительные флаги в виде аргументов командной строки. Небезопасная штука, не рекомендуется ее использовать.
Возвращаемое значение:
True если письмо отправлено и False если нет.
html форма обратной связи
С функцией все понятно, последний параметр не понадобится, ну и слава богу. Самое время строить форму. Она будет состоять из следующих полей:
— ФИО;
— E-mail;
— Контактный телефон;
— Язык;
— Цель изучения;
— Текущий уровень владения;
— Как хочется изучать язык — в группе или индивидуально;
— Сопроводительное письмо(необязательно).
Форма будет отображаться только при условии, что она еще не была заполнена. Перед отправкой письма нужно проверить, что все поля, кроме сопроводительного письма, заполнены. И чтобы не было желания сразу подать еще одну заявочку «для верности», мы прячем поля формы с глаз долой при помощи флага $sendFlag.
Правильность заполнения полей лежит на совести самих клиентов. Минус — мы не застрахованы от левых фамилий и номеров. Плюс — мы не ставим клиента в жесткие рамки, тем самым отпугивая его. Не хочет писать отчество, бог с ним, главное чтобы телефон был правильный.
Исходный код обратной формы на html+php
<?php
if(isset($_POST['fio']) and
isset($_POST['email']) and
isset($_POST['phone']) and
isset($_POST['lang']) and
isset($_POST['target']) and
isset($_POST['level']) and
isset($_POST['learnType'])) {
$sendFlag = true;
}
else {
$sendFlag = false;
}
?>
<?php
if($sendFlag == true) {
?>
<p>Ваша заявка отправлена, мы ознакомимся с ней в скором времени и перезвоним вам, спасибо!</p>
<?php
}
else {
?>
<p>Заполните, пожалуйста, форму обратной связи как можно подробнее. После того, как вы подадите заявку, мы вам позвоним на контактный телефон и уточним детали, спасибо!</p>
<p>Обязательные поля помечены звездочкой</p>
<form method="post">
<b>ФИО*</b>
<input type="text" name="fio">
<b>E-mail*</b>
<input type="text" name="email">
<b>Контактный телефон*</b>
<input type="text" name="phone">
<b>Язык, который вы хотите изучить*</b>
<input type="text" name="lang">
<b>Цель изучения*</b>
<input type="text" name="target">
<b>Текущий уровень владения языком*</b>
<input type="text" name="level">
<b>Хочу изучать язык*</b>
<input type="radio" name="learnType" value="group">В группе
<input type="radio" name="learnType" value="solo">Индивидуально
<b>Сопроводительное письмо(необязательно)</b>
<textarea name="pismo" cols="25" rows="8"></textarea>
<input type='input' name='sendLetter' value='Отправить заявку' />
</form>
<?php
}//endif
if((isset($_POST['fio']) and $_POST['fio']!="") and
(isset($_POST['email']) and $_POST['email']!="") and
(isset($_POST['phone']) and $_POST['phone']!="") and
(isset($_POST['lang']) and $_POST['lang']!="") and
(isset($_POST['target']) and $_POST['target']!="") and
(isset($_POST['level']) and $_POST['level']!="") and
(isset($_POST['learnType']))) {
$to = 'apply@legolang.ru'; //Почта получателя
$subject = 'Заявка на запись в группу'; //Заголовок сообщения
//Получаем значение с радиокнопки
$type = 'не указано';
if($_POST['learnType'] == 'group') {
$type = 'В группе';
}
else {
$type = 'Индивидуально';
}
//Формируем письмо с использованием html тегов
$message = '
<html>
<head>
<title>'.$subject.'</title>
</head>
<body>
<p>ФИО: '.$_POST['fio'].'</p>
<p>E-mail: '.$_POST['email'].'</p>
<p>Телефон: '.$_POST['phone'].'</p>
<p>Язык: '.$_POST['lang'].'</p>
<p>Цель: '.$_POST['target'].'</p>
<p>Уровень владения: '.$_POST['level'].'</p>
<p>Как изучать: '.$type.'</p>
<p>Сопроводительное письмо: '.$_POST['pismo'].'</p>
</body>
</html>';
//Формируем доп. заголовки:
$headers = "Content-type: text/html; charset=utf-8 \r\n"; //Кодировка письма
$headers .= "From: Отправитель <apply@legolang.ru>\r\n"; //Наименование и почта отправителя
//отправляем письмо
mail($to, $subject, $message, $headers);
}
?>
Заключение
Форма готова, письма отправляются, клиенты записываются, начальник радуется интернет-технологиям будущего. Я готов приступать к работе над другими задачами. Кстати, перестановочный шифр мне поддался и совсем скоро я опишу его взлом. Кроме того, у меня появилась самая настоящая карта сокровищ. Заходите, там все структурировано и очень удобно! На этом на сегодня все, спасибо за внимание!