JQuery验证错误或用户错误?

时间:2010-08-18 01:17:08

标签: php javascript jquery validation forms

Link to the site in question

您可以在JQuery或主要部分查看javascript的源代码:

// validate signup form on keyup and submit
var validator = $("#Register").validate({
    rules: {
        UserID: {
            required: true,
            minlength: 2,
            remote: {
                url: "form_check_user.php",
                type: "post",
            }
        },
        ....

所以它POST到form_check_user.php UserID = ValueFromForm

这是form_check_user.php代码:

<?
    if ($_POST['UserID']) {
            $User = strtolower($_POST['UserID']);
            $htpasswd_array = file("/etc/passwd");
            $pattern = "/^$User:/";

          foreach ($htpasswd_array as $key => $value) {
              if (preg_match($pattern, $value)) {
                  echo "false";
                  exit;
              }
          }
          echo "true";
          exit;
    }
    echo "false";
    exit;
?>

该功能正常工作,我尝试使用UserID作为root用户或任何有效的linux用户,并检测到它无效......

如果你输入“root”就会出现问题......它说它无效......你仍然可以选择下一个表格然后显示 [object Object]已经在使用 < / p>

编辑:应该包括这个,因为消息似乎是问题的一部分:

    messages: {
        UserID: {
            required: "Enter a username",
            minlength: jQuery.format("Enter at least {0} characters"),
            remote: jQuery.format("{0} is already in use")
        },

更新:8/20

我已经确认这是调试后验证插件中的错误。 (虽然我在错误发生的地方迷路了,但我知道这与我的回答无关。)

2 个答案:

答案 0 :(得分:1)

我想我发现了这个错误;

验证有: message = message.call(this,rule.parameters,element);

这应该是:

message = message.call(this,message.parameters,element);

在修复之后,一切似乎都没问题。我是JQuery的新手并调试javascript,因此可能需要进行更彻底的测试,但我认为这就是问题所在。

我已经通过电子邮件向插件的开发人员发送了此修复程序(我在他的跟踪器和JQuery论坛上发现了他的bug存在多个问题)

答案 1 :(得分:0)

当我在用户名字段中输入“root”或任何其他用户名时(在FF 3.6.8上),我没有收到任何错误。我确实收到The 'charCode' property of a keyup event should not be used. The value is meaningless的警告,虽然公平地说,但是当我输入这个答案时,我得到同样的警告。

您可以稍微简化代码并消除foreach()。由于file()已将文件内容读入数组,因此您只需使用preg_grep()即可。如果任何数组行匹配模式,它们将被返回,所以......

$htpasswd_array = file('/etc/passwd');

$matches = preg_grep("/^{$User}:/", $htpasswd_array);

if (count($matches) == 0) {
   echo "false"; // no matches
} else if (count($matches) == 1) {
   echo "true"; // username in use
} else {
   echo "file_not_found"; // in true TDWTF fashion, in case there's multiple accounts
}

评论后续跟进:

好的,我现在也收到了错误。是的,你的编辑是有道理的。我猜jquery和/或验证器插件使用解码的JSON响应来填充该消息,这将是一个标准的对象。由于您没有将相关用户名作为回复的一部分返回,因此输出对象本身毫无用处,因为它只包含truefalse。必须以某种方式引用输入字段的内容并输出,因为它包含错误的用户名。