За последние 24 часа нас посетили 22366 программистов и 1060 роботов. Сейчас ищут 673 программиста ...

Контактная форма работает не корректно

Тема в разделе "JavaScript и AJAX", создана пользователем Михаил111, 26 ноя 2019.

  1. Михаил111

    Михаил111 Новичок

    С нами с:
    7 окт 2018
    Сообщения:
    8
    Симпатии:
    0
    Всем привет. Ребят подскажите в чем проблема. При отправке формы страница переходит на новую с надписью success.
    В письме вообще только текст сообщения, номер в теме письма отображается. Имя вообще не показывается. Пожскажите пожалуйста в чем проблема.
    Не судите сильно, я только учусь.

    HTML:
    1. <form id="contact" class="row form-transparent" name="form1" method="post" action="send.php">
    2.                                 <div class="col-md-6">
    3.                                     <input type="text" class="form-control" name="name" id="name" placeholder="Имя*" /></div>
    4.                                 <div class="col-md-6">
    5.                                     <input type="text" class="form-control" name="subject" id="subject" placeholder="Тема*" /></div>
    6.                                 <div class="col-md-6">
    7.                                     <div id="error_email" class="error">Введите email</div>
    8.                                     <input type="text" class="form-control" name="email" id="email" placeholder="Email*" />
    9.                                 </div>
    10.                                 <div class="col-md-6">
    11.                                     <div id="error_email" class="error">Введите телефон</div>
    12.                                     <input type="text" class="form-control" name="phone" id="phone" placeholder="Телефон*" />
    13.                                 </div>
    14.                                 <div class="col-md-12">
    15.                                     <div id="error_message" class="error">Введите сообшение</div>
    16.                                     <textarea cols="10" rows="10" name="message" id="message" class="form-control" placeholder="Сообщение"></textarea>
    17.                                 </div>
    18.                                 <div id="mail_success" class="col-md-12 success">Спасибо. Ваше сообщение отправлено.</div>
    19.                                 <div id="mail_failed" class="col-md-12 error">Ошибка! Попробуйте снова.</div>
    20.                                 <div class="col-md-12">
    21.                                     <p id="btnsubmit">
    22.                                         <input type="submit" id="send" value="ОТПРАВИТЬ" class="btn btn-custom fullwidth" />
    23.                                     </p>
    24.                                 </div>
    25.                             </form>
    Код (Javascript):
    1.  $(document).ready(function(){
    2.     'use strict'; // use strict mode
    3.    
    4.      $("#send").click(function(){
    5.         var name   = $("#name").val();
    6.         var email  = $("#email").val();
    7.         var email  = $("#phone").val();
    8.         var message  = $("#message").val();
    9.         var error = false;
    10.          if(email.length == 0 || email.indexOf("@") == "-1" || email.indexOf(".") == "-1"){
    11.            var error = true;
    12.            $("#error_email").fadeIn(500);
    13.          }else{
    14.            $("#error_email").fadeOut(500);
    15.          }
    16.          if(message.length == 0){
    17.             var error = true;
    18.             $("#error_message").fadeIn(500);
    19.          }else{
    20.             $("#error_message").fadeOut(500);
    21.          }
    22.        
    23.          if(error == false){
    24.            $("#send").attr({"disabled" : "true", "value" : "Loading..." });
    25.            
    26.            $.ajax({
    27.              type: "POST",
    28.              url : "/send.php",  
    29.              data: "name=" + name + "phone=" + phone + "&email=" + email + "&subject=" + "You Got Email" + "&message=" + message,
    30.              success: function(data){  
    31.               if(data == 'success'){
    32.                 $("#btnsubmit").remove();
    33.                 $("#mail_success").fadeIn(500);
    34.               }else{
    35.                 $("#mail_failed").html(data).fadeIn(500);
    36.                 $("#send").removeAttr("disabled").attr("value", "send");
    37.               }    
    38.              }
    39.            });
    40.         }
    41.             return false;                    
    42.       });  
    43.     });
    PHP:
    1. <?php
    2.     $email_to = "info@webexpress.kz"; // change with your email
    3.     $name     = $_POST['name'];
    4.     $phone    = $_POST['phone'];
    5.     $email    = $_POST['email'];
    6.     $subject   = $_POST['subject'];
    7.     $message    = $_POST['message'];
    8.    
    9.     $headers  = "From: $email\r\n";
    10.     $headers .= "Reply-To: $email\r\n";
    11.    
    12.     if(mail($email_to, $phone, $subject, $message, $headers)){
    13.         echo "success";      
    14.     }
    15.     else{
    16.         echo "failed";    
    17.     }
    18. ?>
     
  2. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Код (Javascript):
    1. var email  = $("#email").val();
    2. var email  = $("#phone").val();
     
  3. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    В таком случае лучше сразу взять за правило разбивать код на функциональные кусочки, и тестировать их последовательно, переходя к следующему по мере отладки предыдущего.

    Разработка - это не столько написание кода, сколько его отладка)) По крайней мере по времени :)
    --- Добавлено ---
    Если код сложный:

    1. Пишешь сначала простейший прототип,
    2. добиваешься его полной работоспособности,
    3. а потом шаг за шагом начинаешь привинчивать сверху к нему нужный функционал.

    это основа кодирования, а вовсе не знание синтаксиса ))
     
  4. Михаил111

    Михаил111 Новичок

    С нами с:
    7 окт 2018
    Сообщения:
    8
    Симпатии:
    0
    Спасибо. Но проблема не решилась. После отправки формы, при перезагрузки странице, открывается белая страница с надписью success, мне бы хотелось чтоб после отправки формы, не переходить ни на какие странице
     
  5. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Код (Javascript):
    1. this.preventDefault();
     
    Roman __construct нравится это.
  6. Михаил111

    Михаил111 Новичок

    С нами с:
    7 окт 2018
    Сообщения:
    8
    Симпатии:
    0
    Если честно не совсем понятно куда нужно прописать this.preventDefault();
     
  7. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    HTML:
    1. <form id="contact" class="row form-transparent" name="form1" method="post" action="send.php">
    2.     <div class="col-md-6">
    3.         <input type="text" class="form-control" name="name" id="name" placeholder="Имя*" /></div>
    4.     <div class="col-md-6">
    5.         <input type="text" class="form-control" name="subject" id="subject" placeholder="Тема*" /></div>
    6.     <div class="col-md-6">
    7.         <div id="error_email" class="error">Введите email</div>
    8.         <input type="text" class="form-control" name="email" id="email" placeholder="Email*" />
    9.     </div>
    10.     <div class="col-md-6">
    11.         <div id="error_email" class="error">Введите телефон</div>
    12.         <input type="text" class="form-control" name="phone" id="phone" placeholder="Телефон*" />
    13.     </div>
    14.     <div class="col-md-12">
    15.         <div id="error_message" class="error">Введите сообшение</div>
    16.         <textarea cols="10" rows="10" name="message" id="message" class="form-control" placeholder="Сообщение"></textarea>
    17.     </div>
    18.     <div id="mail_success" class="col-md-12 success">Спасибо. Ваше сообщение отправлено.</div>
    19.     <div id="mail_failed" class="col-md-12 error">Ошибка! Попробуйте снова.</div>
    20.     <div class="col-md-12">
    21.         <p id="btnsubmit">
    22.             <input type="submit" id="send" value="ОТПРАВИТЬ" class="btn btn-custom fullwidth" />
    23.         </p>
    24.     </div>
    25. </form>
    26. <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
    27. $(document).ready(function() {
    28.     $("form[name=form1]").submit(function(e){
    29.         e.preventDefault();
    30.         let data = $(this).serialize();
    31.         console.log(data);
    32.     });
    33. });
     
  8. zheca

    zheca Новичок

    С нами с:
    25 ноя 2019
    Сообщения:
    13
    Симпатии:
    1
    В HTML:
    Код (Text):
    1. <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
    2. <script>
    3. jQuery(document).ready(function($) {
    4.     $("#contact").submit(function() {
    5.         var str = $(this).serialize();
    6.         $.ajax({
    7.             type: "POST",
    8.             url: "/send.php",
    9.             data: str,
    10.             success: function(msg) {
    11.                 if(msg == 'OK') {
    12.                     result = 'Сообщение отправлено';
    13.                     $("#fields").hide();
    14.                 }
    15.                 else {result = msg;}
    16.                 $('#note').html(result);
    17.                 }
    18.         });
    19.         alert('Ваш запрос отправлен. Спасибо за обращение!');
    20.         document.getElementById("contact").reset();
    21.         return false;
    22.     });
    23. });
    24. </script>
    В PHP:
    Код (Text):
    1. function a($result)
    2. { if (is_array($result)) return array_map('a', $result); else return iconv("utf-8", "windows-1251", $result); }
    3. $_POST = a($_POST);
     
  9. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    Вот, видите, вы уже учитесь формулировать проблему так, чтобы она была понятна и другим, а не только вам :)

    То есть описывать не только фактическую сторону вопроса, но и желаемую))

    Артур ответил на ваш вопрос.
     
  10. Михаил111

    Михаил111 Новичок

    С нами с:
    7 окт 2018
    Сообщения:
    8
    Симпатии:
    0
    Я вам благодарен. Но ваш вариант не работает
     
  11. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    Михаил, все работает))

    Код (Javascript):
    1. event.preventDefault()
    это стандартный механизм, чтобы отменить действие по умолчанию. он специально для этого и создан))
    --- Добавлено ---
    и его используют везде и всюду, и все работает )
     
  12. Михаил111

    Михаил111 Новичок

    С нами с:
    7 окт 2018
    Сообщения:
    8
    Симпатии:
    0
    Все таки не срабатывает отправка, вашего примера. Я немного подкорректировал форму, сейчас приходит имя, тема, номер телефона. Но проблему с перезагрузкой так и не получилось решить. То есть, сейчас при отправке формы переход на новую страницу с надписью Сообщение отправлено.

    сейчас так
    index.html
    HTML:
    1.  <form id="contact" class="row form-transparent" name="form1" method="post" action="send.php">
    2.                                 <div class="col-md-6">
    3.                                     <input type="text" class="form-control" name="name" id="name" placeholder="Имя*" /></div>
    4.                                 <div class="col-md-6">
    5.                                     <input type="text" class="form-control" name="subject" id="subject" placeholder="Тема*" /></div>
    6.                                 <div class="col-md-6">
    7.                                     <div id="error_email" class="error">Введите email</div>
    8.                                     <input type="text" class="form-control" name="email" id="email" placeholder="Email*" />
    9.                                 </div>
    10.                                 <div class="col-md-6">
    11.                                     <div id="error_email" class="error">Введите телефон</div>
    12.                                     <input type="text" class="form-control" name="mobile" id="mobile" placeholder="Телефон*" />
    13.                                 </div>
    14.                                 <div class="col-md-12">
    15.                                     <div id="error_message" class="error">Введите сообшение</div>
    16.                                     <textarea cols="10" rows="10" name="message" id="message" class="form-control" placeholder="Сообщение"></textarea>
    17.                                 </div>
    18.                                 <div id="mail_success" class="col-md-12 success">Спасибо. Ваше сообщение отправлено.</div>
    19.                                 <div id="mail_failed" class="col-md-12 error">Ошибка! Попробуйте снова.</div>
    20.                                 <div class="col-md-12">
    21.                                     <p id="btnsubmit">
    22.                                         <input type="submit" id="send" value="ОТПРАВИТЬ" class="btn btn-custom fullwidth" />
    23.                                     </p>
    24.                                 </div>
    25.                             </form>
    contact.js
    Код (Javascript):
    1. $(document).ready(function(){
    2.   $("#send").click(function(){
    3.     var name   = $("#name").val();
    4.     var email  = $("#email").val();
    5.     var message  = $("#message").val();
    6.     var mobile  = $("#mobile").val();
    7.     var error = false;
    8.  
    9.      if(email.length == 0 || email.indexOf("@") == "-1" || email.indexOf(".") == "-1"){
    10.        var error = true;
    11.        $("#error_email").fadeIn(500);
    12.      }else{
    13.        $("#error_email").fadeOut(500);
    14.      }
    15.      if(message.length == 0){
    16.         var error = true;
    17.         $("#error_message").fadeIn(500);
    18.      }else{
    19.         $("#error_message").fadeOut(500);
    20.      }
    21.      if(name.length == 0){
    22.         var error = true;
    23.         $("#error_name").fadeIn(500);
    24.      }else{
    25.         $("#error_name").fadeOut(500);
    26.      }
    27.  
    28.      if(error == false){
    29.        $("#send").attr({"disabled" : "true", "value" : "Loading..." });
    30.  
    31.        $.ajax({
    32.          type: "POST",
    33.          url : "/send.php",  
    34.          data: "name=" + name + "&email=" + email + "&subject=" + "You Got Email" +    "&message=" + message + "&mobile=" + mobile,
    35.          success: function(data){  
    36.           if(data == 'success'){
    37.             $("#btnsubmit").remove();
    38.             $("#mail_success").fadeIn(500);
    39.           }else{
    40.             $("#mail_failed").html(data).fadeIn(500);
    41.             $("#send").removeAttr("disabled").attr("value", "send");
    42.           }    
    43.          }
    44.        });
    45.     }
    46.         return false;                    
    47.   });  
    48. });
    send.php
    PHP:
    1. <?php
    2.  
    3. $name = $_POST['name'];
    4. $subject = $_POST['subject'];
    5. $sender = $_POST['email'];
    6. $sent_message = $_POST['message'];
    7. $mobile = $_POST['mobile'];
    8.  
    9. $message = "Name: " . $name . "\r\n" . "Subject: " . $subject . "\r\n" . "Message: " . $sent_message . "\r\n" . "Phone number: " . $mobile;
    10.  
    11.  
    12.   $your_site_name = "www.logistics.webexpress.kz";
    13.   $your_email = "webexpress.kz@gmail.com";  
    14.  
    15.  
    16. // setting header:
    17.     $header  = "MIME-Version: 1.0\r\n";
    18.     $header .= "Content-type: text/html; charset=utf-8\r\n";
    19.     $header .= "From: {$name} <{$sender}>\r\n";
    20.  
    21.     //   to       subject               message       header
    22.     $result = mail($your_email, "Сообщение с сайта ".$your_site_name, nl2br($message), $header);
    23.     echo "Ваше сообщение отправлено";
    24. ?>
     
  13. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    Мне откровенно лениво разбираться в ваших нагромождениях кода.

    Вот рабочий (спецом сейчас проверил, и сделал вывод в алерты)))) пример из сети, первый попавшийся.

    Можете взять за основу и переделать свой код.

    Код (Javascript):
    1. <!DOCTYPE html>
    2. <html>
    3.     <head>
    4.         <title>Использование jQuery метода preventDefault() объекта Event</title>
    5.         <script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
    6.         <script>
    7.     $( document ).ready(function(){
    8.       $( "a" ).click(function( e ){ // задаем функцию при нажатии на элемент <a>
    9.         e.preventDefault(); // отменяем действие события по умолчанию
    10.         //console.log( "anchor click prevented" ); // выводим сообщение в консоль
    11.         alert('preventDefault таки работает! (-:');
    12.       });
    13.       $( "form" ).submit(function( e ){ // задаем функцию при отправке формы
    14.         e.preventDefault(); // отменяем действие события по умолчанию
    15.         //console.log( "form submit prevented" ); // выводим сообщение в консоль
    16.         alert('preventDefault таки работает! (-:');
    17.       });
    18.     });
    19.         </script>
    20.     </head>
    21.     <body>
    22.         <a href = "https://www.google.ru">Перейти на сайт Google</a>
    23.         <form action = "script.php">
    24.             <input type = "text">
    25.             <input type = "submit" value = "Отправить">
    26.         </form>
    27.     </body>
    28. </html>
     
  14. zheca

    zheca Новичок

    С нами с:
    25 ноя 2019
    Сообщения:
    13
    Симпатии:
    1
    Добавьте в пхп в конце:

    Код (Text):
    1. $redirect = isset($_SERVER['HTTP_REFERER'])? $_SERVER['HTTP_REFERER']:'redirect-form.html';
    2. header("Location: $redirect");
    3. exit();
     
  15. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    Теперь ждем вопроса: а что такое "заголовки уже отосланы"?
     
  16. zheca

    zheca Новичок

    С нами с:
    25 ноя 2019
    Сообщения:
    13
    Симпатии:
    1
    Может возникнуть другой вопрос - а как сделать, чтобы было без перезагрузки страницы.
     
    Roman __construct нравится это.
  17. Roman __construct

    Roman __construct Активный пользователь

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    )))

    В общем, пора уже CookBook писать совместную :)