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;
}

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.

$GLOBALS['userpermbit'] is either not set or not an array. you'll need to check where it has been initialized, or whats is going wrong with it. Try to give us more context.

Change your code on 69 line to this: & do same on 89

$GLOBALS['userpermbit'] : this might be blank & not being cosidered as array by foreach.

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

foreach($u_per_arr as $v)

The error says, that wrong type of variable has been passed to foreach() construct. The error occured in line 89.

The foreach() construct expects first argument to be an array. Your $userpermbit variable, used in line 89 as argument of foreach() construct seems not to be an array type.

Search your code for any occurrences of $userpermbit and find out where it is set. Correct it to set $userpermbit as an array.