Web

Почему событие Onclick работает, даже если форма пуста? И после нажатия на кнопку submit появляется оповещение, которое показывает, что поле ввода является обязательным

Вот мой код. Когда я заполняю форму только одним вводом, данные отправляются и после этого показывается предупреждение. Но если я ничего не заполняю в форме и просто нажимаю на кнопку submit, предупреждение показывается, даже если форма пуста. И после отображения предупреждения выводится сообщение о необходимости заполнения поля ввода. Так что же пошло не так? Я пытался найти решение и перепробовал множество вещей, но ничего не работает...

<div class="newsletter">

    <p>Sign Up for the <strong>NEWSLETTER</strong></p>

        <form method="post">

              <?php

                    if(isset($_POST['subscribe'])) {

                       $e_mail = $_POST['e_mail'];

                       $conn = new mysqli('localhost','root','','purrfect_whiskers');

                       if($conn->connect_error) {

                           echo "$conn->connect_error";

                           die("Connection Failed : ". $conn->connect_error);

                       } else {

                          $stmt = $conn->prepare("insert into newsletter(e_mail) values(?)");

                          $stmt->bind_param("s", $e_mail);

                          $stmt->execute();

                          $stmt->close();

                          $conn->close();

                        }

                    }

                ?>

            <input class="input" type="email" name="e_mail" text-transform="lowercase" placeholder="Enter Your Email" autocomplete="off" required="required">

            <button class="subscribe" onclick="submit_email()" type="submit" name="subscribe"><i class="fa fa-envelope"></i> Subscribe</button>

            <script type="text/javascript">function submit_email(){alert("You've been subscribed to our newsletter!");}</script>

        </form>

</div>

 

Ответ 1

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

Есть несколько способов предотвратить автоматическую отправку формы, один из них - поместить onsubmit обработчик в form тег и вернуть его true(чтобы разрешить отправку или false, чтобы предотвратить ее. Вы можете выполнить все свои проверки в этом обработчике:

<form method="POST" onsubmit="return submit_email()">

Затем в своей функции убедитесь, что значение в поле существует, прежде чем разрешить продолжение операции:

<script type="text/javascript">

  function submit_email(){

    let email_input = document.querySelector("input[name='e_mail']");

    if (email_input.value=="") {

      alert("Пожалуйста, сначала введите свой e-mail ");

      return false; // это предотвращает отправку формы

    }

    return true; // здесь возможна отправка формы

  }

</script>

 

Форма будет отправлена, страница обновится, и ваш PHP-код сделает все верно. В конце просто закодируйте свое предупреждение, например так:

<?php

if(isset($_POST['subscribe'])){

 // выполните весь свой код как есть, а затем закончите его:

?>

 

<script>

    alert("Вы подписаны на нашу рассылку!");

</script>

 

<?php                    

}

?>

 

Ответ 2

Код предупреждения выполняется несмотря ни на что. Поэтому вы должны отображать его только в том случае, если в вашей форме ничего не введено. Для этого я добавил идентификатор в ваш ввод и проверил, пуста ли ваша форма или нет. Лучше всего проверить с помощью регулярного выражения, действительно ли это адрес электронной почты. Вот код, который проверяет это:

<div class="newsletter">

    <p>Sign Up for the <strong>NEWSLETTER</strong></p>

    <form method="post">

        <?php

            if(isset($_POST['subscribe'])) {

                 $e_mail = $_POST['e_mail'];

                 $conn = new mysqli('localhost','root','','purrfect_whiskers');

                 if($conn->connect_error) {

                   echo "$conn->connect_error";

                   die("Connection Failed : ". $conn->connect_error);

        } else {

              $stmt = $conn->prepare("insert into newsletter(e_mail) values(?)");

              $stmt->bind_param("s", $e_mail);

              $stmt->execute();

              $stmt->close();

              $conn->close();

          }

        }

?>

        <input id="id_input" class="input" type="email" name="e_mail" text-transform="lowercase"

               placeholder="Введите свой Email"

               autocomplete="off" required="required">

        <button class="subscribe" onclick="submit_email()" type="submit" name="subscribe"><i class="fa fa-envelope"></i>

            Подписка

        </button>

        <script type="text/javascript">function submit_email() {

            if (document.getElementById("id_input").value !== "") {

                alert("Вы подписаны на нашу рассылку!");

            }

        }</script>

    </form>

</div>

Схожие статьи

Web

Где PHP хранит журнал ошибок?

Mobile First индекс Google: все о последнем тренде SEO-оптимизации
Web

Mobile First индекс Google: все о последнем тренде SEO-оптимизации

Плагины Chrome - недооцененная ниша бизнеса
Web

Плагины Chrome - недооцененная ниша бизнеса

Плюсы и минусы разработки веб-приложений на Node.js
Web

Плюсы и минусы разработки веб-приложений на Node.js

×