Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   После каждого обновления сайта приходит пустое письмо по форме (https://javascript.ru/forum/misc/73160-posle-kazhdogo-obnovleniya-sajjta-prikhodit-pustoe-pismo-po-forme.html)

Noonf 26.03.2018 13:22

После каждого обновления сайта приходит пустое письмо по форме
 
Здравствуйте! Помогите разобраться, почему при каждом обновлении или переходе на сайт приходит пустое письмо на почту по форме обратного звонка. Вот код, скрипт и обработчик

<article class="call_form">
            <form class="div_form" method="post" name="contactForm"><input class="name_txt f16px" maxlength="30" name="uname" required="" size="20" type="text" placeholder="Ваше имя *" />
            <input class="email_txt f16px" maxlength="30" name="email" required="" size="20" type="email" placeholder="Ваш e-mail *" />
            <input class="phone_txt f16px" maxlength="30" name="phone" required="" size="20" type="tel" placeholder="Ваш телефон *" />
            <textarea class="txt_form" maxlength="500" name="text" placeholder="Краткое описание заявки"></textarea>
            <input name="bezspama" type="text" style="display:none" value="" />
            <button class="button_call_form padd aligner f18px white cursor" type="submit">Отправить</button>
            </form></form>
        </article>


jQuery(document).ready(function() {
    
  jQuery('form').submit(function(event) {

    event.preventDefault();
    var form_data = $(this).serialize();
     
    jQuery.ajax({
      type: jQuery(this).attr('method'),
      url: jQuery(this).attr('action'),
      data: form_data,
      cache: false,
      processData: false,
      success: function(result) {
      alert('Ваша заявка принята, спасибо! В ближайшее время с Вами свяжется наш специалист.'),
      location.href = "http://yummybox.by";
      header('Location: header.php');
      },
  
    });
  
  });

});


$recepient = "Punchenkoaleks@gmail.com";
$sitename = "yummybox.by";

$uname = trim($_POST["uname"]);
$phone = trim($_POST["phone"]);
$email = trim($_POST["email"]);
$text = trim($_POST["text"]);
$message = "Имя: $uname \nТелефон: $phone \nE-mail: $email \nТекст: $text";

$pagetitle = "Новая заявка с сайта \"$sitename\"";
mail($recepient, $pagetitle, $message, "Content-type: text/plain; charset=\"utf-8\"\n From: $recepient");


Заранее благодарен!

laimas 26.03.2018 13:55

Цитата:

Сообщение от Noonf
header('Location: header.php');

Нет в JS функции header.

То есть при каждом запросе страницы на почту приходит письмо само по себе?

Noonf 26.03.2018 14:00

Да, даже если форма до этого не заполнялась. А если заполнялась, то по отправлению приходит письмо с данными и одно пустое.

laimas 26.03.2018 14:09

header('Location: header.php'); - удалить из кода

type: jQuery(this).attr('method'),
url: jQuery(this).attr('action'),


достаточно

type: this.method,
url: this.action,

В остальном на клиенте в коде нет проблем и сама форма отправляться не может, если только ее не программно что-то отправляет. То есть проблему ищите на сервере, либо скрипт не по условию (приему формы отправляется), либо иные причины.

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

Nexus 26.03.2018 14:15

Скорее всего страница выглядит примерно так:
<?php
mail();
?><body>
<form method="post">
<input type="submit"/>
</form>
</body>

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

Noonf 26.03.2018 14:22

Да, проблема была в том, что обработчик находился в файле function.php
Но если формирую отдельный файл и прописываю action="contact-form.php" то письма совсем не приходят. Возможно адрес в action нужно прописать как-то иначе, т.к. CMS - WordPress

Noonf 26.03.2018 14:30

Все разобрался ) Прописал так action="<?php bloginfo('template_directory')?>/contact-form.php" Огромное спасибо за подсказки!!!

Noonf 26.03.2018 14:33

Nexus, я почему-то не могу отправить Вам отзыв ) Пишет, подряд одному и тому же нельзя, хотя я только что отправил отзыв laimas. И это уже не первый раз )

laimas 26.03.2018 15:55

Цитата:

Сообщение от Noonf
Да, проблема была в том, что обработчик находился в файле function.php
Но если формирую отдельный файл и прописываю action="contact-form.php" то письма совсем не приходят.

Проблема не в имени или отдельности файла, а в том как обрабатывается запрос. POST и также асинхронный GET запрос может без проблем обрабатываться и по текущему адресу, нужно только проверять условие такого запроса и после его обработки завершать работу РНР.

<?php
If($_POST) { //и т.п.
    //выполнение
    exit; //обязательно  
}
?>
<html>
далее код страницы, которую получает клиент


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