我正在编写PHP来验证表单数据。 我在拍摄警报箱时遇到了麻烦。
这是我的代码的骨头:
function emailcheck ($email1)
{
$regexp="/^[a-zA-Z0-9_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9.-]+$/";
if (preg_match($regexp,$email1))
{
return TRUE;
}
else
{
return FALSE;
}
}
if (isset($_POST['submit'])) {
if ($emailcheck == TRUE){
//send email
//various fields etc
echo '<script type="text/javascript"> alert("Your form has been submitted.") </script>';
}
else
{
echo '<script type="text/javascript"> alert("Enter a valid email address.") </script>';
return FALSE;
}
}
当我测试电子邮件检查功能的表单为FALSE时,我得到了这个;
接着是:
我该如何解决这个问题?感谢
修改
我不关心整个php / javascript验证;我正在看一个具体的细节 - 我的功能在这里做错了什么?为什么要打印出警报......必须有一些我忽略的基本内容。
显然,我使用isset函数的方式以及我在emailcheck函数中调用的方式存在问题。
我有客户端验证,但我专注于此问题中的php验证 - 所以请不要讨论javascript验证。
答案 0 :(得分:3)
你有一些语法/引用错误。备份您的文件,然后通过删除或大幅简化代码部分来二进制搜索A / B,直到症状得到修复。
然后你找到了你的问题,&amp;可以在恢复的文件中修复它。
后记:错误可能在PHP引用或<?
语法中 - 我们看到Javascript要么被HTML发出,要么被浏览器解析。
尝试查看来源&amp;检查浏览器看到了什么?
PS2:我们也在浏览器中看到 PHP代码(} else {
)。您的代码示例未显示<?
PHP开头 - 您在<? ?>
PHP语法中遇到了某种错误。
顺便说一下,我是唯一一个真正了解这些明显症状的人。帮助你。
答案 1 :(得分:2)
$ emailcheck是一个变量,而不是一个函数。它应该是
$emailcheck = emailcheck($email);
if($emailcheck === TRUE): /* more code */ endif;
IMO我会使用PHP安装的功能。
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "<script>alert('GOOD email');</script>";
} else {
echo "<script>alert('BAD email');</script>";
}
答案 2 :(得分:2)
我认为您需要在if语句中更改测试。
function emailcheck ($email1) {
$regexp="/^[a-zA-A-Z0-9_\.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/";
if (preg_match($regexp,$email1)) {
return TRUE;
} else {
return FALSE;
}
}
if (isset($_POST['submit'])) {
$emailAddy = "someone@somewhere.com"; //get email address from form here
if (emailCheck($emailAddy)){
//send email
//various fields etc
echo '<script type="text/javascript"> alert("Your form has been submitted.");</script>';
} else {
echo '<script type="text/javascript"> alert("Enter a valid email address."); </script>';
}
}
您当前的语句未检查函数的返回值,它正在测试变量$ emailCheck的值,该值实际上并未设置为任何值。
修改强>
我还注意到你的regexp字符串中你有一个大写'S'而不是$,假设你想表示字符串的结尾。此外,您的两个alert()调用最后都缺少分号。我已经尝试了这个代码,它似乎工作。我修改了我的答案以反映这些变化。希望有所帮助!