我的登录中有这个代码,然后我试图输入我的密码,例如我的真实密码是"Reymar25",但当我输入"Reymar25"时,它登录了,不应该在另一个页面中继续,请帮我复习一下。。谢谢
<?php
include('dbconnection.php');
if (isset($_POST['submit']))
{
$username = $_POST['username'];$password = $_POST['password'];
$query = mysql_query("SELECT * FROM tbl_user username = '".$username."' AND password = '".$password."' LIMIT 1");
//("SELECT * FROM tbl_user WHERE username = '".$username."' AND password = '".$password."' LIMIT 1");
if (mysql_num_rows($query) == 1)
{
$row = mysql_fetch_array($query);
header("Location: index1.php"); // Modify to go to the page you would like
exit;
}
else
{
header("Location: loginform.php");
echo "Please Check Username or Password!";
exit();
}
}
?>
检查用户名和密码列的排序规则设置。看见http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html
(请阅读您的问题评论,其中包含关于如何解决代码中的其他问题的重要信息)
关于问题:
为什么要重复SQL语句两次?然而,该查询是正确的。我认为您可能需要使列区分大小写。看看这个答案。
然而,您实现的机制非常薄弱:
- 可以使用SQL注入
- 您将密码存储为纯文本(如果有的话)破解你的服务器,他/她可以破解所有密码,你应该使用散列。例如,您可以使用用户名作为salt来生成哈希,然后检查该哈希是否存在于数据库中的某个位置
- 只有当用户输入正确的密码时,才能委派您的页面。为了确保网站的安全,您应该每次检查每个页面标题中的密码
我试过这段代码,它很有效。很抱歉,如果我没有使用PDO,
if (isset($_POST['submit']))
{
$username = $_POST['username'];
$password = $_POST['password'];
$query = mysql_query("SELECT * FROM tbl_user LIMIT 1");
while($row = mysql_fetch_array($query))
{
if(strcmp($username,$row['username'])==0 && strcmp($password,$row['password'])==0)
{
header("Location: index1.php");
}
else
{
echo "Somethings wrong either on your Username or Password Please Try Again" ;
}
}
}?>