0

При нажатии на кнопку submit, данные из формы заносятся в базу данных, а вместе с этим открывается файл form.php, который как раз отправляет данные в БД. Я попытался написать скрипит на JQ, закинул туда preventDefault, а внутрь засунул ajax-запрос, но проблема осталась: при нажатии на кнопку перенаправляет на пустую страницу (form.php). Также, по задумке, при успешной отправке формы в БД должен вылезать alert с "Успешно!", но этого не происходит. Я думаю, что проблема в ajax запросе, но мне не хватает знаний. Подскажите, пожалуйста.

Код формы:

<form class="popup__form" method="get" name="form">
              <input
                class="popup__form-text popup__form-input popup__form-fields"
                type="text"
                name="name"
                placeholder="Ваше имя"
              />
              <input
                class="popup__form-tel popup__form-input popup__form-fields"
                type="tel"
                name="tel"
                placeholder="Номер телефона"
              />
              <input
                class="popup__form-email popup__form-input popup__form-fields"
                type="email"
                name="email"
                placeholder="Электронная почта"
              />
              <input
                class="popup__form-submit popup__form-input popup__form-button"
                id="#btn__submitForm"
                type="submit"
                name="popup-submit"
                value="Отправить заявку"
              />
            </form>

Код form.php:

<?php
    if (isset($_GET['popup-submit'])) {
      $nameform = $_GET['name'];
      $telform = $_GET['tel'];
      $emailform = $_GET['email'];
      $mysqli = new mysqli("localhost", "root", "", "dudich");
      if ($mysqli->connect__errno) {
        echo "Извините, возникла проблема на сайте";
        exit;
      }
      $name = '"' . $mysqli->real_escape_string($nameform) . '"';
      $tel = '"' . $mysqli->real_escape_string($telform) . '"';
      $email = '"' . $mysqli->real_escape_string($emailform) . '"';
      $query = "INSERT INTO users (name, tel, email) VALUES ($name, $tel, $email)";
      $result = $mysqli->query($query);
      $mysqli->close();
    }
?>

Код JQ:

$('#btn__submitForm').submit(function(e){
    e.preventDefault();
$.ajax({
    url: 'form.php',         
    method: 'get',             
    dataType: 'html',     
    success: function(data){   
        alert('Успешно!');          
    }
});

})

UPD:

JQ:

$('.popup__form-button').click(function(e){
    e.preventDefault();
$.ajax({
    url: 'form.php',         
    method: 'get',           
    dataType: 'html',     
    success: function(data){   
        alert('Успешно!');           
    }
});

})

button:

<form
              class="popup__form"
              method="get"
              name="form"
              action="form.php"
            >
              <input
                class="popup__form-text popup__form-input popup__form-fields"
                type="text"
                name="name"
                placeholder="Ваше имя"
              />
              <input
                class="popup__form-tel popup__form-input popup__form-fields"
                type="tel"
                name="tel"
                placeholder="Номер телефона"
              />
              <input
                class="popup__form-email popup__form-input popup__form-fields"
                type="email"
                name="email"
                placeholder="Электронная почта"
              />
              <button
                class="popup__form-submit popup__form-input popup__form-button"
                name="popup-submit"
              >
                Отправить заявку
              </button>
            </form>
syrex
  • 117
  • У вас просто не происходит того события, которое вы прописали в jQ. Вы поставили обработчик подтверждения КНОПКИ. Кажется, подтверждать нужно отправку формы.... – rusgeli Dec 02 '22 at 08:45

1 Answers1

1

Должно быть не

$('#btn__submitForm').submit(function(e){

а

$('.popup__form').submit(function(e){

т.к. событие отправки происходит именно формы, а не кнопки. У кнопки происходит лишь клик. Не смотря на то, что у неё стоИт тип submit, это не говорит о том, что на неё происходит событие сабмита, а то, что она ответственна за сабмит формы


P.S. Если идёт работа через ajax, то вообще зачем у кнопки стОит тип submit? Можно сделать обычную кнопку и отправлять данные по клику на неё

  • Сначала я сделал так, как вы посоветовали, но результат тот же. Далее я поменял по вашему совету кнопку и сделал её по-человечески, добавив button и убрав тип submit. В JQ я закинул класс кнопки и вместо submit поменял на click, но результат такой же - открывает пустую страницу php. Я добавил UPD в вопросе внизу, чтобы вы могли увидеть изменения. Подскажите, пожалуйста, что я сделал не так? – syrex Dec 02 '22 at 09:46
  • <button type="button" ... – u_mulder Dec 02 '22 at 09:51
  • @syrex тег <button> по умолчанию тоже имеет тип submit, так что там придётся писать тип button :)) Вот такая вот глупость... кнопка с типом кнопка – Алексей Шиманский Dec 02 '22 at 09:54
  • @АлексейШиманский, поменял на тип button, но теперь не отправляются данные( Тут наверное уже конфликт с php кодом? Потому что у button есть name = "popup-submit", который присутствует в в условии в php коде. Что посоветуете? – syrex Dec 02 '22 at 10:05
  • @syrex "не отправляются данные" - с фронта js или из php? Посмотреть уходят ли данные на бэкенд - можно в консоли разработчика в браузере (который по F12 открывается). и смотреть вкладку Network........ Для просмотра что не так на бэке - влючают показ ошибок и используют отладку (можно смотреть все ответы в данном топике https://ru.stackoverflow.com/q/701142/191482 ), аналогично есть для js https://ru.stackoverflow.com/q/701137/191482 ....тоже можно увидеть попадает ли вообще что-то в код... – Алексей Шиманский Dec 02 '22 at 10:09
  • @АлексейШиманский, сначала хочу сказать что я невнимательный) Зайдя в консоль, сразу понял что JQ код был просто не виден из-за подключения....Я это исправил. Теперь, при нажатии на кнопку страница не обновляется и не перенаправляется, а ещё выскакивает alert, как и планировалось. Во вкладке network я заметил, что при заполнении данных и нажатии на кнопку "отправить", появляется файл form.php со статусом 200, Но заходя в БД данные не вносятся. Почему? ведь статус 200 - это успешно, разве нет? скриншот: https://imgur.com/a/SgUoH4X – syrex Dec 02 '22 at 10:30
  • @syrex 200 означает что php скрипт успешно отработал, но это не значит что не было каких-либо неточностей например в sql запросах. Для этого надо отдебажить и посмотреть что с ними не так....ещё. как я писал, включить отображение ошибок.... и в том же ответе от сервера их можно будет увидеть, даже при ответе 200 если могут быть какие-то warnings или notice.... ну а корректность запросов надо смотреть в отладке как минимум....например вместо VALUES ($name, $tel, $email) надо будет писать VALUES ('$name', '$tel', '$email') .... причина: https://ru.stackoverflow.com/a/1471929/191482 – Алексей Шиманский Dec 02 '22 at 11:13