所以我正在为网站进行表单验证。
到目前为止,我所做的是提交表单时,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的任何迹象。
此时,我已经尝试了许多替代解决方案,我甚至不知道从哪里开始。我真的可以使用一些帮助和改进形式的提示。
这是我正在处理的联系页面。请随意尝试并亲自查看结果,但请不要发送垃圾邮件!
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;粘贴,只是让我朝着正确的方向发展。
答案 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变量。