1

PHP ファイルで次の foreach エラーが表示されますが、修正方法がわかりません。誰にもアイデアはありますか?

ページをロードすると、次のようになります。

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

/class/global_functions.php の 61 行目と 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;
}
4

4 に答える 4

4

foreachは、変数がarrayまたは のいずれかである場合にのみ機能しますobject

何か他のものを指定すると、次のエラーが表示されます。

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

そのエラーを止めるにforeachは、渡す変数が か のいずれかであるarrayことを確認してくださいobject

邪悪な php coderz は、通常は配列にしたいが、人生が短すぎるために何かをチェックするのが面倒な場合、この方法で対処します。

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

$GLOBALSとにかく使用するので、PHP の邪悪さをレベルアップしたいと思わせるので、強くお勧めします。

于 2012-04-15T17:40:22.763 に答える
2

69 行のコードを次のように変更します: & 89 で同じことを行います

$GLOBALS['userpermbit'] : これは空白であり、foreach によって配列として考慮されていない可能性があります。

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

foreach($u_per_arr as $v)
于 2012-04-15T17:30:00.157 に答える
1

$GLOBALS['userpermbit']が設定されていないか、配列ではありません。初期化された場所、または何が問題なのかを確認する必要があります。より多くのコンテキストを提供してください。

于 2012-04-15T17:26:39.113 に答える
0

エラーは、間違ったタイプの変数がforeach()コンストラクトに渡されたことを示しています。89行目でエラーが発生しました。

foreach()コンストラクトは、最初の引数が配列であることを想定しています。コンストラクト$userpermbitの引数として89行目で使用されている変数はforeach()、配列型ではないようです。

の出現箇所をコードで検索$userpermbitし、設定されている場所を見つけます。$userpermbit配列として設定するように修正してください。

于 2012-04-15T17:39:21.277 に答える