0

我为登录页面构建了一个代码。直到昨天,该代码都运行良好。但是,今天它不像我想要的那样工作。它目前在我的本地主机上。

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(出于安全考虑)。它就像一个魅力。

4

2 回答 2

1

我看到的一个明显问题是您正在检查$num_rows == 1. 虽然在大多数情况下这很好,但它可能掩盖了重复帐户的潜在问题。这就是说,如果您拥有超过 1 个相同的帐户,您会产生凭据不正确的错觉,而实际上它们是不正确的。

作为测试,试试下面的例子,看看它是否开始工作:

if ($num_rows >= 1)
{
   //Correct info
}
else
{
   //Incorrect info
}

虽然这可能会解决您的问题,但您需要弄清楚为什么会有重复的帐户。

编辑

我会在下面的评论中考虑 Mike Brant 的建议。确实,应该有一个独特的约束来防止潜在的重复案例。

于 2012-09-26T14:02:10.367 回答
1

好的,这是一个模糊的情况,根据发布的代码片段,很难确定出了什么问题(这样的片段似乎是正确的),而且您还说它直到昨天才有效。

首先要做的是尝试一些调试。显然这个条件没有返回真:

if ($num_rows == 1)

所以首先做一个die("num_rows = ".$num_rows);检查它返回的值。把它贴在这里,我们可以从那里走得更远。

于 2012-09-26T14:04:34.293 回答