2012-04-15 8 views
1

PHPファイルでforeachエラーが発生しましたが、修正方法がわかりません。誰にもアイデアはありますか?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をし、以下のように私の/class/global_functions.phpの89は次のとおりです。

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の場合にのみ有効です。

あなたが何か他のものを提供する場合、あなたが表示されるエラーを参照してください。あなたはforeachに渡す変数はarrayobjectのいずれかであることを確認し、そのエラー停止を行うには

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

を。

彼らはそれが通常の配列になりたいが、何もcauz人生の短すぎるをチェックするのが面倒であれば、それをこのように対処coderz悪PHP:あなたはとにかく$GLOBALSを使用しているため

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

は、私は非常に、それをお勧めしますこれは、あなたがPHPの邪悪なレベルでレベルアップしたいと考えさせてくれます。

+0

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

+0

@Logan:あなたはあなたのハードディスクにもっとコードを持っていませんか? – hakre

+0

申し訳ありません、/class/global_functions.phpコード – Logan

1

$GLOBALS['userpermbit']が設定されていないかのどちらかであります配列。どこが初期化されているのか、何が問題になっているのかを確認する必要があります。もっと文脈を与えてください。

+0

#パーマネントの値を得るためにsqlクエリを設定する(ユーザーグループがない場合(つまり、ゲスト)グループを0に設定した場合) \t if(空白($ GLOBALS ['user'] [0] ['permgroup'] )) \t \t $ usergroup = '0'; \t else \t \t $ usergroup =&$ GLOBALS ['user'] [0] ['permgroup']; \tユーザーグループのアクセス許可の値を選択してください。 \t $ db-> select( "タイトル"、 "perm' FROM' permtable' WHERE 'id' IN({$ usergroup}) '、$ GLOBALS [' userpermbit ']); \t $ db-> kill(); – Logan

2
これに69行のコードを変更

:これはforeachので配列として&空白cosideredされていない可能性があります:&は89

$ GLOBALS [ 'userpermbit']で同じことを行います。

$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を配列として設定してください。