编辑感谢下面的评论,我们已经发现问题出在md5上,没有一切正常工作。
但是我如何实现md5呢?
我在使用以下代码登录时遇到了一些麻烦 数据库和注册系统已经在运行 问题在于它在查询中根本找不到任何结果 如果计数> 0它应该将用户重定向到安全页面 但这只有在我写入> = 0时才有效,但这应该是> 0,只有找到用户名和密码后,才能在登录后将其定向到网站的安全(首页) 例如root(用户名)root(密码)已经存在,但我似乎无法正确登录。
<?php
session_start();
if (!empty($_POST["send"]))
{
$username = ($_POST["username"]);
$password = (md5($_POST["password"]));
$count = 0;
$con = mysql_connect("localhost" , "root", "");
mysql_select_db("testdb", $con);
$result = mysql_query("SELECT name, password FROM user WHERE name = '".$username."' AND password = '".$password."' ")
or die("Error select statement");
$count = mysql_num_rows($result);
if($count > 0) // always goes the to else, only works with >=0 but then the data is not found in the database, hence incorrect
{
$row = mysql_fetch_array($result);
$_SESSION["username"] = $row["name"];
header("Location: StartPage.php");
}
else
{
echo "Wrong login data, please try again";
}
mysql_close($con);
}
?>
答案 0 :(得分:2)
在这种情况下你能做的最好的事情就是试图找出问题所在。 因此,您可以按步骤继续执行以下操作:
1)用print_r($_POST)
开始你的脚本,看看哪些变量是通过post传递的(荒谬的,这个问题甚至可能与你发送的'send'guard参数有关..我发送一个表单通过获得)
2)将您的查询分配给变量(...并且不要忘记转义参数!)并将其打印到屏幕;然后在mysql(或phpmyadmin)上执行它以查看它们给出的结果。
作为旁注,正如有人已经指出的那样,此代码可能会受到SQL注入的影响,因此您可以考虑使用预准备语句;见这里:quick intro
答案 1 :(得分:0)
您的登录代码很好。
但是你还需要在数据库中存储密码之前使用md5()函数。因此,当您在DB中插入用户记录时,将md5()应用于密码,保存在DB中。现在,当您尝试在登录时找到记录时,它将正确匹配。
答案 2 :(得分:0)
你应该用mysqli或PDO重写它,并使用更新的哈希函数和盐。 MD5使用非常广泛,是破解者的目标。