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

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

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

    Приношу свои извинения, но функционал комментариев ещё находится в разработке.

    Комментарии:

    Здесь вы можете оставить свой комментарий к статье