Ответ об успешной отправки формы обратной связи

nipopadyuk

Постоялец
Регистрация
3 Авг 2010
Сообщения
52
Реакции
3
Доброго дня.

Прошу помочь с проблемой.
Есть 2 формы обратной связи, есть 2 скрипта обработчика, и есть два скрипта на ajax которые ловят кнопку "отправить" и выводят сообщения об успешной отправки.
В первом случае простая форма, 2 поля, все работает прекрасно:
HTML:
    <form action="index1.php" id="colback-1" method="POST">
        <input type="text" name="name" id="name" class="reveal-modal-colback-form-filed-1" value="Ваше Имя:*" onfocus="if (this.value == 'Ваше Имя:*') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Ваше Имя:*';}" /><br />
        <input type="text" name="phone" id="phone" class="reveal-modal-colback-form-filed-2" value="Телефон:*" onfocus="if (this.value == 'Телефон:*') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Телефон:*';}" /><br />
        <input type="submit" id="form-key-colback-1" value="" class="reveal-modal-colback-form-key-1" />
    </form>
PHP:
<?php
/* Здесь проверяется существование переменных */
  if (isset($_POST['phone'])) {$phone = $_POST['phone'];}
if (isset($_POST['name'])) {$name = $_POST['name'];}
  if (isset($_POST['email'])) {$email = $_POST['email'];}
/* Сюда впишите свою эл. почту */
$address = "мыло";
/* А здесь прописывается текст сообщения, \n - перенос строки */
$mes = "Тема: Заказ обратного звонка на сайте ФУТБОЛКИ В САМАРЕ\nТелефон: $phone\nИмя: $name";
/* А эта функция как раз занимается отправкой письма на указанный вами email */
$sub='Заказ'; //сабж
$email='Заказ <vpluce.ru>'; // от кого
$send = mail ($address,$sub,$mes,"Content-type:text/plain; charset = utf-8\r\nFrom:$email");
ini_set('short_open_tag', 'On');
header('Refresh: 3; URL=index.html');
?>
Код:
$(document).ready(function () {

    $('#colback-1').bind('submit', function(con) {
      
        con.preventDefault();  
        var isFormValid = true;
      
        $('#colback-1 [type=text]').each(function(){
      
            var znach = $(this).val();
            var defZnach = $(this).prop('defaultValue');
           if (znach == defZnach) {
            $('#znach_no_colback-1').show()
            $('#znach_no_colback-1').text('Вы не заполнили обязательные поля!');
             isFormValid = false;
            
                }
                });
        
        if ( isFormValid == true ) {
          
            $.ajax({
            url: $(this).attr('action'),
            async:true,
            type: 'POST',
            data: $(this).serialize(),
            success: function(data){ $('#znach_colback_head-1').text(data)
                                        $('#znach_colback_text-1-1').text(data)
                                        $('#znach_colback_text-1-2').text(data);}
                  });
          
            $('#colback-1').ajaxComplete(function(){
                $('#colback-1').hide();
                $('#znach_no_colback-1').hide();
                $('#znach_colback-1').show()
                $('#znach_colback_head-1').text('ВАША ЗАЯВКА ОТПРАВЛЕНА!');
                $('#znach_colback_text-1-1').text('Наши менеджеры свяжуться');
                $('#znach_colback_text-1-2').text('с Вами в ближайшее время.');
            });
            }
    });  

    $('#znach_no_colback-1').hide();
    $('#znach_colback-1').hide();
});


Во втором случае, форма сложнее, и отправляет файл, который выбирает пользователь на своем компьютере. если я убираю ajax код, то все работает, письмо уходит, и сразу идет редирект на скрипт обработчик. если оставить ajax, то при нажатии кнопки, появляется заглушка "ваша заявка отправлена", но по факту, скрипт не отрабатывается, и письмо не уходит.
Помогите пожалуйста сделать заглушку, и чтобы скрипт при этом обрабатывался.
HTML:
            <form action="index2.php" method="post" id="buklet-1" enctype="multipart/form-data">




            <input name="name"  type="text" class="snap-point-1-content-form-filed-1" value="Ваше Имя:*" onfocus="if (this.value == 'Ваше Имя:*') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Ваше Имя:*';}" />



            <input name="tel"  class="snap-point-1-content-form-filed-2" value="Телефон:*" onfocus="if (this.value == 'Телефон:*') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Телефон:*';}"  type="tel" />



            <input name="email"   class="snap-point-1-content-form-filed-3" value="E-mail:*" onfocus="if (this.value == 'E-mail:*') {this.value = '';}" onblur="if (this.value == '') {this.value = 'E-mail:*';}" />



            <textarea name="message" class="snap-point-1-content-form-filed-4" placeholder="&#010;Если у тебя нет подходящего изображения, опиши что ты хочешь видеть на своей будущей футболке, и мы найдем решение абсолютно бесплатно!"></textarea>


            <input name="file"  type="file"  class="snap-point-1-content-form-key-1"  />
