有代码可以检查用户是否输入了正确的密码。
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.";
}
但是,即使输入了错误的密码,它也会接受登录。
这里有什么问题?
另外,如果我犯了一个概念上的错误,请告诉我检查用户是否输入了正确信息的正确方法。
答案 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,因为它已成功执行,无论是否存在任何行都存在。