PHP 登录表单可以使用任何密码,但不能使用用户名?

标签 php mysql

我正在创建一个连接到我的数据库的登录表单(全部通过 localhost、mysql、phpmyadmin)。 我在登录时遇到问题。

当我登录时,它会要求我输入用户名和密码,如果我在数据库中提供用户名和任何随 secret 码 - 它仍然会让我登录。但是,如果我输入任何随机用户名,它就不会登录。

我通过我的 php 上网查看过,我很挣扎! (我已经看了好几个小时了,我的眼睛都瞪大了。

感谢任何帮助。 谢谢。

这是我的login.php代码:

<?php

if ($username && $userid){
    echo "You are already logged in as <b>$username</b>. <a href='admin.php'> Click here </a>";
} else {
    $form= "<form action='login.php' method='POST'>
                <table>
                    <tr>
                        <td> Username: </td>
                        <td><input type='text' name='user' /></td>
                    </tr>
                    <tr>
                        <td> Password: </td>
                        <td><input type='password' name='password' /></td>
                    </tr>
                    <tr>
                        <td>  </td>
                        <td><input type='submit' name='loginbtn' value='login' /></td>
                    </tr>
                </table>
            </form>";

if ($_POST['loginbtn']) {       
    $user= $_POST['user'];
    $password = $_POST['password'];

    if ($user) { 
        if ($password) {
            require ("connect.php");

            $password= ('password');

            echo "$password";
            $query = mysql_query("SELECT * FROM users WHERE username='$user'");
            $numrows = mysql_num_rows($query);

            if ($numrows ==1) {
                $row= mysql_fetch_assoc($query);        
                $dbid = $row['id'];
                $dbuser = $row['username'];
                $dbpass = $row['password'];         
                $dbactive = $row['active'];

                if ($password == $dbpass) {
                    if ($dbactive == 1) {
                        $_SESSION['userid']= $dbid;
                        $_SESSION['username'] = $dbuser;

                        echo "You have been logged in as <i> $dbuser </i>. Click <a href='admin.php'> here </a> to go to the members page.";

                    } else {
                        echo "You must activate your account to login. $form";
                    }
                } else {
                    echo "You did not enter the correct password. $form";
                }
            } else {    
                echo "the username you entered was not found. $form";
            }

            mysql_close();
        } else {
            echo "You must enter your password. $form";
        }
    } else {
        echo "You must enter your username. $form";
    }
} else {    
    echo $form;         
}

?>

最佳答案

问题是,您可以在密码字段中写入任何内容,稍后,您将使用以下代码对其进行硬编码:

$password = ('password');

因此,如果您的实际密码是password,那么您在字段中写入的内容并不重要。

注释

  • 不要使用 mysql_* 函数,因为它们已被弃用。请改用 mysqli 或 PDO。

  • 让我们转义来自外部的变量,或者使用准备好的语句来避免 SQL 注入(inject)。

关于PHP 登录表单可以使用任何密码,但不能使用用户名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27906064/

相关文章:

php - 验证数据,登录系统codeigniter

php - 试图阻止文本区域中的项目符号作为特殊字符进入我的数据库

java - 获取错误 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException : Communications link failure

MySQL 和平均计算给出不同的结果

php - 仅用逗号分隔的字符串、树形多维 php 数组

php - 检测是否有人安装了 selinux/启用了 httpd_can_network_connect

php - 我应该在 nginx.conf 中还是使用 Laravel config/cors.php 添加我的 CORS header ?

php - laravel 5.2 如何将另一个表的数据插入到另一个表中?

RHEL7.3下MYSQL安装问题

php - 动态html字段表单的mysql设计