<br><br>
        <input value="Отправить" name="sendMail" type="submit" class="snap-point-1-content-form-key-1"  />

</form>
PHP:
 <?php
$to = 'мыло';

if ( isset( $_POST['sendMail'] ) ) {
  $name  = substr( $_POST['name'], 0, 64 );
  $tel = substr( $_POST['tel'], 0, 64 );
  $email   = substr( $_POST['email'], 0, 64 );
  $message = substr( $_POST['message'], 0, 250 );

  if ( !empty( $_FILES['file']['tmp_name'] ) and $_FILES['file']['error'] == 0 ) {
    $filepath = $_FILES['file']['tmp_name'];
    $filename = $_FILES['file']['name'];
  } else {
    $filepath = '';
    $filename = '';
  }
  $body = "Имя:\r\n".$name."\r\n\r\n";
  $body .= "Контактный номер:\r\n".$tel."\r\n\r\n";
  $body .= "E-mail:\r\n".$email."\r\n\r\n";
  $body .= "Описание заказа:\r\n".$message;
  send_mail($to, $body, $email, $filepath, $filename);

}




// Вспомогательная функция для отправки почтового сообщения с вложением
function send_mail($to, $body, $email, $filepath, $filename)
{
  $subject = 'Тестирование формы с прикреплением файла с сайта proverstka.com.ua';
  $boundary = "--".md5(uniqid(time())); // генерируем разделитель
  $headers = "From: ".$email."\r\n";  
  $headers .= "MIME-Version: 1.0\r\n";
  $headers .="Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n";
  $multipart = "--".$boundary."\r\n";
  $multipart .= "Content-type: text/plain; charset=\"utf-8\"\r\n";
  $multipart .= "Content-Transfer-Encoding: quoted-printable\r\n\r\n";

  $body = $body."\r\n\r\n";
  $multipart .= $body;
  $file = '';
  if ( !empty( $filepath ) ) {
    $fp = fopen($filepath, "r");
    if ( $fp ) {
      $content = fread($fp, filesize($filepath));
      fclose($fp);
      $file .= "--".$boundary."\r\n";
      $file .= "Content-Type: application/octet-stream\r\n";
      $file .= "Content-Transfer-Encoding: base64\r\n";
      $file .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
      $file .= chunk_split(base64_encode($content))."\r\n";
    }
  }
  $multipart .= $file."--".$boundary."--\r\n";
    mail($to, $subject, $multipart, $headers);
  
}
?>
Код:
$(document).ready(function () {

    $('#buklet-1').bind('submit', function(con) {
      
        con.preventDefault();  
        var isFormValid = true;
      
        $('#buklet-1 [type=text]').each(function(){
      
            var znach = $(this).val();
            var defZnach = $(this).prop('defaultValue');
           if (znach == defZnach) {
            $('#znach_no_buklet-1').show()
            $('#znach_no_buklet-1').text('Вы не заполнили обязательные поля!');
             isFormValid = false;
            
                }
                });
        
        if ( isFormValid == true ) {
          
            $.ajax({
            url: $(this).attr('action'),
            async:true,
            type: 'POST',
            data: $(this).serialize(),
            success: function(data){ $('#znach_buklet_head-1').text(data)
                                        $('#znach_buklet_text-1-1').text(data)
                                        $('#znach_buklet_text-1-2').text(data);}
                  });
          
            $('#buklet-1').ajaxComplete(function(){
                $('#buklet-1').hide();
                $('#znach_no_buklet-1').hide();
                $('#znach_buklet-1').show()
                $('#znach_buklet_head-1').text('ВАША ЗАЯВКА ОТПРАВЛЕНА!');
                $('#znach_buklet_text-1-1').text('Наши менеджеры свяжуться');
                $('#znach_buklet_text-1-2').text('с Вами в ближайшее время.');
            });
            }
    });  

    $('#znach_no_buklet-1').hide();
    $('#znach_buklet-1').hide();
});
 
в случае с файлом не сработает
data: $(this).serialize()
смотрите в сторону передачи formData
Код:
           var formData    = new FormData($("#buklet-2")[0]); //id Вашей формы 2
        

            //параметры для ajax дополнить
            data:  formData,
            mimeType:"multipart/form-data",
            contentType: false,
            cache: false,
            processData: false,
 
в случае с файлом не сработает
data: $(this).serialize()
смотрите в сторону передачи formData


