JQuery验证错误或用户错误?

问题描述:

Link to the site in questionJQuery验证错误或用户错误?

你可以看看源了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用户名= 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; 
?> 

功能的工作,因为它应该,我尝试使用用户名root或任何有效的Linux应用r并且它检测到它的无效...

如果在“...”中输入“root”,则表示该问题无效......并且您仍选中下一个窗体,然后显示[object Object]已经在使用

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

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

更新:8/20

我已确认这是一个错误在调试后的验证插件中。操作(虽然我迷路发生错误,我知道它有没有关系我的反应。)

我想我找到的bug;

确认有: message = message.call(this,rule.parameters,element);

这应该是:

消息= message.call(此,message.parameters,元件);

该修补程序之后,似乎一切都OK。我是新来的JQuery和调试JavaScript,所以它可能需要进行更彻底的测试,但我认为这是问题。

我已经通过电子邮件发送此修复程序(我注意到他的追踪和jQuery开发论坛上与他的错误多个问题)

我没有得到任何错误,当我输入“根”或在用户名字段其他任何用户名(在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。必须以某种方式引用输入字段的内容并输出,因为它包含错误的用户名。

+0

我3.6.6检查了插件的开发,它有错误。你必须输入“根”......让它说它被采取......点击它......回到表格中,然后从表格中移开。 – ParoX 2010-08-18 05:06:55