-1

有代码可以检查用户是否输入了正确的密码。

if (isset($_POST['userpassword']))
{
    include('db.php');
    //I have used the name passwordu instead of password in the database as well.
    $query = "SELECT * FROM users WHERE username = '".$_REQUEST['username']."' AND passwordu = '".md5($_REQUEST['userpassword'])."';";
    $result = mysql_query($query);
    if ($result){ //THIS IS WHERE I FEEL THE ERROR IS
        echo "Congratulations. You are now Logged in. You will be logged out when the Browser is closed.";
        $_SESSION['logval'] = TRUE; //Sets the User Logged in for the complete session.
    }
    else echo "Sorry, You Entered Wrong Info.";
}

但是,即使输入了错误的密码,它也会接受登录。

这里有什么问题?
另外,如果我在概念上犯了错误,请告诉我检查用户是否输入了正确信息的正确方法。

4

6 回答 6

2

如果查询成功,即使没有返回记录,查询也会返回 true。检查返回的记录数。

于 2012-09-25T17:50:58.470 回答
2

老实说 - 错误是代码允许MySQL 注入

但是对于您的代码,请使用 mysql_num_rows()。

如果查询成功,mysql_query() 返回 true。如果不是,则为假。
mysql_num_rows() 计算行数。

if ( mysql_num_rows(mysql_query("some query")) == 1 ) { logged in }
于 2012-09-25T17:54:09.137 回答
1

更改if ($result)if (mysql_num_rows($result) > 0)

于 2012-09-25T17:52:35.833 回答
-1

从查询末尾删除;,这不是必需的。

... md5($_REQUEST['userpassword'])."';";
                                     ^---this one
于 2012-09-25T17:52:00.920 回答
-1

好吧,它返回一个空集,但是在这样的情况下返回,我更喜欢这个

$query=<<<HERE
SELECT count(*) as count form users where username=" " and password=" "
HERE;
$send=mysql_query($query);
$row=mysql_fetch_assoc($send);
$count=$row["count"];
if($count=="0"){// not logged in}
else if($count=="1"){//logged in}

检查计数值然后提供登录并停止使用mysql_query,切换到pdo

于 2012-09-25T17:53:49.250 回答
-3

改变

$query = "SELECT * FROM users WHERE username = '".$_REQUEST['username']."' AND passwordu = '".md5($_REQUEST['userpassword'])."';";

$query = "SELECT * FROM users WHERE username == '".$_REQUEST['username']."' AND passwordu == '".md5($_REQUEST['userpassword'])."';";

和运算===不一样。==是一个比较运算符,它的意思是相同的=虽然它意味着等于但不能意味着那个。

也改变

$result = mysql_query($query);

$result = mysql_num_rows(mysql_query($query));

您的查询将始终返回 true,因为它执行成功,无论是否发现任何行存在。

于 2012-09-25T17:52:53.760 回答