您可以在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
我已经确认这是调试后验证插件中的错误。 (虽然我在错误发生的地方迷路了,但我知道这与我的回答无关。)
答案 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响应来填充该消息,这将是一个标准的对象。由于您没有将相关用户名作为回复的一部分返回,因此输出对象本身毫无用处,因为它只包含true
或false
。必须以某种方式引用输入字段的内容并输出,因为它包含错误的用户名。