PHP登录脚本问题,检查用户是否被禁止

Tek*_*ikk 0 php mysql login

我在我的网站上使用的PHP登录脚本出错了.

我想添加一些代码,用于检查用户在登录时是否被禁止.

但由于某些原因,它不能正常工作; 即使禁止字段/属性在MySQL"users"表中包含"n"为false,它也总是输出"你被禁止".

我试过修复代码,但我仍然遇到错误.这是我的代码:

$bancheck = mysql_query("SELECT * FROM users WHERE ban = '".$_POST['username']."'" ) or die(mysql_error());
$ban = mysql_fetch_array($bancheck);    

if ($ban = 'y') {
  die('You are banned...');
}
Run Code Online (Sandbox Code Playgroud)

我要检查的MySQL字段称为"禁止",值为"y"表示"true",或"n"表示"false".

Ada*_*nch 5

1:应该是比较,而不是作业.

这行不正确:

if ($ban = 'y') {{
Run Code Online (Sandbox Code Playgroud)

它应该是:

if ($ban == 'y') {
Run Code Online (Sandbox Code Playgroud)

我假设那里还有一个额外的支撑.


2:SQL注入

您不应该直接将字符串传递给from $_POSTMySql,因为您很容易受到SQL注入攻击.你应该像这样逃避它:

$bancheck = mysql_query("SELECT * FROM users WHERE ban = '".mysql_real_escape_string($_POST['username'])."'" )or die(mysql_error());
Run Code Online (Sandbox Code Playgroud)

3:禁止!=用户

您不应该与ban通过表单传递的用户名进行比较,因为ban将保持字符串'y'或'n'.您应该将用户名(传入)与数据库表中的approriate username字段进行比较.像这样:

$bancheck = mysql_query("SELECT * FROM users WHERE username = '".mysql_real_escape_string($_POST['username'])."'" )or die(mysql_error());
Run Code Online (Sandbox Code Playgroud)

4:正确的迭代和比较

而不是mysql_fetch_array()函数我将使用该mysql_fetch_assoc()函数,因为它返回一个关联数组.

这将返回返回的每一行的关联数组(包含在MySql资源中$bancheck),因此您需要迭代它们(即使它应该只返回一个数组),如下所示:

while($ROW = mysql_fetch_assoc($bancheck))
{
    if('y' == $ROW['ban']) {

        die('You are banned...');

    }
}
Run Code Online (Sandbox Code Playgroud)

但是我会添加一些代码来帮助解决任何其他问题:

$count = mysql_num_rows($bancheck);
if($count > 1)
{
    die('More than one user with that username');    
}
elseif($count > 0)
{
    while($ROW = mysql_fetch_assoc($bancheck))
    {
        if('y' == $ROW['ban']) {

            die('You are banned...');

        }
    }
}
else //i.e. $count<=0
{
    die('No users with that username');
}
Run Code Online (Sandbox Code Playgroud)