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

-1 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/>";    
                    } 
                 }
?>
Run Code Online (Sandbox Code Playgroud)

jer*_*oen 6

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

$query = "SELECT * from User WHERE username=' ".$username." ' ";
                                             ^             ^
Run Code Online (Sandbox Code Playgroud)

应该:

$query = "SELECT * from User WHERE username='".$username."' ";
Run Code Online (Sandbox Code Playgroud)

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

$query = "SELECT * from User WHERE username=?";
Run Code Online (Sandbox Code Playgroud)

还要确保始终使用表名和列名:User不一定相同user.

另请注意,永远不要将纯文本密码存储在数据库中,应该对它们进行加密和散列.

  • 关于lettercase http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html - *表名以小写形式存储在磁盘上,名称比较不区分大小写.MySQL在存储和查找时将所有表名转换为小写.此行为也适用于数据库名称和表别名.* (4认同)
  • 考虑到这是"mysqli",使用字符串连接进行操作非常混乱. (2认同)
  • @ Fred-ii-我一直认为这取决于你的文件系统的案例敏感性.很高兴知道. (2认同)
  • ...但是还有另外一些信息表明*表和数据库名称使用CREATE TABLE或CREATE DATABASE语句中指定的字母大小存储在磁盘上.名称比较区分大小写.如果在具有不区分大小写的文件名(例如Windows或Mac OS X)的系统上运行MySQL,则不应将此变量设置为0.如果在不区分大小写的文件系统上使用--lower-case-table-names = 0强制此变量为0并使用不同的字母表访问MyISAM表名,则可能会导致索引损坏.* - 因此,lettercase是个问题.百思不得其解. (2认同)