Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Как организовать несколько одинаковых форм на одной странице?

Как организовать несколько одинаковых форм на одной странице?


     24.06.2020    обратная связь, форма    Все вопросы » Общие вопросы по PHP    105

вопрос
Доброго времени суток!
Делаю лендинг на dle.
На странице несколько одинаковых форм, но обработчик работает только с первой формой.
Как сделать, чтобы обрабатывались все формы одним обработчиком.
В php не силен, только начинаю изучать. Если кому не сложно поправьте.
Код прилагаю.

html

<form class="form" action="" method="post">
   <p class="form-title result">Заполните форму, чтобы назначить первую встречу:</p>
   <input type="text" name="name" id="name" class="field" value="Имя">
   <input type="text" name="phone" id="phone" class="field" value="Телефон">
   <input type="text" name="email" id="email" class="field" value="Email">
   <a href="javascript: void(0);" class="button" id="submit"  name="submit">Записаться на консультацию</a>
</form>	


js

$(document).ready(function() {	
		$("#submit").on("click", function() {
			var name = $("#name").val();
			var email = $("#email").val();
			var phone = $("#phone").val();

			$.ajax({
				url: "form.php",
				type: "post",
				data: {
					"name": name,
					"email": email,
					"phone": phone
				},
				success: function(data) {
					$(".result").html(data);
				}
			});
		});
	});


php

header("Content-Type: text/html; charset=utf-8");
	if(isset($_SERVER["HTTP_X_REQUESTED_WITH"]) && strtolower($_SERVER["HTTP_X_REQUESTED_WITH"]) === "xmlhttprequest") {
	
		if(!isset($_POST["name"]) || !isset($_POST["email"]) || !isset($_POST["phone"])) {
			die();
		}
	
		function send_form($message) {
			$mail_to = "mail@mail.ru";
			$subject = "Письмо c сайта ";
			$headers = "MIME-Version: 1.0\r\n";
			$headers .= "Content-type: text/html; charset=utf-8\r\n";
			$headers .= "From: Система уведомлений <no-reply@".$_SERVER['HTTP_HOST'].">\r\n";

			mail($mail_to, $subject, $message, $headers);
		}

		$name = strip_tags($_POST["name"]);
		$email = strip_tags($_POST["email"]);
		$phone = strip_tags($_POST["phone"]);

		if(!preg_match("|^([a-z0-9_.-]{1,20})@([a-z0-9.-]{1,20}).([a-z]{2,4})|is", strtolower($email))) { 
			echo "E-mail указан некорректно";
			die();
		}

		if($phone == "") { 
			echo "Телефон указан некорректно";
			die();
		}

		if($name == "") {
			echo "Вы забыли представиться";
			die();
		}

		$message = <<<HTML
			<b>Имя</b>: {$name}<br>
			<b>Телефон</b>: {$phone}<br><br>
			<b>E-mail</b>: {$email}
HTML;

		send_form($message);
		echo "Сообщение успешно отправлено!";
	} else {
		die();
	}

Ответил: Hander


Решение нашел, делюсь, может кому пригодится

Формам даем уникальный идентификатор, в моем случае я решил так id="form{news-id}"

<form id="form1">
<input type="text" class="name" name="name" placeholder="Ваше имя">
<input type="text" class="phone" name="phone" placeholder="Ваш телефон">
<textarea name="mes" class="mes" placeholder="Текст сообщения"></textarea>
<input type="submit" name="submit" class="btn" value="ОТПРАВИТЬ">
<input type="hidden" name="formData" value="Текст в тему письма">
</form>

<form id="form2">
<input type="text" class="name" name="name" placeholder="Ваше имя">
<input type="text" class="phone" name="phone" placeholder="Ваш телефон">
<textarea name="mes" class="mes" rows="6" placeholder="Текст сообщения"></textarea>
<input type="submit" name="submit" class="btn" value="ОТПРАВИТЬ">
<input type="hidden" name="formData" value="Текст в тему письма">
</form>

<form id="form3">
<input type="text" class="name" name="name" placeholder="Ваше имя">
<input type="text" class="phone" name="phone" placeholder="Ваш телефон">
<textarea name="mes" class="mes" rows="6" placeholder="Текст сообщения"></textarea>
<input type="submit" name="submit" class="btn" value="ОТПРАВИТЬ">
<input type="hidden" name="formData" value="Текст в тему письма">
</form>


Скрипт отправляющий данные в обработчик на основе id формы, через Ajax без перезагрузки страницы

<script type="text/javascript">
    $(document).ready(function () {
        $('form').submit(function () {
            var formID = $(this).attr('id'); // Получение ID формы
            var formNm = $('#' + formID);
            $.ajax({
                type: 'POST',
                url: 'mail.php', // Обработчик формы отправки
                data: formNm.serialize(),
                success: function (data) {
                    // Вывод текста результата отправки в текущей форме
                    $(formNm).html(data);
                }
            });
            return false;
        });
    });
</script>


Ну и сам обработчик

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (isset($_POST['name'])) {$name = $_POST['name'];}
    if (isset($_POST['phone'])) {$phone = $_POST['phone'];}
    if (isset($_POST['email'])) {$email = $_POST['email'];}
    if (isset($_POST['mes'])) {$mes = $_POST['mes'];}
    if (isset($_POST['formData'])) {$formData = $_POST['formData'];}


    $to = "info@site.ru"; /*Укажите ваш адрес электронной почты*/
    $headers = "Content-type: text/plain; charset = utf-8";
    $subject = "$formData";
    $message = "$mes\n\nИмя пославшего: $name \n\nТелефон: $phone \n\n$email";
    $send = mail ($to, $subject, $message, $headers);
    if ($send == 'true')
    {
    echo "<center>Спасибо за отправку вашего сообщения!</center>";
    }
    else 
    {
    echo "<center><b>Ошибка. Сообщение не отправлено!</b></center>";
    }
} else {
    http_response_code(403);
    echo "Попробуйте еще раз";
}
?>

4 комментария

akella
Юзер

akella - 24 июня 2020 19:20 -

нельзя использовать на одной странице несколько элементов с одним id

akella
Юзер

akella - 24 июня 2020 19:42 -

обзовите как-нибудь функцию и поставьте ее на onclick

Hander
Юзер

Hander - 25 июня 2020 10:28 -

***Комментарий удален***

TechnicalMan
Юзер

TechnicalMan - 25 июня 2020 15:14 -

Поставь DLE Uniform и забыть о проблемах.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх