【问题标题】:Alert boxes when validating form in PHP在 PHP 中验证表单时的警报框
【发布时间】:2013-08-02 02:11:30
【问题描述】:

我正在编写 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 的表单时,我得到了这个;

接下来是:

我该如何解决这个问题?谢谢

编辑

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

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

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

【问题讨论】:

  • 我不懂 php。但我认为这条线是有问题的:if($emailcheck == TRUE) 因为emailcheck 是一个函数。也许应该是:if($emailcheck($_POST['email']))?
  • 看起来您正在混合服务器端表单检查与客户端消息并进行检查。如果是这样,你应该决定一个或另一个 - 而不是两者兼而有之。对于服务器端检查,而不是显示 javascript 框,将一些文本回显到将呈现的 HTML 中并执行“捕获”(您检查的boolean var)以防止进一步的表单处理。
  • @Skippy 我有几句话(可能是题外话?):1- 开始正确缩进您的代码。您很可能会从一开始就阻止问题。 2- 你的正则表达式没有意义,你错过了结束锚$,我想这是一个错字,你写了一个S 吗? 3- 你不需要在字符类[a-zA-Z.] 中转义点就可以了。如果连字符不在类的开头或结尾,则应将其转义,因此[a-z-] 将匹配字母和连字符。 4- 这个[a-zA-A-Z0-9_\.] 到底是什么?我想你的意思是[a-zA-Z0-9_\.]
  • @Skippy 5- 除了以上几点,您的正则表达式会因许多电子邮件而失败,只需将filter_var()FILTER_VALIDATE_EMAIL 一起使用。 6- 尽可能严格,至少在这种情况下:if ($emailcheck === TRUE) 注意 3 个等号。 7- echo '&lt;script ....'; return FALSE; 这是什么?仅供参考,如果未在函数中使用它,它将退出您的脚本

标签: javascript php html regex alert


【解决方案1】:

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

您已经找到了您的问题,并且可以在恢复的文件中修复它。

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

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

PS2:我们还看到 PHP 代码} else {)显示在浏览器中。您的代码示例未显示 &lt;? PHP 开始 - 您在 &lt;? ?&gt; PHP 语法中遇到了某种错误。

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

【讨论】:

  • 不,我绝对不是在开玩笑,并且拥有 20 年的经验——当我无法通过其他方式找到错误时,我会使用 A/B 二进制搜索。通过划分问题,二分搜索是有效的,可以找到原因所在的部分。现在,如果您不想被帮助,请不要尝试。不礼貌。
  • 如果您愿意在我真正提供帮助的情况下撤回您的 -1,我很乐意将其视为短暂的失误,并且不会对您的问题投反对票。
  • 你有一个&lt;? PHP 引用错误——因为我们看到} else {,它应该只是 PHP 代码,在浏览器中可见。
  • 我在使用 PHP 时也遇到了这些困难。它是一种有点泥泞和不透明的语言。我主要在 Java 中使用 Spring/Hibernate/Tomcat,它们更干净、安全,并且错误几乎完全由编译器为您捕获。
【解决方案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>";
}

link to php fiddle

【讨论】:

  • 你可以试试类似的东西:&lt;?php function emailcheck ($email1) { $regexp="/^[a-zA-A-Z0-9_\.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+S/"; if (preg_match($regexp,$email1)) { return TRUE; } else { return FALSE; } } $emailcheck = FALSE; if ($emailcheck == TRUE){ ?&gt; &lt;script type="text/javascript"&gt; alert("Your form has been submitted.") &lt;/script&gt; &lt;?php } else { ?&gt; &lt;script type="text/javascript"&gt; alert("Enter a valid email address.") &lt;/script&gt; &lt;?php } ?&gt; link
  • nvm 无论如何它都在小提琴中。 :-)
【解决方案3】:

我认为您需要更改 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() 调用最后都缺少分号。我已经在我的最后尝试了这段代码,它似乎工作。我修改了我的答案以反映这些变化。希望对您有所帮助!

【讨论】:

  • @Skippy 我发现了其他一些阻碍这项工作的因素。我已经为您更新了答案,希望对您有所帮助。
猜你喜欢
  • 2012-11-16
  • 1970-01-01
  • 1970-01-01
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多