PHP PDO登录进程不工作

PHP PDO登录进程不工作,php,sql,pdo,Php,Sql,Pdo,我用Php数据对象制作了一个登录脚本。 但是它不能正常工作,问题是即使密码与数据库记录不匹配,它也会允许任何用户登录。这部分我真的很困惑,我无法理解 $case = 1; include("common/top.php"); if(isset($_SESSION['STAKEZONE'])) { header("Location: dashboard.php"); } if(!empty($_POST['login'])) { if($_POST['username'] == '

我用Php数据对象制作了一个登录脚本。 但是它不能正常工作,问题是即使密码与数据库记录不匹配,它也会允许任何用户登录。这部分我真的很困惑,我无法理解

$case = 1;
include("common/top.php");
if(isset($_SESSION['STAKEZONE']))
{
    header("Location: dashboard.php");
}
if(!empty($_POST['login']))
{
    if($_POST['username'] == '')
    {
        $msg = 'Please Enter your Username! <br>';
        $case = 0;
    }
    if($_POST['password'] == '')
    {
        $msg = 'Please Enter your Password!';
        $case = 0;
    }
    if($case == 1)
    {
        $username = $_POST['username'];
        $password = $_POST['password'];
        $sql = $dbh->prepare("SELECT * FROM users WHERE username = ?");
        $sql->execute(array($username));
        while($u = $sql->fetch())
        {
            $id = $u['id'];
            $password_query = $u['password'];
            $lastip = $u['lastip'];
            $status = $u['status'];
        }
        $row = $sql->fetch(PDO::FETCH_ASSOC);
        if($status == '0' && $row)
        {
            $msg = base64_encode('Your Account is Inactive');
            header("Location: login.php?msg=$msg");
            die;
        }
        $password_md5 = md5($password);
        if($password_md5 = $password_query)
        {
            $sql = "UPDATE users
                    SET lastip = ?
                    WHERE id = ?";
            $q = $dbh->prepare($sql);
            $q->execute(array($_SERVER['REMOTE_ADDR'],$id));

            $_SESSION['STAKEZONE']['user'] = $username;
            $_SESSION['STAKEZONE']['id'] = $id;
            header("Location: dashboard.php");
            die;
        }
        else
        {
            $msg = base64_encode("Wrong Username Or Password");
            header("Location: login.php?msg=$msg");
            die;
        }
    }
    else
    {
        header("Location: login.php?msg=$msg");  
        die;
    }
}
$case=1;
包括(“common/top.php”);
如果(isset($_会话['StateZone']))
{
标题(“位置:dashboard.php”);
}
如果(!空($_POST['login']))
{
如果($_POST['username']='')
{
$msg='请输入您的用户名!
'; $case=0; } 如果($_POST['password']='') { $msg='请输入您的密码!'; $case=0; } 如果($case==1) { $username=$_POST['username']; $password=$_POST['password']; $sql=$dbh->prepare(“从用户名=?”的用户中选择*”; $sql->execute(数组($username)); 而($u=$sql->fetch()) { $id=$u['id']; $password_query=$u['password']; $lastip=$u['lastip']; $status=$u['status']; } $row=$sql->fetch(PDO::fetch_ASSOC); 如果($status='0'&&&$row) { $msg=base64_encode(“您的帐户处于非活动状态”); 标题(“Location:login.php?msg=$msg”); 死亡 } $password\u md5=md5($password); 如果($password\u md5=$password\u query) { $sql=“更新用户” 设置lastip=? 其中id=?”; $q=$dbh->prepare($sql); $q->execute(数组($\u SERVER['REMOTE\u ADDR',$id)); $\会话['STAKEZONE']['user']=$username; $\u会话['STAKEZONE']['id']=$id; 标题(“位置:dashboard.php”); 死亡 } 其他的 { $msg=base64_编码(“错误的用户名或密码”); 标题(“Location:login.php?msg=$msg”); 死亡 } } 其他的 { 标题(“Location:login.php?msg=$msg”); 死亡 } }

谢谢你的帮助,非常感谢。

你的打字错误。您需要更改以下行

if($password_md5 = $password_query)
追随

if($password_md5 == $password_query)

您还应该在第一次
标题
呼叫后退出,您将永远无法捕获非活动用户,因为此时
$row
的计算结果将始终为
false
;循环结束后,没有行了。啊,那我该怎么办:/?