PHP & MySQL 登录认证数据库检查不能正常工作?

Posted

技术标签:

【中文标题】PHP & MySQL 登录认证数据库检查不能正常工作?【英文标题】:PHP & MySQL login authentication database check not working properly? 【发布时间】:2016-01-08 19:22:09 【问题描述】:

我正在使用 php/htmlmysql 进行测试登录检查。我得到它的工作很棒;它成功连接到数据库,它可以获取我的数据库值并将它们保存在变量中等,但我遇到了一个小问题。

我正在使用两个 PHP 页面进行检查。 login.php 页面,仅包含论坛,welcome.php 页面,进行数据库连接。当我运行一个测试页面以让它回显数据库信息时,它会正确打印出来(testUser、testEmail@email.com、testPassword、1/1/1900)。因此,当我尝试运行登录身份验证检查时,它只会显示“未知用户!”两次,即使我尝试使用用户名“usr”、“testUser”和“testUser2”(我制作了两个表,第二个表相同,最后添加了 2)。这是我的代码。

<html>
    <head>
        <?php
            $title = ucfirst(basename($_SERVER['PHP_SELF'], ".php"));
            echo "<title>$title</title>";
        ?>
    </head>
    <body>
        <form name="form" accept-charset="utf-8" action="welcome.php" method="post">
            <span class="header">Username</span><input type="text" name="usr" value="usr"></input><br>
            <span class="header">Password</span><input type="text" name="pass" value="pass"></input>
            <input type="submit">
        </form>
    </body>
</html>

<?php
    $servername = removed;
    $username = removed;
    $password = removed;
    $dbname = removed;

    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) 
        die("Connection failed: " . $conn->connect_error);
     

    $sql = "SELECT ID, USER, PASSWORD FROM usrdatabase";
    $result = $conn->query($sql);

    if ($result->num_rows > 0) 
        // output data of each row
        while($row = $result->fetch_assoc()) 
            // the given info from the form
            $usrUser = $_POST["usr"];
            $usrPass = $_POST["pass"];
            // convert the findings to uppercase to get rid of sensitivity
            if (strtoupper($usrUsr) == strtoupper($row["USER"]) && strtoupper($usrPass) == strtoupper($row["PASSWORD"])) 
                echo "Welcome $usrUser!<br>Your login was successful! ?>";
            
            elseif (strtoupper($usrUsr) == strtoupper($row["USER"]) && strtoupper($usrPass) != strtoupper($row["PASSWORD"])) 
                echo "Login failed as $usrUser!";
            
            else 
                echo "Unknown user!";
            
        
     else 
        echo "0 results";
    
    $conn->close();
?>

这总是会产生“未知用户!”我的支票有问题吗?我希望它通过数据库中的每个用户来检查每个现有用户的信息。

【问题讨论】:

请使用 PHP 的built-in functions 来处理密码安全问题。如果您使用的 PHP 版本低于 5.5,您可以使用 password_hash() compatibility pack。 您真的应该只从数据库中检索单个用户,而不是让所有用户都循环通过。这确实效率低下,并且随着用户数量的增加会让人头疼。 在数据库中存储纯文本密码会使这个问题明确不道德地回答。 在打开&lt;?php标签error_reporting(E_ALL); ini_set('display_errors', 1);后立即将错误报告添加到文件顶部 如果是我,我会把我的条件句弄得很小,看看它在哪里。取出除第一个条件之外的所有内容并减少该条件,直到您看到发生了什么。 【参考方案1】:

改变

strtoupper($usrUsr) == strtoupper($row["USER"])

strtoupper($usrUser) == strtoupper($row["USER"])

使用用户名从数据库中获取单个用户,因为它们对于每个用户都是唯一的。

$sql = "SELECT ID, USER, PASSWORD FROM usrdatabase WHERE USER = '" . mysqli_real_escape_string($_POST['usr']) . "' AND PASSWORD = '"  . mysqli_real_escape_string($_POST['pass']) . "'";

【讨论】:

【参考方案2】:

嘿,我看到你的 if else 包含 $usrUsr 不应该是 $usrUser 吗? (忘记了e)

【讨论】:

以上是关于PHP & MySQL 登录认证数据库检查不能正常工作?的主要内容,如果未能解决你的问题,请参考以下文章

facebook认证/登录问题

从 json 文件(php)登录检查用户和密码。如何从json文件中读取文件

检查连接mysql数据库代码

如何在PHP中连接MySQL数据库

PHP和MySQL,快速连续多次检查行的有效方法?

怎么将php与数据库连接