用户登录在PHP中不起作用

用户登录在PHP中不起作用,php,sql,login,Php,Sql,Login,我的登录方式似乎不正确。如果用户输入了错误的详细信息,它仍然会将用户指向登录页面。有什么问题吗 $username=$_POST['Username']; $password=$_POST['Password']; $qry=mysql_query("SELECT * FROM users WHERE `Username`='$username' AND `Password`='$password'", $con); if(!$qry) { mysql_close($con); die

我的登录方式似乎不正确。如果用户输入了错误的详细信息,它仍然会将用户指向登录页面。有什么问题吗

$username=$_POST['Username'];
$password=$_POST['Password'];

$qry=mysql_query("SELECT * FROM users WHERE `Username`='$username' AND `Password`='$password'", $con);
if(!$qry) {
  mysql_close($con);
  die("Query Failed: ". mysql_error());
} else {
  $row=mysql_fetch_array($qry);
}

if($_POST['username']==$row["Username"]&&$_POST['password']==$row["Password"])
{
  session_start();
  $_SESSION['Firstname']=$_POST['Username'];
  mysql_close($con);
  header("Location:index_logged_in.php");
}
else
{
  mysql_close($con);
  header ("Location:login.php?id=Incorrect username or password. Please Enter Again.");
}

//This is what is in the logged in page

include('connection2.php');
session_start();
if(!$_SESSION['Firstname']) {
   header("");
}

我对mysql很满意

您不应该存储用户密码,这存在一些严重的责任问题

我清理了你的代码

$username = $_POST['Username'];
$password = $_POST['Password'];
$results = mysql_query("SELECT 1 FROM `users` WHERE `Username`='$username' AND `Password`='$password'");
$rows = mysql_num_rows($results);
if($rows > 0){
   session_start();
   $_SESSION['Firstname'] = $username;
   header("Location:index_logged_in.php");
}
else{
  header ("Location:login.php?id=I
}
mysql_close($con);

保存用户密码时,首先对其进行哈希运算

$password = hash('ripemd320',$password )


没有解决任何有争议的问题,我想这可能就是为什么你没有得到你期望的结果。在代码的开头,使用
$username=$\u POST['username']
$password=$\u POST['password']
获取用户名和密码,并使用这些变量运行查询。随后,您将使用以下命令:

if($_POST['username']==$row["Username"]&&$_POST['password']==$row["Password"])

如果用户名和密码与数据库中的任何内容都不匹配,则
$row=mysql\u fetch\u array($qry)将返回
false
。由于未设置
$\U POST['username']
$\U POST['password']
$\U POST['username']
$\U POST['password']
已设置,请注意大写的U和P),因此在比较这些值时,基本上比较的是
false
null
,使用
==/code>时,是相等的。

在打开PHP标签后立即将错误报告添加到文件顶部,例如
请不要在问题中发布网站名称,使用此代码很容易攻击您的网站。在谷歌搜索php mysql注入,也可以使用===而不是==。由于php哈希漏洞。在这里添加错误列表:密码存储为纯文本,仍然使用折旧后的mysql\u*您需要停止使用
mysql\u*
函数,改用
PDO
mysqli
,您需要使用带有绑定参数的准备语句,您需要使用
password\u hash()
$\u POST['username']
!=<代码>$\u POST['Username']
你的“清理代码”甚至不能解决你提到的严重责任问题。“mysql是因为它比mysqli更安全”-让人难以置信。证据-请(老实说)我不是专家-手册(以及我读过的每个网站)告诉我要搬到mysqli-我就是这么做的。我倾向于相信除你之外的每一个人。@误解了正在进行的工作?如果您的意思是“仍然接收已发现漏洞的更新”,而不是不推荐使用的ext/mysql,它不再接收定期更新,很快将从PHP中删除,那么您是正确的。这是件坏事吗?Mysqli已经成为PHP的一部分11年了。这不是什么新鲜事。4个结果-全部修复-那么嗯?
if($_POST['username']==$row["Username"]&&$_POST['password']==$row["Password"])