PHP PDO登录进程不工作
我用Php数据对象制作了一个登录脚本。 但是它不能正常工作,问题是即使密码与数据库记录不匹配,它也会允许任何用户登录。这部分我真的很困惑,我无法理解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'] == '
$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
;循环结束后,没有行了。啊,那我该怎么办:/?