0

我一直在环顾四周,但仍然无法弄清楚为什么我的用户名验证不起作用。我只是检查用户名是否存在以及是否显示错误消息。这是我的用户名字段的规则。

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);

}

任何反馈都会让我发疯。PS我是新来这里发帖抱歉格式。

固定和工作。所有错误似乎都来自 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;
4

1 回答 1

0

注意您的原始代码:

if($usercheck < 1) {   // <-- if no database match
    $valid = "false";  // <-- false => "failed" validation
} else {
    $valid = "true";
}

false当数据库中没有匹配项时,您将返回。这简直是​​倒退。如果没有匹配,则必须 return true,这表示字段“通过”验证。

现在请注意您的“固定”版本中的逻辑是如何颠倒的:

if($usercheck == 0) {   // <-- if no database match
    $valid = 'true';    // <-- true => "passed" validation
} else {
    $valid = 'false'; 
}

根据 jQuery Validate“远程方法”文档

响应被评估为 JSON并且必须true针对有效元素,并且可以是任意false的,undefined或者null针对无效元素,使用默认消息;或字符串,例如。“该名称已被占用,请尝试 peter123”以显示为错误消息。

于 2013-09-24T16:24:00.073 回答