我正在尝试验证用户是否已存在。用户名的错误输出始终是“此用户名已被占用。”。
jQuery验证:
除了uniqueUsername(必需,minlength,maxlength,lettersonly正常工作)之外,所有验证错误都有效。
jQuery.validator.addMethod("lettersonly", function(value, element) {
return this.optional(element) || /^[a-z]+$/i.test(value);
}, "Please enter only letters");
$.validator.addMethod("uniqueUsername", function(value, element) {
$.ajax({
type : "POST",
url : "<?php echo base_url();?>user/check_user",
data : "username=" + value,
dataType : "html",
success : function(msg) {
if (msg == 'true') {
return true;
} else {
return false;
}
}
})
}, "This username is already taken.");
$("#form").validate({
rules : {
username : {
required : true,
minlength : 3,
maxlength : 25,
lettersonly : true,
uniqueUsername : true
},
},
messages : {
username : {
required : "Username is required.",
},
},
errorElement : "span",
errorPlacement : function(error, element) {
error.appendTo(element.parent());
}
});
控制器/ user.php的:
函数check_user()将数组中的用户名发送给模型用户。我已经测试了这个功能,它应该可以正常工作。
public function check_user() {
$this -> load -> model('users');
$user = array('username' => $this -> input -> post('username'));
if ($this -> users -> is_user_username($user)) {
echo "true";
} else {
echo "false";
}
}
模型/ users.php
此函数获取数组并检查我的数据库中是否已存在此用户名,如果存在 - >是的,否则 - &gt;假的。
public function is_user_username($user) {
$this -> db -> where('username', $user['username']);
$query = $this -> db -> get('users');
if ($query -> num_rows() == 1) {
return true;
} else {
return false;
}
}
答案 0 :(得分:1)
引用OP :
“models/users.php
- 此函数接收数组并检查我的数据库中用户名是否已存在,如果是 - > gt; true ,否则 - &gt; false。“
那么你的uniqueUsername
方法的逻辑是倒退的:
success : function(msg) {
if (msg == 'true') { // <-- if username exists
return true; // <-- this means 'passed- no error'
} else {
return false; // <-- since you did not get a match, it shows error
}
}
自定义验证方法中的return false
是触发错误消息的原因。
换句话说,return false
==&gt; “验证失败,显示错误消息”
根据您自己对PHP函数的描述,您的PHP逻辑将false
返回到success
msg
,这会使您的条件逻辑失败,因此会给出{{1} 1}},这就是触发错误信息的原因。
试试这个......
return false
答案 1 :(得分:0)
为什么不使用远程方法?有几个例子here
这样你不必编写自己的方法,你可以像这样指定规则。您的check_user页面将传递用户名字段的内容,并且只返回单词true或false
rules : {
username : {
required : true,
minlength : 3,
maxlength : 25,
lettersonly : true,
remote: "<?php echo base_url();?>user/check_user"
},
},