Форма не отправляется

91
30 сентября 2021, 13:00

На странице есть форма, которую пользователь должен заполнить и отправить, письмо с информацией из формы должно придти мне на почту. js скрипт:

<script>
            $(document).ready(function(){
            $('#btn_submit').click(function(){
                var PN           = $('#PN').val();
                var TN           = $('#TN').val();
                var PW           = $('#PW').val();
                // отправляем данные
                $.ajax({
                    url: "send.php", 
                    type: "post", 
                    data: {
                        "PN":    PN,
                        "TN":   TN,
                        "PW":   PW       
                    },
                    error:function(){$("#erconts").html("Произошла ошибка!");}, 
                    beforeSend: function() {                     
                        $("#erconts").html("Отправляем данные...");                   
                    },                 
                    success: function(result){                     
                        $('#erconts').html(result);                     
                        console.log("ntcn");                 
                    }  
                });
            });
        });
        </script>

Файл send.php:

<?php
                $PN           = $_POST("PN");
                $TN           = $_POST("TN");
                $PW           = $_POST("PW");

        /*ЕСЛИ ВСЕ ПОЛЯ ЗАПОЛНЕНЫ НАЧИНАЕМ СОБИРАТЬ ДАННЫЕ ДЛЯ ОТПРАВКИ*/
        $to = "qqqq@qqqqq.com"; /* Адрес, куда отправляем письма*/
        $subject = "qqqqq"; /*Тема письма*/
        $headers = "MIME-Version: 1.0\r\n";
        $headers .= "Content-type: text/html; charset=utf-8\r\n";
        //$headers .= "From: <test@mail.ru>\r\n";/*ОТ КОГО*/  
        $message .= "1: ".$PN."\n";
        $message .= "2: ".$TN."\n";
        $message .= "3: ".$PW."\n";
        $send = mail($to, $subject, $message, $headers); 
        if ($send == "true")
        {
            echo "Ваше сообщение отправлено. Мы ответим вам в ближайшее время.\r\n";
        }
        else
        {
            echo "Не удалось отправить, попробуйте снова";
        }   
?>

При нажатии на кнопку send, в консоли пишет ntcn, т.е js скрипт отработал нормально, но письмо на почту не приходит, в чем может быть проблема?

Answer 1

Рабочий вариант, результат:

Полученное письмо:

Файл отправки формы:

<?php
header('Content-Type: text/html; charset=utf-8');
?>
<script
  src="https://code.jquery.com/jquery-3.4.1.js"
  integrity="sha256-WpOohJOqMqqyKL9FccASB9O0KwACQJpFTUBLTYOVvVU="
  crossorigin="anonymous"></script>
<script>
            $(document).ready(function(){
            $('#btn_submit').click(function(){
                event.preventDefault();
                var PN = $('#PN').val();
                var TN  = $('#TN').val();
                var PW  = $('#PW').val();
                // отправляем данные
                $.ajax({
                    url: "send.php", 
                    type: "post", 
                    data: {
                        "PN": PN,
                        "TN": TN,
                        "PW": PW       
                    },
                    error:function(){$("#erconts").html("Произошла ошибка!");}, 
                    beforeSend: function() {                     
                        $("#erconts").html("Отправляем данные...");                   
                    },                 
                    success: function(result){ 
                       $('#erconts').html(result);                     
                        console.log("ntcn");                 
                    }  
                });
            });
        });
        </script>
        <form  method="post" name="form" id="form">
                    <input  type="text" id="PN" name="PN" placeholder="PN" /><br>
                    <input  type="text" id="TN" name="TN" placeholder="TN" /><br>
                    <input  type="text" id="PW" name="PW" placeholder="PN" /><br>
                    <input type="submit"  id="btn_submit" style="margin: 0 auto" value="Отправить" />
                </form>
                <div id="erconts"></div>

Файл send.php:

<?php
                $PN = $_POST['PN'];
                $TN = $_POST['TN'];
                $PW = $_POST['PW'];
        /*ЕСЛИ ВСЕ ПОЛЯ ЗАПОЛНЕНЫ НАЧИНАЕМ СОБИРАТЬ ДАННЫЕ ДЛЯ ОТПРАВКИ*/
        $to = "qqqq@qqqqq.com"; /* Адрес, куда отправляем письма*/
        $subject = "qqqqq"; /*Тема письма*/
        $headers = "MIME-Version: 1.0\r\n";
        $headers .= "Content-type: text/html; charset=utf-8\r\n";
        //$headers .= "From: <test@mail.ru>\r\n";/*ОТ КОГО*/  
        $message = "1: ".$PN."\n";
        $message .= "2: ".$TN."\n";
        $message .= "3: ".$PW."\n";
        $send = mail($to, $subject, $message, $headers); 
        if ($send == "true")
        {
            echo "Ваше сообщение отправлено. Мы ответим вам в ближайшее время.<br>";
            echo "Данные: PN:".$PN." TN:".$TN." PW: ".$PW;
        }
        else
        {
            echo "Не удалось отправить, попробуйте снова";
        }   
?>
Answer 2

Как уже написали вам нужно включить в вашем приёмщике ответа (PHP файле) вот это

ini_set("display_errors","on"); 
error_reporting(E_ALL);,

А далее уже смотреть внимательно куда вы продвигаетесь с заглушками типа

echo('->good');

А так же Shift+Ctrl+I и смотрите какие данные вы передаете и что получаете.

READ ALSO
Умножение в MySQL

Умножение в MySQL

Есть таблица apartments (квартиры), у которой есть поля total_area (общая площадь) и price (цена за 1 квадратный метр)

75
Отображение товара в битриксе при интеграции в 1с битрикс

Отображение товара в битриксе при интеграции в 1с битрикс

Нужна ваша помощь профессионалыНе могу понять в чем проблема

67
Как передать массив на страницу?

Как передать массив на страницу?

Как можно передать массив $orderlist на страницу successphp

94
Скрипт для автосоздания блоков

Скрипт для автосоздания блоков

Есть сервак на который пишется видеопоток с камер наблюденияЯ делаю сайт для пользователей которые будут отсматривать эти камеры

66