Универсальный скрипт обработки нескольких форм на сайте

Часто бывает так, что на сайте присутствует множество форм с разными полями, все эти формы могут быть на одной странице, а так же на нескольких.
Допустим есть 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 "Произошла ошибка"; // выведем Произошла ошибка } } ?>

На этом всё, буду рад вашим вопросам и комментариям. Вы можете оставить их в форме ниже.

Количество уникальных просмотров: 30

Оставить комментарий