2012-04-15 16 views
1

Ich erhalte den folgenden foreach Fehler auf meiner PHP-Datei und ich habe keine Ahnung, wie Sie es beheben. Hat jemand irgendwelche Ideen?Foreach PHP Fehler

Wenn ich die Seite laden erhalte ich diese:

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 

Zeile 61 und 89 meiner /class/global_functions.php sind wie folgt:

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 Fehler ist genug! – worenga

Antwort

4

foreach funktioniert nur, wenn die Variable entweder array oder object ist.

Wenn Sie etwas anderes bieten Sie sehen die Fehler, den Sie sehen:

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

Um diese Fehlerstopp zu machen, stellen Sie sicher, dass die Variable, die Sie foreach passieren entweder ein array oder object.

Böse php coderz mit ihm auf diese Weise zu bewältigen, wenn sie es in der Regel wollen ein Array sein, sind aber zu faul, etwas cauz Leben ist zu kurz, um zu überprüfen:

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

Ich kann es sehr empfehlen, da Sie $GLOBALS sowieso verwenden Das lässt mich glauben, dass Sie in PHP-Bosheit aufsteigen wollen.

+0

/class/global_functions.PHP ist: http://pastebin.com/BPdpAr1S – Logan

+0

@Logan: Was, Sie haben nicht mehr Code auf Ihrer Festplatte? – hakre

+0

Entschuldigung, das ist der /class/global_functions.php Code – Logan

1

$GLOBALS['userpermbit'] entweder nicht eingestellt oder nicht eine Anordnung. Sie müssen überprüfen, wo es initialisiert wurde, oder was damit falsch läuft. Versuchen Sie uns mehr Kontext zu geben.

+0

#eine SQL-Abfrage einrichten, um ihre Dauerwerte zu erhalten (wenn sie keine Benutzergruppe haben (dh ein Gast), setzen Sie die Gruppe auf 0) \t if (leer ($ GLOBALS ['user'] [0] ['permgroup'])) \t \t $ usergroup = '0'; \t sonst \t \t $ usergroup = & $ GLOBALS ['Benutzer'] [0] ['permgroup']; \t #select usergroup permissions Wert \t $ db-> select ("' title', 'perm' VON' permtable' WO 'id' IN ({$ usergroup})", $ GLOBALS ['userpermbit']); \t $ db-> kill(); – Logan

2

Code ändern auf 69 Zeile dazu: & gleiche tun auf 89

$ GLOBALS [ 'userpermbit']: dies nicht durch foreach leer sein könnte & cosidered als Array wird.

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

foreach($u_per_arr as $v) 
0

Der Fehler sagt, dass falsche Art von Variable zu foreach() Konstrukt bestanden. Der Fehler ist in Zeile 89 aufgetreten.

Das foreach() Konstrukt erwartet, dass das erste Argument ein Array ist. Ihre $userpermbit Variable, die in Zeile 89 als Argument von foreach() verwendet wird, scheint kein Array-Typ zu sein.

Suchen Sie Ihren Code für alle Vorkommen von $userpermbit und finden Sie heraus, wo es eingestellt ist. Korrigieren Sie es, um $userpermbit als ein Array festzulegen.