PHP / JavaScript表单验证,无效的电子邮件检查

时间:2015-05-27 19:23:15

标签: javascript php forms validation

所以我正在为网站进行表单验证。

到目前为止,我所做的是提交表单时,validate.php会检查电子邮件的格式是否正确。

如果是,则继续调用sendMail()中包含的validate.php函数,该函数继续发送电子邮件,然后在5秒后将用户重定向回主页。 (此部分有效< - )

如果不是,那就是我被困的地方。 我在这个阶段试图完成的是,以某种方式让PHP将脚本标记<script> emailError(); </script>发送到当前页面(contact.html)并执行脚本,该脚本只是附加一个段落说电子邮件不正确。我 获取的内容,但是validate.php在else语句中有自己的错误,只是在空白页面中说Error(这是我不想要的,我把它放在那里,看看验证是否正常工作)。

我尝试在validate.php中的else语句中添加这个(上面提到的脚本):

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的任何迹象。

此时,我已经尝试了许多替代解决方案,我甚至不知道从哪里开始。我真的可以使用一些帮助和改进形式的提示。

这是我正在处理的联系页面。请随意尝试并亲自查看结果,但请不要发送垃圾邮件!

Click Here

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&#39;粘贴,只是让我朝着正确的方向发展。

2 个答案:

答案 0 :(得分:2)

嗯,首先,您要将表单提交到validate.php,然后再也不会重定向回contact.html,这就是您没有看到附加脚本标记的原因。从我看到的,那个字符串'Error'似乎不在你的代码中,所以我猜你没有粘贴整个代码。我的建议是,如果条件失败,请重新定向到联系表单,并将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>";
}

这只是一个粗略的例子,它可以更强大,使用此解决方案,如果有人输入您的联系表单与查询参数“错误”他将获得执行的JavaScript。但正如我所说,这是一个概念和粗略的解决方案,可以解释如何解决问题。

答案 1 :(得分:0)

你不能像你想要的那样执行java函数。

如果使用ajax,而不是成功响应功能,请将respone设置为div。

例如,如果你有一个成功函数来获取一个名为data的参数中的数据,那么设置一个空的div就像一个ID&#34; emailResponse&#34;在您的页面中,并在函数中使用它:

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变量。