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.