检查用户名是否已存在

时间:2017-01-27 23:29:02

标签: php mysql

我想检查用户是否已经存在。 我做了以下代码,但它无法正常工作。 echo中的checkUser仅用于查看是否跳转到if子句。

$email = $_POST['email'];
$username = $_POST['username'];
$password = $_POST['password']; 
$checkUserID = mysql_query("SELECT * 
                            FROM users 
                            WHERE username = '$username'");

if (mysql_num_rows($checkUserID) >= 1) {
    //echo "User id exists already.";
    echo "testststst";
    $user1 = mysql_fetch_array($checkUserId);
    $result = flashMessage("User is already taken, please try another one");
    //print_r($user); // the data returned from the query
}else if(empty($form_errors)){
...formcheck...
}

我希望有人可以帮助我,我不知道该怎么做。

3 个答案:

答案 0 :(得分:1)

我建议你使用PDO库。对于您的问题,最佳解决方案是将表中的用户名设为PRIMATY KEYUNIQUE CONSTRAINT。这样,如果您尝试插入两次相同的用户名,查询将抛出异常(或根据您的设置返回false),这样做更容易。

答案 1 :(得分:0)

我可以看到您的代码存在以下问题 -

  1. 您尚未建立任何数据库连接。

  2. 您应该检查$ _POST变量是否可用。这是尝试使用if(isset)函数来检查它。

  3. 尝试使用预准备语句,因为它们更安全。

答案 2 :(得分:0)

首先,你的代码很容易被sql注入。用函数包装表单数据。

<?php

//function to prevent sql injections
function validateFormData($formData) {
    $formData = trim( stripslashes( htmlspecialchars( strip_tags( str_replace( array( '(', ')' ), '', $formData ) ), ENT_QUOTES ) ) );
    return $formData;
}
$email = validateFormData($_POST['email']);
$username = validateFormData($_POST['username']);
$password = validateFormData($_POST['password']); 
$checkUserID = mysql_query("SELECT * 
                            FROM users 
                            WHERE username = '$username'");

if (mysql_num_rows($checkUserID) >= 1) {
    //echo "User id exists already.";
    echo "testststst";

    while ($row = mysqli_fetch_assoc($checkUserID)){
        //set some variables to save some data
        $usernameD = $row['username'];


    }

            //compare form username with db username{

    if($usernameD === $username){
        echo "Username already taken";
    }else{

        //continue the rest...

    }


}

?>