Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Обратная форма связи без перезагрузки страницы (https://javascript.ru/forum/dom-window/73672-obratnaya-forma-svyazi-bez-perezagruzki-stranicy.html)

LADYX 05.05.2018 22:10

Обратная форма связи без перезагрузки страницы
 
На странице выводится две формы обратной связи. Первая работает корректно, вторая не работает. В чем может быть ошибка? И еще один момент: при нажатии на кнопку "отправить" скрипт уведомляет, что письмо отправлено. Но письмо на почту не поступает. Где-то есть ошибка? Подскажите, пожалуйста. Благодарю!
$(document).ready(function() {
$("#feedback_submit").click(function(){ 
     $.ajax({
        type: "POST",
        url:"sendmail.php",
        data:$("#callbacks").serialize(),
        error:function(){$("#erconts").html("Произошла ошибка!");},
		beforeSend: function() {
            $("#erconts").html("Отправляем данные...");
        },
		success: function(result){
			$("#erconts").html(result);
			checkThis();
		}
    });
    return false;
});
});

<form name="MyForm" action="" id="callbacks" class="feedback_form" method="post">
					<input type="text" name="name" data-placeholder="true" placeholder="Как к вам обращаться?" required>
					<input type="text" name="email" data-placeholder="true" placeholder="Ваш E-mail" required>
					<input type="submit" value="Отправить" id="feedback_submit">
				</form>
				<div id="erconts"></div>
        
<form name="MyForm" action="" id="callbacks" class="feedback_form" method="post">
					<input type="text" name="name" data-placeholder="true" placeholder="Как к вам обращаться?" required>
					<input type="text" name="email" data-placeholder="true" placeholder="Ваш E-mail" required>
					<input type="submit" value="Отправить" id="feedback_submit">
				</form>
				<div id="erconts"></div>

<?php
if (isset($_POST["email"])){
if (isset($_POST["name"])) {$name = $_POST["name"];}
if (isset($_POST["email"])) {$email = $_POST["email"];}

if($name=="" or $email==""){
    echo "Заполните, пожалуйста, все поля!";
}else{
    $ip=$_SERVER["REMOTE_ADDR"];
$to = "pochta@mail.ru";
$subject = "Заявка!";
$headers .= "Content-Type: text/html; charset=UTF-8
";
$headers .= "From: Заявка с сайта";
$message = "
Имя: $name<br>
E-mail: $email<br><br>

--------------------------------------------------------<br>
---------------IP отправителя: $ip<br>
"; 
$send = mail($to, $subject, $message, $headers);


 if ($send == "true")
 {
 echo "Поздравляем! Ваша заявка принята!";
 }
 else
 {
 echo "Не удалось отправить, попробуйте снова!";
 }
}
}
?>

LADYX 06.05.2018 18:33

Отредактировал вопрос

рони 06.05.2018 18:40

Цитата:

Сообщение от LADYX
вторая не работает.

Цитата:

Сообщение от LADYX
id="feedback_submit"

Цитата:

Сообщение от LADYX
$("#feedback_submit").click

id уникальный идентификатор, и jquery тогоже мнения, находится только первый, других в нормальном случае быть не может
меняйте на классы или используйте селектор по атрибуту.

laimas 06.05.2018 18:47

Цитата:

Сообщение от LADYX
if($name=="" or $email=="")

Один пробел и будет Ок хотя это далеко не так.

LADYX 06.05.2018 19:52

Подскажите, пожалуйста, меняю
$("#feedback_submit").click(function(){

на
$("input[rel='feedback_submit']").click(function(){

а также добавляю rel='feedback_submit' в
<input type="submit" value="Проконсультируйте меня" id="feedback_submit" rel='feedback_submit'>

и тогда ни одна форма не работает. Что я делаю не так?

рони 06.05.2018 20:27

LADYX,
$(function() {
   $('[name="MyForm"]').submit(function(event) {
   event.preventDefault();
   var form = this;
   var title = $(form).next();
   $.ajax({
        type: "POST",
        url:"sendmail.php",
        data:$(form).serialize(),
        error:function(){title.html("Произошла ошибка!");},
		beforeSend: function() {
            title.html("Отправляем данные...");
        },
		success: function(result){
			title.html(result);
			checkThis();
		}
    });
})
});

LADYX 06.05.2018 21:13

рони,
да, спасибо.
И второй момент. Я тут немного подредактировал код, теперь письма отправляются и поступают по почту, всё замечательно работает. Одно только не могу понять, как сделать, чтобы в поле "от кого" была не мой адрес почты, а адрес почты отправителя. И с Reply-To пытался, но не в какую. Подскажите, пожалуйста
<?php
if (isset($_POST["email"])){
if (isset($_POST["name"])) {$name = $_POST["name"];}
if (isset($_POST["email"])) {$email = $_POST["email"];}

if($name=="" or $email==""){
	echo "Заполните, пожалуйста, все поля!";
}else{
	$ip=$_SERVER["REMOTE_ADDR"];
$to = "mail@mail.ru";
$subject = "Заявка!";
$headers = "Content-type:text/plain; charset=utf-8;";
$headers = "From: <mail@mail.ru>";
$message = "Имя: $name\nE-mail: $email\nIP отправителя: $ip"; 
$send = mail($to, $subject, $message, $headers);


 if ($send == "true")
 {
 echo "Поздравляем! Ваша заявка принята!";
 }
 else
 {
 echo "Не удалось отправить, попробуйте снова!";
 }
}
}
ini_set('short_open_tag', 'On'); 
?>

рони,
кстати, обе формы теперь работают, только почему-то при нажатии на субмит, если поля не заполнены, то предупреждение "Заполните, пожалуйста, все поля!" не появляется, а только срабатывает required. Это не настолько конечно важно, но просто не могу понять причины

рони 06.05.2018 21:31

Цитата:

Сообщение от LADYX
то предупреждение "Заполните, пожалуйста, все поля!" не появляется,

возможно checkThis нет или эта функция вне видимости, с остальным ждите специалистов по php.

LADYX 06.05.2018 21:34

рони,
я понял, спасибо вам!

laimas 07.05.2018 04:11

Цитата:

Сообщение от LADYX
как сделать, чтобы в поле "от кого" была не мой адрес почты, а адрес почты отправителя.

При такой проверке if($name=="" or $email=="")?

Заголовки сообщения формируются неверно. Тема письма не кодируется. Функция mail не отправляет почту, она отдает ее на отправление и возвращает булево значение true/false, а не строки "true".

http://php.net/manual/ru/function.mail.php


Часовой пояс GMT +3, время: 14:55.