我为登录页面构建了一个代码。该守则一直运作至昨天。但是,今天它并没有像我希望它一样工作。它现在在我的本地主机上。
if (isset($_POST['userpassword']))
{
include('db.php'); //I am using passwordu instead of password.
$query = "SELECT * FROM users WHERE username = '".$_REQUEST['username']."' AND passwordu = '".md5($_REQUEST['userpassword'])."'";
$result = mysql_query($query);
$num_rows = mysql_num_rows($result);
if ($num_rows == 1)
{
echo "Congratulations. You are now Logged in. You will be logged out when the Browser is closed.";
$_SESSION['logval'] = TRUE;
}
else
{
echo "You Have Entered Wrong Information. <b>Please Try AGAIN."; }
?>
每当我输入错误的密码时,它都会显示正确的内容。但是,当我输入正确的密码时,它也会显示密码未被接受。
这段代码一直工作到昨天。今天,这个问题出现了。
我已经找到了解决这个问题的方法。
我使用varchar(20)作为passwordu字段。所以,它没有用。我现在将它设置为更大的值,即100(为了安全)。它就像一个魅力。
答案 0 :(得分:1)
我看到的一个明显问题是你正在检查是否$num_rows == 1
。虽然这在大多数情况下都很好,但它可能会掩盖重复帐户的潜在问题。这就是说,如果您拥有同一个帐户中的多个帐户,那么您会认为凭据确实是错误的。
作为测试,请尝试以下示例,看看它是否开始工作:
if ($num_rows >= 1)
{
//Correct info
}
else
{
//Incorrect info
}
虽然这可能会解决您的问题,但您需要弄清楚为什么会有重复的帐户。
修改的
我会在下面的评论中考虑Mike Brant的建议。确实,应该有一个独特的约束来防止重复的可能情况。
答案 1 :(得分:1)
好的,这是一个模糊的情况,并且基于发布的代码片段很难确定什么是错误的(这样的片段似乎是正确的),并且你还说它一直工作到昨天。
首先要做的是尝试一些调试。显然这种情况并没有回归:
if ($num_rows == 1)
首先执行die("num_rows = ".$num_rows);
检查它返回的值。发布在这里,我们可以从那里走得更远。