我一直在环顾四周,我仍然无法弄清楚为什么我的用户名验证无效。我只是检查用户名是否存在以及是否显示错误消息。以下是我的用户名字段的规则。
username:
{
required: true,
remote: "user-check.php"
},
这是消息部分。
username:
{
required: 'Please enter a username',
remote: 'Username is taken'
},
我的user-check.php文件看起来像这样。
if(isset($_GET['username']) {
$user = $_GET['username'];
$query = $pdo->prepare('SELECT * FROM clients WHERE client_username = ?');
$query->bindValue(1, $user);
$query->execute();
$usercheck = $query->rowCount();
if($usercheck < 1) {
$valid = "false"; // <---yes, Validate is expecting a string
} else {
$valid = "true"; // <---yes, Validate is expecting a string
}
echo json_encode($valid);
}
任何反馈都会让我疯狂。附:我是新来发布的,抱歉格式化。
固定和工作。 所有错误似乎来自user-check.php 这是固定版本。
header('Content-type: application/json');
$user = $_REQUEST['username'];
$query = $pdo->prepare('SELECT * FROM clients WHERE client_username = ?');
$query->bindValue(1, $user);
$query->execute();
$usercheck = $query->rowCount();
if($usercheck == 0) {
$valid = 'true';
} else {
$valid = 'false';
}
echo $valid;
答案 0 :(得分:0)
请注意原始代码:
if($usercheck < 1) { // <-- if no database match
$valid = "false"; // <-- false => "failed" validation
} else {
$valid = "true";
}
当数据库中没有匹配项时,您将返回false
。这只是倒退。如果没有匹配项,则必须返回true
,表示字段“已通过”验证。
现在请注意“固定”版本中逻辑的反转方式:
if($usercheck == 0) { // <-- if no database match
$valid = 'true'; // <-- true => "passed" validation
} else {
$valid = 'false';
}
As per jQuery Validate "remote method" documentation:
响应评估为JSON ,对于有效元素必须为
true
,并且可以是任何false
,undefined
或null
表示无效元素,使用默认消息;或者一个字符串,例如。 “该名称已被采用,请尝试使用peter123”以显示为错误消息。