php代码突然停止工作。奇怪的行为?

时间:2012-09-26 13:57:39

标签: php mysql sql

我为登录页面构建了一个代码。该守则一直运作至昨天。但是,今天它并没有像我希望它一样工作。它现在在我的本地主机上。

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(为了安全)。它就像一个魅力。

2 个答案:

答案 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);检查它返回的值。发布在这里,我们可以从那里走得更远。