doushouj966020 2012-04-15 17:23
浏览 39
已采纳

Foreach PHP错误

I am receiving the following foreach error on my PHP file and I have no idea how to fix it. Does anyone have any ideas?

When I load the page I get this:

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

Line 61 and 89 of my /class/global_functions.php are as followed:

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条回答 默认 最新

  • doulechou0700 2012-04-15 17:40
    关注

    foreach works only if the variable is either an array or an object.

    If you provide something else you see the error you see:

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

    To make that error stop, ensure that the variable you pass to foreach is either an array or an object.

    Evil php coderz cope with it this way if they want it normally to be an array but are too lazy to check anything cauz life's too short:

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

    I highly recommend it, because you use $GLOBALS anyway, which makes me believe you want to level up in PHP evilness.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?