Молодогвардейцев 454015 Россия, Челябинская область, город Челябинск 89085842764
MindHalls logo

Создание формы обратной связи на PHP

Всем привет! Произошла небольшая заминка с разметкой 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);
}    

?>

Заключение

Форма готова, письма отправляются, клиенты записываются, начальник радуется интернет-технологиям будущего. Я готов приступать к работе над другими задачами. Кстати, перестановочный шифр мне поддался и совсем скоро я опишу его взлом. Кроме того, у меня появилась самая настоящая карта сокровищ. Заходите, там все структурировано и очень удобно! На этом на сегодня все, спасибо за внимание!