Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP登录脚本问题,检查用户是否被禁止_Php_Mysql_Login - Fatal编程技术网

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

PHP登录脚本问题,检查用户是否被禁止,php,mysql,login,Php,Mysql,Login,我在网站上使用的PHP登录脚本出现错误 我想添加代码,检查用户登录时是否被禁止 但由于某些原因,它不能正常工作;它总是输出“youarisbanked”,即使在MySQL“users”表中ban字段/属性包含on“n”表示false 我试着修复代码,但仍然会出错。这是我的代码: $bancheck = mysql_query("SELECT * FROM users WHERE ban = '".$_POST['username']."'" ) or die(mysql_error()); $b

我在网站上使用的PHP登录脚本出现错误

我想添加代码,检查用户登录时是否被禁止

但由于某些原因,它不能正常工作;它总是输出“youarisbanked”,即使在MySQL“users”表中ban字段/属性包含on“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...');
}
我要检查的MySQL字段名为“ban”,值为“y”表示“true”,或“n”表示“false”

应该是

if ($ban == 'y') {
应该是

if ($ban == 'y') {
1:应该是比较,不是作业。 这行不正确:

if ($ban = 'y') {{
应该是:

if ($ban == 'y') {
$bancheck = mysql_query("SELECT ban FROM users WHERE username = '".$_POST['username']."'" )or die(mysql_error());
我想这里也有一个额外的支架


2:SQL注入 您不应该直接将字符串
从$\u POST
传递到MySql,因为您容易受到SQL注入的攻击。你应该像这样逃避它:

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

3:禁止!=用户 无论如何,您都不应该将
ban
与通过表单传入的用户名进行比较,因为ban将保留字符串“y”或“n”。您应该将用户名(传入)与数据库表中的适当用户名字段进行比较。像这样:

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

4:适当的迭代和比较 我将使用
mysql\u fetch\u assoc()
函数代替
mysql\u fetch\u array()
函数,因为它返回一个

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

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

$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');
}
$count=mysql\u num\u行($bancheck);
如果($count>1)
{
die(‘多个用户使用该用户名’);
}
elseif($count>0)
{
while($ROW=mysql\u fetch\u assoc($bancheck))
{
如果('y'=$ROW['ban'])){
死(‘你被禁止……’);
}
}
}
else//e.$count1:应该是比较,而不是赋值。
这行不正确:

if ($ban = 'y') {{
应该是:

if ($ban == 'y') {
$bancheck = mysql_query("SELECT ban FROM users WHERE username = '".$_POST['username']."'" )or die(mysql_error());
我想这里也有一个额外的支架


2:SQL注入 您不应该直接将字符串
从$\u POST
传递到MySql,因为您容易受到SQL注入的攻击。你应该像这样逃避它:

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

3:禁止!=用户 无论如何,您都不应该将
ban
与通过表单传入的用户名进行比较,因为ban将保留字符串“y”或“n”。您应该将用户名(传入)与数据库表中的适当用户名字段进行比较。像这样:

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

4:适当的迭代和比较 我将使用
mysql\u fetch\u assoc()
函数代替
mysql\u fetch\u array()
函数,因为它返回一个

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

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

$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');
}
$count=mysql\u num\u行($bancheck);
如果($count>1)
{
die(‘多个用户使用该用户名’);
}
elseif($count>0)
{
while($ROW=mysql\u fetch\u assoc($bancheck))
{
如果('y'=$ROW['ban'])){
死(‘你被禁止……’);
}
}
}
其他//即$count
我认为这应该是:

if ($ban == 'y') {
$bancheck = mysql_query("SELECT ban FROM users WHERE username = '".$_POST['username']."'" )or die(mysql_error());
如果用户名的列称为“username”

我认为这应该是:

if ($ban == 'y') {
$bancheck = mysql_query("SELECT ban FROM users WHERE username = '".$_POST['username']."'" )or die(mysql_error());
如果用户名的列称为“username”

  • 了解SQL注入黑客攻击。现在就去做吧
  • 你在检查房间吗 初始语句中的右列?不应该是“选择”吗* 来自username=”或其他用户?(正如tveitan所说)
  • $ban是一个数组。你需要 $ban['ban']来获取ban列。(正如阿尼穆森所说)
  • 比较==不=(如亚当所说)
  • 了解SQL注入黑客攻击。现在就去做吧
  • 你在检查房间吗 初始语句中的右列?不应该是“选择”吗* 来自username=”或其他用户?(正如tveitan所说)
  • $ban是一个数组。你需要 $ban['ban']来获取ban列。(正如阿尼穆森所说)
  • 比较==不=(如亚当所说)
  • 其中,
    禁止的
    $ban['banked']
    )是带有“y”或“n”的字段。 但是检查mysql注入尝试的
    $\u POST['username']
    。看

    其中,
    禁止的
    $ban['banked']
    )是带有“y”或“n”的字段。
    但是检查mysql注入尝试的
    $\u POST['username']
    。请参见

    重述和展开,SQL WHERE子句中的赋值/比较和错误列是任何人在不同时间都会犯的错误。不过,代码片段仍然不完整

    声明该函数返回一个数组,该数组包含数据库内部指针所在的行,而不仅仅是一个值

    我会这样做

    $username = do_some_injection_checking_or_escaping($_POST['username']);
    $bancheck = mysql_query("SELECT * FROM users WHERE username = '".$username."' AND ban='y';") or die(mysql_error());
    
    if(mysql_num_rows($bancheck) == 1) {
        die('You are banned...');
    }
    

    如果您只需要检查某些内容是否存在一定次数,而不需要数据,那么这是一个很好的方法。

    要概括和展开,SQL WHERE子句中的赋值/比较和错误列是任何人都会在不同时间犯的错误。不过,代码片段仍然不完整

    声明该函数返回一个数组,该数组包含数据库内部指针所在的行,而不仅仅是一个值

    我会这样做

    $username = do_some_injection_checking_or_escaping($_POST['username']);
    $bancheck = mysql_query("SELECT * FROM users WHERE username = '".$username."' AND ban='y';") or die(mysql_error());
    
    if(mysql_num_rows($bancheck) == 1) {
        die('You are banned...');
    }
    

    如果你只需要检查某个东西有多少次,而你不需要数据,那么这是一个很好的方法。

    哈哈,这是一个链接的机会!另外,
    $ban
    何时会等于
    y
    $ban
    似乎是一个数组…我是答案的补充,您确定要对照用户名检查
    ban
    列,而不是
    y
    ?如果($ban='y'){{,则此行是错误的