2015-11-04 284 views
1

我找到一个使用PHP连接到MySQL数据库的管理表的登录脚本。 我的问题是用户名区分大小写,我不希望它是。所有用户名都将是专有名称,因此即使用户名使用大写或小写,它也可以正常工作。用户名登录不区分大小写? PHP MySQL

<?php 
session_start(); 

require('connect.php'); 
if (isset($_POST['username']) and isset($_POST['password'])) { 
    $username = $_POST['username']; 
    $password = $_POST['password']; 

    $query = "SELECT * FROM admin WHERE username='$username' and password='$password'"; 
    $result = mysql_query($query) or die(mysql_error()); 
    $count = mysql_num_rows($result); 
    if ($count == 1) { 

     $_SESSION['username'] = $username; 
    } else { 
     echo "Invalid Login Credentials."; 
    } 
} 
if (isset($_SESSION['username'])) { 
    $username = $_SESSION['username']; 
    header("location:index.php?page=user"); 

    echo "<a href='logout.php'>Logout</a>"; 
} else { 
    ?> 
    <div class="register-form"> 
     <?php 
     if (isset($msg) & !empty($msg)) { 
      echo $msg; 
     } 
     ?> 
     <h1>Login</h1> 
     <form action="" method="POST"> 
      <p><label>User Name : </label> 
       <input id="username" type="text" name="username" placeholder="username" /></p> 

      <p><label>Password&nbsp;&nbsp; : </label> 
       <input id="password" type="password" name="password" placeholder="password" /></p> 

      <input type="submit" name="submit" value="Login" /> 
     </form> 
    </div> 
<?php } ?> 

回答

1

检查Collation在你的数据库表,发现这是大小写敏感的领域,去change,确保它的latin1_swedish_ci,有些选项强制它是区分大小写的。

如果这不是您的问题,请在您的$query中将=标志更改为LIKE

ciCollation选项的结束意味着Case Insensitive

1

如果你不想改变你的数据库,你也可以检查登录前强制的情况。例如:

// Convert the username all lowercase 
$username = strtolower($_POST['username']); 

// Use LOWER() to convert the username to lowercase 
$query = "SELECT * FROM admin WHERE LOWER(username)='$username' and password='$password'"; 

另请注意,请查看mysqli并准备好声明。您包含的代码非常不安全(查找SQL注入)。