PDO用户名验证(如果已存在)

时间:2017-10-19 05:11:31

标签: php pdo registration

我的注册表单有问题。我的表单工作正常,但每当我尝试插入已存在的用户名时,它都不会显示任何错误。

这是我的php注册文件:

{{1}}

感谢您的支持

4 个答案:

答案 0 :(得分:0)

您没有执行select语句。你需要绑定params并执行select语句,在select statemnt之后尝试这个。

VALUES('Best Day'[Date])

答案 1 :(得分:0)

 public function usernameCheck($username)
{

    $sql = "SELECT * FROM $this->table where username = :username";
    $query = $this->pdo->prepare($sql);
    $query->bindValue(':username', $username);
    $query->execute();
    if ($query->rowCount() > 0) {
        return true;

    } else {
        return false;
    }

}

在你的项目中使用这个希望它可以工作......:)

答案 2 :(得分:0)

if语句

中的

missing}

if (isset($_POST['submit'])) {
        $user_name = $_POST['user_name'];
        $user_email = $_POST['user_email'];
        $user_pass = $_POST['user_pass'];
        $hash = password_hash($user_pass, PASSWORD_DEFAULT);

        $stmt = $con->prepare("SELECT user_name FROM users WHERE user_name = :user_name");

        if($stmt->rowCount() > 0){
        echo "exists!";
        }
}else{

}

答案 3 :(得分:0)

我注意到4件事(其他人已经提到了2件):

第一个也是最小的是你有拼写错误($ con而不是$ conn) - 不要担心它发生在我们最好的人身上 - 在你的第一个$ stmt查询中,这意味着你的select-results变为NULL而不是0 - 所以你rowCount发现它没有超过0并继续前进而没有你的错误信息

其次,您忘记绑定并执行第一个$ stmt查询中的参数,这会为您的rowCount结果提供相同的结果

即使在使用预准备语句时,第三个总是清理变量 - 至少使用

$conn->mysql_real_escape_string($variable);

你可以有利地使用

htmlspecialchars($variable);

第四,因为你没有对数据库做任何事情(除了看),你可以简单地写一下简化你的代码:

$stmt = $conn->query("SELECT user_name FROM users WHERE user_name = '$user_name' LIMIT 1")->fetch();

正如我所说 - 无需在第一个查询中绑定或执行

并且作为一般规则 - 不要使用rowCount - 永远 - 如果你必须知道结果的数量(并且在99%的情况下你不知道)使用count();但如果你在这里只是想知道是否找到任何东西而是使用:

if ( $stmt ) {
    echo "exists!";
} else {
    // insert new user as you did
}

修改

另外 - 作为附注 - 在最初创建连接时,您应该考虑以下几点......

例如:

// Set variables
$servername = "localhost";
$username = "***";
$password = "***";
$database = "***";
$charset = 'utf8'; // It is always a good idea to also set the character-set

// Always create the connection before you create the new PDO
$dsn = "mysql:host=$servername;dbname=$database;charset=$charset"; 

// Set default handlings as you create the new PDO instead of after
$opt = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // And add default fetch_mode
    PDO::ATTR_EMULATE_PREPARES   => false, // And ALWAYS set emulate_prepares to false
];

// And now you are ready to create your new PDO
$conn = new PDO($dsn, $username, $password, $opt);

只是一个建议......快乐的小径