2012-04-15 3 views
1

Я получаю следующую ошибку foreach в моем файле PHP, и я понятия не имею, как ее исправить. У кого-нибудь есть идеи?Foreach Ошибка PHP

Когда я загрузить страницу я получаю это:

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 

линии 61 и 89 моего /class/global_functions.php, как следует:

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

1 ошибка достаточно! – worenga

ответ

4

foreach работает только в том случае, если переменная является либо array, либо object.

Если вы предоставляете что-то еще вы видите ошибки вы видите:

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

Чтобы сделать эту остановку ошибки, убедитесь, что переменная вы передаете foreach является либо array или object.

Зло PHP coderz справиться с ним таким образом, если они хотят, как правило, быть массивом, но слишком ленив, чтобы проверить что-нибудь Cauz жизнь слишком коротка:

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

Я очень рекомендую его, потому что вы используете $GLOBALS все равно , что заставляет меня думать, что вы хотите повысить уровень злонамеренности PHP.

+0

/class/global_functions.php: http://pastebin.com/BPdpAr1S – Logan

+0

@Logan: Что, у вас больше нет кода на жестком диске? – hakre

+0

Извините, что это /class/global_functions.php code – Logan

1

$GLOBALS['userpermbit'] либо не установлен или нет массив. вам нужно будет проверить, где он был инициализирован, или что с ним происходит. Попытайтесь дать нам больше контекста.

+0

# задать запрос sql для получения их значений perm (если у них нет группы пользователей (т.е. theyre guest) для группы 0) \t if (empty ($ GLOBALS ['user'] [0] ['permgroup'])) \t \t $ USergroup = '0'; \t else \t \t $ usergroup = & $ GLOBALS ['user'] [0] ['permgroup']; \t # выберите значение допустимой группы пользователей \t $ db-> select ("' title', 'perm' FROM' permtable' WHERE 'id' IN ({$ usergroup})", $ GLOBALS ['userpermbit']); \t $ db-> kill(); – Logan

2

Изменить код на 69 линии к этому: & сделать то же самое на 89

$ GLOBALS [ «userpermbit»]: это может быть пустым & не cosidered как массив по Еогеасп.

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

foreach($u_per_arr as $v) 
0

Ошибка говорит, что неправильный тип переменной был передан foreach() конструкции. Ошибка произошла в строке 89.

Конструкция foreach() ожидает, что первым аргументом будет массив. Ваша переменная $userpermbit, используемая в строке 89 как аргумент конструкции foreach(), кажется, не является типом массива.

Ищите свой код для любых случаев $userpermbit и узнайте, где он установлен. Исправьте его, чтобы установить $userpermbit как массив.