Универсальный скрипт обработки нескольких форм на сайте
Часто бывает так, что на сайте присутствует множество форм с разными полями, все эти формы могут быть на одной странице, а так же на нескольких.
Допустим есть 3 формы, в каждой из которых есть скрытое поле, которое указывает, какую именно форму заполнил посетитель сайта:
<form action="/mail.php" method="POST">
<input type="hidden" name="forma" value="Форма обратного звонка">
Телефон: <input type="tel" name="Телефонный номер">
<input type="submit" value="Заказать звонок">
</form>
<form action="/mail.php" method="POST">
<input type="hidden" name="forma" value="Заявка на расчёт">
Имя: <input type="text" name="Name"><br>
Телефон: <input type="tel" name="Телефонный номер">
<input type="submit" value="Отправить заявку">
</form>
<form action="/mail.php" method="POST">
<input type="hidden" name="forma" value="Заявка на прайслист">
E-mail: <input type="text" name="e-mail">
<input type="submit" value="Отправить заявку">
</form>
Как вы заметили в каждой форме присутствуют разные поля, в классическом варианте придётся писать обработчик (скрипт) для каждой из форм, либо написать обработчик (скрипт), который проверял бы наличие каждого из полей, после чего вставлял бы его в заявку либо нет.
Я вам предлагаю более универсальный скрипт обработки заявок на примере этих же 3 форм.
Нам понадобиться изменить на привычный русский язык значения атрибута name
для последующей удобочитаемости заявки (это делать не обязательно).
<form action="/mail.php" method="POST">
<input type="hidden" name="Название формы" value="Форма обратного звонка">
Телефон: <input type="tel" name="Телефон">
<input type="submit" value="Заказать звонок">
</form>
<form action="/mail.php" method="POST">
<input type="hidden" name="Название формы" value="Заявка на расчёт">
Имя: <input type="text" name="Имя">
Телефон: <input type="tel" name="Телефонный номер">
<input type="submit" value="Отправить заявку">
</form>
<form action="/mail.php" method="POST" >
<input type="hidden" name="Название формы" value="Заявка на прайслист">
E-mail: <input type="text" name="E-mail адрес">
<input type="submit" value="Отправить заявку">
</form>
Далее приступаем непосредственно к написанию скрипта обработчика форм, если ввам не нужны подробные объяснения, а только готовое решение, то переходите сразу в низ статьи, копируйте код и заменяйте значения текстовых переменных на необходимые:). А для тех, кто хочет во всём подробно разобраться и всё сделать пошагово - продолжаем!
1) Создаём файл mail.php (ведь именно его мы указали в атрибуте action форм.<form action="/mail.php">
2) Поскольку у нас все формы обрабатываются методом POST (<form action="/mail.php" method="POST">
) пишем в mail.php следующий код
<?php
if ( $_SERVER['REQUEST_METHOD'] === 'POST' ) { // отлавливаем POST события
}
?>
Этот код говорит о том, что если поступил POST-запрос то выполняем скрипт в фигурных скобках скобках
3) Предопределяем переменную, в которую будем вносить данные заполненных форм допустим $txt
<?php
if ( $_SERVER['REQUEST_METHOD'] === 'POST' ) { // отлавливаем POST события
$txt=""; // Предопределяем переменную
}
?>
4) Далее необходимо обработать сам запрос. Как правило запросы являются массивом такого вида: [Ключ => значение], именно этим мы и воспользуемся, будем обрабатывать POST-массив. дополняем наш код
<?php
if ( $_SERVER['REQUEST_METHOD'] === 'POST' ) { // отлавливаем POST события
$txt=""; // Предопределяем переменную
foreach ( $_POST as $key => $value ) { // прогоняем массив по ключам и их значению
$txt .= strip_tags($key).": ".strip_tags($value)."<br>"; // разбиваем данные по ключам и их значению, а так же заносим их в переменную $txt
}
}
?>
Отлично. Теперь при отправке любой формы на данный обработчик POST-запросом он будет обработан и иметь вид текстовой строки:
ключ: значение<br>ключ: значение<br>
(и так далее, в зависимости от количества полей). Но нам ведь надо теперь все эти данные отправить куда-то..например на свою почту, поэтому продолжаем:)
Зададим заголовки для будущего электронного письма, а так же добавим необходимые переменные.
<?php
if ( $_SERVER['REQUEST_METHOD'] === 'POST' ) { // отлавливаем POST события
$txt=""; // Предопределяем переменную
foreach ( $_POST as $key => $value ) { // прогоняем массив по ключам и их значению
$txt .= strip_tags($key).": ".strip_tags($value)."
"; // разбиваем данные по ключам и их значению, а так же заносим их в переменную $txt
}
$mail='mail@dbykov.ru'; // почта на которую будет отправлено письмо с заявкой
$theme="Заявка с сайта"; // тема письма
$mailheader .= "Content-Type: text/html; charset=utf-8\r\n"; // заголовок письма, который указывает, что содержимое html и должно быть отправлено в кодировке utf-8
$mailheader .= "Content-Transfer-Encoding: 8bit\r\n"; // тип кодирования сообщения
$mailheader .= "From: Ваш сайт<".$mail.">\n"; // адрес отправителя сообщения
}
?>
Адрес своей почты указали, заголовки письма указали, текст обработали...хм..чего-то не хватает тут ещё...А само-то письмо отправить забыли! Будем исправляться.
<?php
if ( $_SERVER['REQUEST_METHOD'] === 'POST' ) { // отлавливаем POST события
$txt=""; // Предопределяем переменную
foreach ( $_POST as $key => $value ) { // прогоняем массив по ключам и их значению
$txt .= strip_tags($key).": ".strip_tags($value)."
"; // разбиваем данные по ключам и их значению, а так же заносим их в переменную $txt
}
$mail='mail@dbykov.ru'; // почта на которую будет отправлено письмо с заявкой
$theme="Заявка с сайта"; // тема письма
$mailheader .= "Content-Type: text/html; charset=utf-8\r\n"; // заголовок письма, который указывает, что содержимое html и должно быть отправлено в кодировке utf-8
$mailheader .= "Content-Transfer-Encoding: 8bit\r\n"; // тип кодирования сообщения
$mailheader .= "From: Ваш сайт<".$mail.">\n"; // адрес отправителя сообщения
$sendToMail = mail($mail,$theme,$txt, $mailheader); // отправляем письмо
if ($sendToMail) { // проверяем, отправилось ли письмо, если да, то
echo 'Отправлено'; // выведем отправлено
}
else { // если письмо не было отправлено
echo "Произошла ошибка"; // выведем Произошла ошибка
}
}
?>
На этом всё, буду рад вашим вопросам и комментариям. Вы можете оставить их в форме ниже.