Поэтому я работаю над проверкой формы для веб-сайта.
То, что я сделал до сих пор, - это когда форма отправлена, 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, просто что-то, чтобы подтолкнуть меня в правильном направлении.
Ну, во-первых, вы отправляете свою форму на 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. Но, как я уже сказал, это концепция и грубое решение, объясняющее, как вы могли бы решить свою проблему.
Вы не можете выполнить 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.