Не отправляются письма из формы в модальном окне

Тема в разделе "PHP", создана пользователем mediol, 15 май 2017.

  1. mediol

    mediol

    Регистрация:
    15 май 2017
    Сообщения:
    0
    Симпатии:
    0
    Здравствуйте! Итак, постараюсь объяснить ситуацию. Есть страница сверстана на bootstrap, на которой есть три формы + одна форма во всплывающем модальном окне (оно открывается при нажатии кнопки "Позвоните мне").

    К формам подключил проверку валидации с помощью bootstrap-validator и в скрипте прописал через запятые идентификаторы всех форм, включая ту, что в модальном, но валидация формы в модальном окне не работает (с остальными все ок!).

    Также я реализовал отправку писем с использованием php и снова все три формы отправляют письма, кроме той, что в мод окне. Если я правильно понял, то само модальное как-то мешает работе формы. Прошу помочь разобраться с этой проблемой.

    Код одной из трех форм:

    HTML:
    <form id="otpiska" action="post.php" method="POST">
                    <div class="row">
                    <h3>Закажите наш сервис мгновенной отписки от ненужных аккаунтов</h3>
                      <div class="form-group col-md-4">
                        <input type="text" class="form-control" name="name" placeholder="Евгений Болобан" required>
                        <span class="glyphicon form-control-feedback" aria-hidden="true"></span>
                      </div>
                      <div class="form-group col-md-4">
                        <input type="email" class="form-control" name="email" placeholder="Адрес почты" required>
                        <span class="glyphicon form-control-feedback" aria-hidden="true"></span>
                      </div>
                      <div class="form-group col-md-4">
                        <button type="submit" class="btn btn-primary">отправить
                          <i class="fa fa-envelope" aria-hidden="true"></i>
                        </button>
                      </div>
                    </div>
                  </form>
    Полный код модального окна с формой:

    HTML:
    <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#call">
                    <i class="fa fa-phone" aria-hidden="true"></i>
                    Заказать звонок
                  </button>
                  <!--Modal-->
                  <div class="modal fade" id="call">
                    <div class="modal-dialog" role="document">
                      <div class="modal-content">
                        <div class="modal-header text-center">
                          <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                          <h4 class="modal-title" id="myModalLabel">Оставьте свой номер <br>и наш менеджер позвонит Вам</h4>
                        </div>
                        <div class="modal-body">
                          <form id="callback"  action="post.php" method="post">
                            <p><img src="img/time.png" alt="time">Ответ в течение 15 минут</p>
                            <div class="form-group">
                              <input type="text" name="name" class="form-control" placeholder="Имя">
                            </div>
                            <div class="form-group">
                              <input type="tel" name="mail" class="form-control" placeholder="Телефон: (066) 555 3333">
                            </div>
                            <button type="submit" class="btn btn-primary">Позвоните мне</button>
                          </form>
                        </div>
                      </div>
                    </div>
                  </div>
    Код файла post.php:

    PHP:
    <?PHP header("Content-Type: text/html; charset=utf-8");
    ?>

    <?
    // ----------------------------конфигурация-------------------------- //
    $adminemail="[email protected]";  // e-mail админа
    $date=date("d.m.y"); // число.месяц.год 
    $time=date("H:i"); // часы:минуты:секунды 
    $backurl="http://instarise.mediol.in.ua/index.html";  // На какую страничку переходит после отправки письма

    // Принимаем данные с формы 
    $name=$_POST['name']; 
    $email=$_POST['email'];

    // Проверяем валидность e-mail

    if (!preg_match("|^([a-z0-9_\.\-]{1,20})@([a-z0-9\.\-]{1,20})\.([a-z]{2,4})|is",
    strtolower($email)))

      echo
    "<center>Вернитесь <a href='javascript:history.back(1)'><B>назад</B></a>. Вы неверно указали почту!";

     else { 
    $msg=" 
    Имя: $name
    E-mail: $email";

     // Отправляем письмо админу 
     
    mail("$adminemail", "$date $time Новая заявка от $name", "$msg");

    // Сохраняем в базу данных
     
    $f = fopen("message.txt", "a+");
    fwrite($f," \n $date $time Новая заявка от $name");
    fwrite($f,"\n $msg ");
    fwrite($f,"\n ---------------");
    fclose($f);

    // Выводим сообщение пользователю

    print "<script language='Javascript'><!--
    function reload() {location = \"$backurl\"}; setTimeout('reload()', 2000);
    //--></script>
    <br><br><p><center><b>Сообщение отправлено!</b></center></p>
    <p><center><b>Подождите, сейчас вы будете перенаправлены на главную страницу...</b></center></p>"; 
    exit;
    }
    ?>
     
  2. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Пользуйтесь инструментами разработчика в браузере.
    Прежде всего посмотрите, есть ли запрос при сабмите формы в модальном окне. Если нет, значит что-то мешает сабмиту, например, на форму навешен js обработчик, который перехватывает сабмит и не пускает дальше (тот же валидатор, например).
     
  3. mediol

    mediol

    Регистрация:
    15 май 2017
    Сообщения:
    0
    Симпатии:
    0
    Я посмотрю,но валидацию эта форма тоже не проходит. Получается, что скрипт валидатора там тоже не работает.
     
  4. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Если на форму навешен валидатор и она валидацию не проходит, то, конечно, она никогда не засабмитится.
     
  5. mediol

    mediol

    Регистрация:
    15 май 2017
    Сообщения:
    0
    Симпатии:
    0
    немного неправильно выразился. Я име ввиду, что валидация на форме не работает. То есть на всех формах кнопка "отправить" неактивна, пока незаполненны поля, а у формы в модальном окне валидация не работает (кнопка "Отправить" активна)
     
  6. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Смотрите консоль браузера. там должны быть какие-то ошибки.
    Ну, и вообще, без ссылки на сайт гадать бессмысленно.
     
  7. mediol

    mediol

    Регистрация:
    15 май 2017
    Сообщения:
    0
    Симпатии:
    0
    Вот ссылка: http://instarise.mediol.in.ua/
     
  8. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Покажите код, которым вы прицепили аякс обработчик к форме обратного звонка.
    Она у вас сейчас отправляется путём перезагрузки страницы, такого быть не должно. И дело не в модальном окне, а в том, что js её не обрабатывает.
     
  9. mediol

    mediol

    Регистрация:
    15 май 2017
    Сообщения:
    0
    Симпатии:
    0
    Код ЯваСкрипт:
    Код:
    $(function(){
        $('.collapse').on('show.bs.collapse', function(){
            $(this).prev().find('.fa').removeClass().addClass('fa fa-minus-circle');
        });
        $('.collapse').on('hide.bs.collapse', function(){
            $(this).prev().find('.fa').removeClass().addClass('fa fa-plus-circle');
        });
        $('#mainform, #otpiska, #question, #callback').validator({
            feedback: {
              success: 'fa fa-check-circle',
              error: 'fa fa-times-circle'
            }
        });
    })
    Код файла post.php:
    PHP:
    <?PHP header("Content-Type: text/html; charset=utf-8");
    ?>

    <?
    // ----------------------------конфигурация-------------------------- //
    $adminemail="[email protected]";  // e-mail админа
    $date=date("d.m.y"); // число.месяц.год 
    $time=date("H:i"); // часы:минуты:секунды 
    $backurl="http://instarise.mediol.in.ua/index.html";  // На какую страничку переходит после отправки письма

    // Принимаем данные с формы 
    $name=$_POST['name']; 
    $email=$_POST['email'];

    // Проверяем валидность e-mail

    if (!preg_match("|^([a-z0-9_\.\-]{1,20})@([a-z0-9\.\-]{1,20})\.([a-z]{2,4})|is",
    strtolower($email)))

      echo
    "<center>Вернитесь <a href='javascript:history.back(1)'><B>назад</B></a>. Вы неверно указали почту!";

     else { 
    $msg=" 
    Имя: $name
    E-mail: $email";

     // Отправляем письмо админу 
     
    mail("$adminemail", "$date $time Новая заявка от $name", "$msg");

    // Сохраняем в базу данных
     
    $f = fopen("message.txt", "a+");
    fwrite($f," \n $date $time Новая заявка от $name");
    fwrite($f,"\n $msg ");
    fwrite($f,"\n ---------------");
    fclose($f);

    // Выводим сообщение пользователю

    print "<script language='Javascript'><!--
    function reload() {location = \"$backurl\"}; setTimeout('reload()', 2000);
    //--></script>
    <br><br><p><center><b>Сообщение отправлено!</b></center></p>
    <p><center><b>Подождите, сейчас вы будете перенаправлены на главную страницу...</b></center></p>"; 
    exit;
    }
    ?>
     
  10. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Тут нет кода обработки отправки формы.
     
  11. mediol

    mediol

    Регистрация:
    15 май 2017
    Сообщения:
    0
    Симпатии:
    0
    Нет, потому что я в теге form указал action="post.php" method="post" и вся обработка формы идет в файлк ПХП
     
  12. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Вы поняли о чём я писал выше?


    Все формы должны отправляться аяксом. И это абсолютно никак не влияет на их возможность быть обработанными на сервере с помощью php кода!
     
  13. mediol

    mediol

    Регистрация:
    15 май 2017
    Сообщения:
    0
    Симпатии:
    0
    Я слабо понимаю почему только Аяксом, а не с перезагрузкой, так еще не очень опытный в этих делах. Вы не могли бы посмотреть весь сайт, если скину архив или указать источник, на котором можно внятно прочесть об этом?
     
  14. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Потому что на дворе 2017 год и перезагрузка должна быть исключительно при переходе между страницами (ну или смене языка), а не при отправке форм либо других действиях в пределах страницы.
    Да и при переходах она не обязательна, давно уже можно без неё обойтись.

    Вот неплохая статья с примером сабмита форм аяксом: https://scotch.io/tutorials/submitting-ajax-forms-with-jquery