Код:
$(document).ready(function () {

    $('#buklet-1').bind('submit', function(con) {
       
        con.preventDefault();   
        var isFormValid = true;
                   var formData    = new FormData($("#buklet-1")[0]); //id Вашей формы 2
                   
        $('#buklet-1 [type=text]').each(function(){
       
            var znach = $(this).val();
            var defZnach = $(this).prop('defaultValue');
           if (znach == defZnach) {
            $('#znach_no_buklet-1').show()
            $('#znach_no_buklet-1').text('Вы не заполнили обязательные поля!');
             isFormValid = false;
             
                }
                });
         
        if ( isFormValid == true ) {
           
            $.ajax({
            url: $(this).attr('action'),
            async:true,
            type: 'POST',
            //параметры для ajax дополнить

            data:  formData,
            mimeType:"multipart/form-data",
            contentType: false,
            cache: false,
            processData: false,           
            success: function(data){ $('#znach_buklet_head-1').text(data)
                                        $('#znach_buklet_text-1-1').text(data)
                                        $('#znach_buklet_text-1-2').text(data);}
                  });
           
            $('#buklet-1').ajaxComplete(function(){
                $('#buklet-1').hide();
                $('#znach_no_buklet-1').hide();
                $('#znach_buklet-1').show()
                $('#znach_buklet_head-1').text('ВАША ЗАЯВКА ОТПРАВЛЕНА!');
                $('#znach_buklet_text-1-1').text('Наши менеджеры свяжуться');
                $('#znach_buklet_text-1-2').text('с Вами в ближайшее время.');
            });
            }
    });   

    $('#znach_no_buklet-1').hide();
    $('#znach_buklet-1').hide();
});

тоже не сработало :(
 
В отладке проверял в реквесте переменные правильно все передаются?
 
В отладке проверял в реквесте переменные правильно все передаются?
как сделать отладку джава скрипта? сайт на хостинге.

В отладке проверял в реквесте переменные правильно все передаются?
видимо после ajax скрипта переменные не передаются.
Сдела файл, и поставил в конце php запись содержимого всех переменных в этот файл. После нажатия заветной кнопки, файл остался пустым.
как только убрал из формы id="buklet-1", и письмо отправилось, и файл заполнился...
видимо что-то еще нужно допилить в JS файле. молю о помощи.
 
Последнее редактирование модератором:
Все правильно потому что ты в JS коде установил событие на отправку формы по id - buklet-1. Возьми для примера Google Chrome там правой кнопкой на экране -> "Посмотреть код", после вкладка Network -> XHR. После этого нажми чтобы у тебя отработал ajax запрос. Появиться новая запись на нее нажми и проверь Request URL, Request Method, Status Code и Query String Parameters
 
видимо после ajax скрипта переменные не передаются.
Сдела файл, и поставил в конце php запись содержимого всех переменных в этот файл. После нажатия заветной кнопки, файл остался пустым.
как только убрал из формы id="buklet-1", и письмо отправилось, и файл заполнился...
видимо что-то еще нужно допилить в JS файле. молю о помощи.
У меня была одна интересная бага. Что ajax уходил два раза. И были проблемы с загрузкой файлов таким способом. Можем попробовать следующее: вынесите за форму кнопку
<input value="Отправить" name="sendMail" type="submit" именно ЗА ФОРМУ. После этого дайте ей id="sendMail" и повесьте все тот же обработчик на отправку содержимого формы по клику на этой кнопке. Только замените this внутри на id формы и получение ее атрибутов. Давайте попробуем так. Плюс нам сюда запостите заголовки ответов и отправки информации на сервер. Так будет понятнее.
 
В принципе не обязательно выносить. Достаточно посмотреть сколько строчек появится во влкадке network при отправке ajax запроса
 
В принципе не обязательно выносить. Достаточно посмотреть сколько строчек появится во влкадке network при отправке ajax запроса
это то понятно. и начать нужно с отладки. пока мы здесь не увидим скрины и заголовки, или же человек не выложит свой пример скрипта в интернет и не даст ссылку, гадать на кофейной гуще можно бесконечно-) и о сервере, и о версии браузера, и о консоли ошибок, и о консоли отправки запросов, и о многом другом. В общем ждем от ТС уточнений, желательно со скринами.
 
Все правильно потому что ты в JS коде установил событие на отправку формы по id - buklet-1. Возьми для примера Google Chrome там правой кнопкой на экране -> "Посмотреть код", после вкладка Network -> XHR. После этого нажми чтобы у тебя отработал ajax запрос. Появиться новая запись на нее нажми и проверь Request URL, Request Method, Status Code и Query String Parameters

это то понятно. и начать нужно с отладки. пока мы здесь не увидим скрины и заголовки, или же человек не выложит свой пример скрипта в интернет и не даст ссылку, гадать на кофейной гуще можно бесконечно-) и о сервере, и о версии браузера, и о консоли ошибок, и о консоли отправки запросов, и о многом другом. В общем ждем от ТС уточнений, желательно со скринами.
Начал делать как Вы писали. в общем результат. с Яндекс браузера форма отправилась на почту, файл во вложении имеется.
С фаерфокса форма так и не пришла...

прикладываю сайт...
 

Вложения

  • сайт.7z
    2,1 MB · Просмотры: 11
Последнее редактирование модератором:
Назад
Сверху