-1

我正在编写 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;
 }
 }

当我测试 emailcheck 功能的表单为 FALSE 时,我得到了这个;

警报

其次是:

警报2

我怎样才能解决这个问题?谢谢

编辑

我不关心整个 php/javascript 验证;我正在查看一个特定的细节 - 我在这里的功能做错了什么?为什么它打印出警报..一定有一些我忽略的基本内容。

显然,我使用 isset 函数的方式以及在 emailcheck 函数中调用的方式存在问题。

我有客户端验证,但我专注于这个问题中的 php 验证 - 所以请不要讨论 javascript 验证。

4

3 回答 3

3

$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>";
}

链接到 php 小提琴

于 2013-08-02T02:28:16.453 回答
3

你有某种语法/引用错误。备份您的文件,然后通过删除或大幅简化代码部分进行二进制搜索 A/B,直到症状得到修复。

然后您发现了您的问题,并且可以在恢复的文件中修复它。

后记:错误可能出现在 PHP 引用或<?语法中——我们看到 Javascript 要么被发出,要么被浏览器解析为 HTML。

尝试查看源代码并检查浏览器看到的内容?

PS2:我们还看到浏览器中显示了PHP 代码(the )。} else {您的代码示例没有显示<?PHP 开始 - 您在<? ?>PHP 语法中遇到了某种错误。

顺便说一句,我是唯一真正发现这些明显症状并帮助你的人。

于 2013-08-02T02:28:26.967 回答
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 的值,该变量实际上并未设置为任何值。

编辑

我还刚刚注意到在你的正则表达式字符串中你有一个大写的“S”而不是一个 $,假设你想表示字符串的结尾。此外,您的两个 alert() 调用最后都缺少分号。我已经在我的最后尝试了这段代码,它似乎工作。我修改了我的答案以反映这些变化。希望有帮助!

于 2013-08-02T02:30:52.580 回答