尽管输入了False信息,mysql_query()始终返回True

时间:2012-09-25 17:49:55

标签: php mysql

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

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.";
}

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

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

6 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

说实话 - 错误是代码允许MySQL Injections

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

如果查询成功,则

mysql_query()返回true。如果不是假的。
mysql_num_rows()计算行数。

if ( mysql_num_rows(mysql_query("some query")) == 1 ) { logged in }

答案 2 :(得分:1)

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

答案 3 :(得分:-1)

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

... md5($_REQUEST['userpassword'])."';";
                                     ^---this one

答案 4 :(得分:-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

答案 5 :(得分:-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,因为它已成功执行,无论是否存在任何行都存在。

相关问题