1

我在我的 PHP 文件中收到以下 foreach 错误,我不知道如何修复它。有没有人有任何想法?

当我加载页面时,我得到了这个:

Warning: Invalid argument supplied for foreach() in /home/mysite/public_html/merge/class/global_functions.php on line 61

Warning: Invalid argument supplied for foreach() in /home/mysite/public_html/merge/class/global_functions.php on line 89

我的 /class/global_functions.php 的第 61 和 89 行如下:

Here is my code from line 61 to line 98:

    foreach($GLOBALS['userpermbit'] as $v)
    {
        if(strstr($v['perm'],'|'.$pageperm_id[0]['id'].'|'))
            return true;
    }

    //if they dont have perms and we're not externally including functions return false
    if ($GLOBALS['external'] != true) return false; return true;

}

//FUNCTION: quick perm check using perm info from the onload perm check 
function stealthPermCheck($req)
{
    #if theyre an admin give them perms
    if(@in_array($GLOBALS['user'][0]['id'], $GLOBALS['superAdmins']))
            return true;    

    if(!is_numeric($req))
    {
        #if the req is numeric we need to match a title, not a permid. So try to do that
        foreach($GLOBALS['userpermbit'] as $v)
        {
            if(stristr($v['title'],$req))
                return true;
        }
    }else{
        #check if they have perms numerically if so return true
        foreach($GLOBALS['userpermbit'] as $v)
        {
            if(strstr($v['perm'],'|'.$req.'|'))
                return true;
        }
    }

    #if none of this returned true they dont have perms, return false
    return false;
}
4

4 回答 4

4

foreach仅当变量为 anarray或 an时才有效object

如果您提供其他内容,则会看到您看到的错误:

Warning: Invalid argument supplied for foreach() in ...

要停止该错误,请确保您传递给的变量foreach是 anarray或 an object

邪恶的 php coderz 以这种方式处理它,如果他们希望它通常是一个数组但因为生命太短而懒得检查任何东西:

foreach ((array) @$prunzels as $do_not_care)
{
}

我强烈推荐它,因为$GLOBALS无论如何你都在使用,这让我相信你想要升级 PHP 邪恶。

于 2012-04-15T17:40:22.763 回答
2

将第 69 行的代码更改为:& 在 89 上执行相同操作

$GLOBALS['userpermbit'] :这可能是空白的,并且不会被 foreach 视为数组。

$u_per_arr = $GLOBALS['userpermbit'];
if(!is_array($u_per_arr)) {
 $u_per_arr = array();
}

foreach($u_per_arr as $v)
于 2012-04-15T17:30:00.157 回答
1

$GLOBALS['userpermbit']未设置或不是数组。您需要检查它的初始化位置,或者它出了什么问题。试着给我们更多的背景。

于 2012-04-15T17:26:39.113 回答
0

错误说,错误类型的变量已传递给foreach()构造。错误发生在第 89 行。

foreach()构造期望第一个参数是一个数组。您$userpermbit在第 89 行用作foreach()构造参数的变量似乎不是数组类型。

在您的代码中搜索任何出现$userpermbit并找出它的设置位置。更正它以设置$userpermbit为数组。

于 2012-04-15T17:39:21.277 回答