这个问题在这里已有答案:
我的PHP代码中有这两个函数:
function admin_checker($username,$password)
{
$username=remove_extra_in_string($username);
$password=remove_extra_in_string($password);
$q='select * from `admin` where `username`="'.$username.'" and `password`="'.$password.'"';
$result=@mysqli_query($conn, $q);
$_COOKIE['username'] = $result["username"];
$_COOKIE['password'] = $result["password"];
if(@mysqli_num_rows($result)==1)
return 1;
else
return 0;
}
function remove_extra_in_string($string)
{
$extra=array('\'','"','`','/','*',';',' ','--');
$string=str_replace($extra,'',$string);
return $string;
}
然后检查:
if(admin_checker($_COOKIE['username'],$_COOKIE['password'])==1)
{ echo "ok"; } else { echo "not ok"; }
但不知怎的,它没有通过,我不知道我在这里做错了什么?
首先也是最重要的事情:永远不要将密码存储为纯文本,也不要将用户数据保存在COOKIE中。接下来的事情 - 不要使用自己的函数remove_extra_in_string(),使用内置的mysqli_real_escape_string甚至更好 - 使用预处理语句:https://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php
这种情况是,如果您以纯文本格式存储密码,您可能会有更多具有相同密码和用户名的记录,并且它将返回值!= 1,因此它将为FALSE。
它也可能失败,因为您在调用admin_checker()时没有设置COOKIES,因此$ username和$ password等于null。