使用PHP检查用户名是否已存在

时间:2015-01-06 17:11:50

标签: php mysql username

我想检查我的数据库中是否已存在用户名。如果是,我想重定向回我的注册页面。我的代码用于添加用户名,但不检查用户名是否存在。请帮忙!!!这是register.php页面的代码。 代码完全跳过检查用户名'并插入数据库(如果存在或不存在)。

    <?php  
         error_reporting (E_ALL ^ E_NOTICE);    
         include ('dbconn.php');
         session_start();

         $GLOBALS[$error_message];
         $GLOBALS[$username];

         if(isset($_POST['submit']))
           {     
               $error = array();        
               if(empty($_POST['username']))
                 {
                   $error[] = 'Please enter a username. ';
                 }
               else 
                 {
                   $username = mysqli_real_escape_string($connection, $_POST['username']);
                 }

               if(empty($_POST['password']))
                 {
                   $error[] = 'Please enter a password. ';
                 }
               else
                 {
                   $password = mysqli_real_escape_string($connection,$_POST['password']);   
                 }

               if(empty($_POST['cpassword']))
                 {
                   $error[] = 'Please confirm password. ';
                 }
               else
                 {
                   $cpassword = mysqli_real_escape_string($connection,$_POST['cpassword']);
                 }

               if($password == $cpassword)
                 {
                   $mainpassword= $password;
                 }
               else
                 {
                   $error[] = 'Your passwords do not match. ';
                 }      

               if(empty($error))
                 {                     
                   $query = "SELECT * from User WHERE username=' ".$username." ' ";
                   $result = mysqli_query($connection, $query) or die
                       (mysqli_error($connection));

                  if(mysqli_num_rows($result)> 0)
                  {
                   $multi = "Sorry ! This Username is not available...Please choose another";
                  }
                  else{ $sql="INSERT INTO user(username,password)VALUES                          ('$username','$password')";

              mysqli_query($connection, $sql) or die(mysqli_error($connection));
              header('Location:/MySQLi/confirmation.php'); }
}
               else
                  {
                    $error_message = '<span class="error">';
                    foreach($error as $key => $values) {
                    $error_message.="$values";
                    }
                    $error_message.="</span><br/><br/>";    
                    } 
                 }
?>

2 个答案:

答案 0 :(得分:6)

您正在手动添加用户名周围的空格,以使其看起来不存在:

$query = "SELECT * from User WHERE username=' ".$username." ' ";
                                             ^             ^

应该是:

$query = "SELECT * from User WHERE username='".$username."' ";

使用预准备语句可以一次性避免该问题和潜在的SQL注入问题:

$query = "SELECT * from User WHERE username=?";

另外,请确保始终使用表格和列名称:User不一定与user相同。

另请注意您绝不应将纯文本密码存储在数据库中,您应该salt and hash them

答案 1 :(得分:1)

SQL表名可以区分大小写,因此&#39; user&#39;和&#39;用户&#39;不一样。如果您的表名为&#39; user&#39;小写,然后&#39; SELECT * FORM用户&#39;大写可能不会给出任何结果。

如果您只想查看是否存在,可以选择&#39; 1&#39;并添加限制1,以便查询不扫描整个表,如下所示:

"SELECT 1 FROM user WHERE username='" . $username . "' LIMIT 1";

或者您可以将您的用户名列设为UNIQUE,如果用户名已经存在,则INSERT语句将失败,为您提供简单的单查询检查,既可以插入新用户,也可以让您知道该名称是否已经存在服用。

最后,您的代码对SQL注入攻击持开放态度。始终逃避用户输入或使用预准备语句。