用户名登录案例不敏感? PHP MySQL

时间:2015-11-04 02:07:07

标签: php mysql

我找到了一个使用PHP的登录脚本,它连接到MySQL DB的管理表。 我的问题是用户名是区分大小写的,我不希望它。所有用户名都是正确的名称,因此即使用户名使用大写或小写也可以。

<?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 } ?>

2 个答案:

答案 0 :(得分:1)

检查数据库表格中的Collation,找到区分大小写的字段并转到change,确保其latin1_swedish_ci,某些选项强制选择它是区分大小写的。

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

ci选项末尾的

Collation表示Case Insensitive

答案 1 :(得分: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注入)。