Проверка формы PHP / JavaScript, проверка неверной электронной почты

1

Поэтому я работаю над проверкой формы для веб-сайта.

То, что я сделал до сих пор, - это когда форма отправлена, validate.php проверяет, находится ли электронное письмо в правильном формате.

Если это так, он вызывает вызов функции sendMail() включенной в sendMail() validate.php который продолжает отправлять электронную почту, а затем перенаправляет пользователя на домашнюю страницу через 5 секунд. (Эта часть работает <-)

Если это не так, то где я застрял. То, что я пытаюсь выполнить на этом этапе, - это как-то заставить PHP отправлять тег скрипта, <script> emailError(); </script> <script> emailError(); </script>, на текущую страницу (contact.html) и выполнить скрипт, который просто добавляет абзац, в котором говорится, что письмо является неправильным. То, что я получаю, однако, у validate.php есть своя ошибка в инструкции else, просто говоря " Error на пустой странице" (чего я не хочу, я поставил ее там, чтобы проверить, правильно ли работает валидация).

Я попытался добавить это (сценарий, упомянутый выше) в инструкции else в validate.php:

validate.php

<?php
include "mail.php";
$email = $_POST['email'];

if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
  sendMail();
}else {
  echo("<script> emailError(); </script>");
}
?>

Так что я надеялся, что это будет сделано, это отразится на странице, выполняющей функцию JavaScript, но это не сработало, и я думаю, что знаю почему.

PHP, насколько мне известно, выполняется по запросу взаимодействия с пользователем (нажмите кнопку, нажмите что-нибудь и т.д.) Или при загрузке страницы (исправьте меня, если я ошибаюсь, все еще учась).

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

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

Это страница контактов, над которой я работаю. Не стесняйтесь попробовать и посмотреть результаты для себя, но не спам!

Кликните сюда

emailError.js

Это то, что я хотел откликнуться на страницу с помощью PHP.

function emailError(){
    var targetElement = document.getElementById("emailform");
    var errorElement = document.createElement("P");
    var errorMessage = document.createTextNode("Invalid Email");
    errorElement.appendChild(errorMessage);
    errorElement.setAttribute("id","error");
    document.body.appendChild(errorElement);
}

contact.html

Это всего лишь сегмент contact.html показывающий мою форму.

<form action="validate.php" method="post" id="emailform">
    <required>* - Required</required><br>
    <name>Name:* <input type="text" name="name" id="name" required /></name><br>
    <email>Email:* <input type="text" name="email" id="email" required /></email>    <br>
    <message>Message:*<br><textarea rows="5" name="message" id="message" maxlength="1000" required></textarea></message><br>
    <submit><input type="submit" value="Send" name="send" id="send" /></submit>
</form>

Я не прошу, чтобы что-то скопировало n 'paste, просто что-то, чтобы подтолкнуть меня в правильном направлении.

  • 0
    почему вы не проверяете почту в javascript?
  • 0
    потому что вы можете легко обойти это с отключением javaScript
Показать ещё 1 комментарий
Теги:
validation
forms

2 ответа

2
Лучший ответ

Ну, во-первых, вы отправляете свою форму на validate.php, а затем никогда не перенаправляете обратно на contact.html, поэтому вы не видите добавленный тег сценария. И, как я вижу, эта строка "Ошибка" не отображается в вашем коде, поэтому я предполагаю, что вы не вставляли весь код. Мое предложение состоит в том, чтобы снова перенаправить на контактную форму, если условие не выполнено, и измените contact.html на contact.php, чтобы иметь возможность выполнить проверку. Вот приблизительный код:

<?php
include "mail.php";
$email = $_POST['email'];

if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
  sendMail();
}else {
  header('Location: contact.php?error=1');
}
?>

и затем в файле contact.php:

<form action="validate.php" method="post" id="emailform">
    <required>* - Required</required><br>
    <name>Name:* <input type="text" name="name" id="name" required /></name><br>
    <email>Email:* <input type="text" name="email" id="email" required /></email>    <br>
    <message>Message:*<br><textarea rows="5" name="message" id="message" maxlength="1000" required></textarea></message><br>
    <submit><input type="submit" value="Send" name="send" id="send" /></submit>
</form>

if ($_GET['error']) {
    echo "<script> emailError(); </script>";
}

Это всего лишь примерный пример, он может быть более надежным, с этим решением, если кто-то войдет в вашу контактную форму с запросом param "error", он получит javascript. Но, как я уже сказал, это концепция и грубое решение, объясняющее, как вы могли бы решить свою проблему.

  • 0
    Это похоже на лучшее решение, я постараюсь реализовать это прямо сейчас.
  • 0
    Определенно огромный шаг вперед! Благодаря тонну! Есть несколько небольших проблем, которые мне придется выяснить, но в целом все работает так, как я хотел.
Показать ещё 4 комментария
0

Вы не можете выполнить java-функцию, как вы пытаетесь.

Если вы используете ajax, чем в функции ответа на успех, установите ответ на div.

Например, если у вас есть функция успеха, которая получает данные в аргументе, называемом данными, чем установить пустой пул с идентификатором типа "emailResponse" на вашей странице и использовать его в функции:

var responseDiv = document.getElementById("emailResponse");
responseDiv.innerHtml = data;

Добавьте это в свой html:

<form action="validate.php" method="post" id="emailform">
    <required>* - Required</required><br>
    <name>Name:* <input type="text" name="name" id="name" required /></name><br>
    <email>Email:* <input type="text" name="email" id="email" required /></email>    <br>
    <message>Message:*<br><textarea rows="5" name="message" id="message" maxlength="1000" required></textarea></message><br>
    <submit><input type="submit" value="Send" name="send" id="send" /></submit>
    <div id="emailResponse"></div>
</form>

И в вашем PHP, измените это:

if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
  sendMail();
  echo "Your message was sent!";
}else {
  echo "You email was invalid!";
}

ОБНОВЛЕНИЕ: Если вы не используете ajax - вам нужно перенаправить на страницу контакта с некоторым параметром в GET или установить некоторую переменную SESSION.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню