2012-04-21 9 views
0

PHP Warning: Invalid argument supplied for foreach() in /home/synergie/public_html/ss/libraries/joomla/database/database/mysql.php on line 377は、私はそれが私のJoomlaのウェブサイトの前面と背面の両方に断続が、頻繁に来て、ウェブサイトの前面に報告されているから「foreachのために供給無効な引数は()」

を終了する方法を停止することができます。私はこの分野の専門家ではないが、私は助けを求めるすべての人の範囲外であるようだ。私はエラーが発生するのを止めることができないので、私はあなたが私にそれを無効にするか、または報告からブロックするのを助けてくれることを望んでいました。

これは私が扱っていたコードです:たぶん

// If we want the whole field data object add that to the list. 
      //else 
      { 
       foreach ($fields as $field) 
       { 
        $result[$field->Field] = $field; 
       } 
      } 

      return $result; 
+6

無効な引数の供給を停止します。 –

+2

これは素晴らしいアドバイスです。 – titus1972

+0

@ titus1972実際はすばらしいアドバイスです。 PHPを設計する際には、エラーを修正し、非表示にする必要があります。 –

答えて

2

のtry catchブロック?

あなたがこの機能にエラー報告をオフにすることができます
try { 
    foreach($array as $v) { 
     // do dtuff 
    } 
} catch(Exception $e) { 
    echo 'Caught exception'; 
} 
+1

try/catchは、['ErrorException'](http://php.net/ErrorException)で簡単に例外に変換できない限り、そのような警告に対しては機能しません。 – hakre

1

error_reporting(0); 
+0

エラーを修正するよりも、それが存在しないふりをするよりも –

1

これは、本番環境で、あなたは、単にこのような警告メッセージを無効にしたい場合は(私はこれがそのコードであることを仮定していますあなたがJoomlaに言及してから書きませんでした)、php.iniファイルでエラー報告を無効にしてみてください。

変更:

display_errors On 

これは開発環境である場合は、おそらく上のエラー報告を残して、すべての警告を修正する必要があることを注意

display_errors Off 

へ。

4

オブジェクトではなく配列をループしていますか?ちょうどに変更することを検討し、確かに:

foreach((array)$fields as $field) 
{ 
    $result[$field->Field] = $field; 
} 
+0

私はタイプキャスティングがうまくいくとは思いませんでした。 –

2

代わりのエラーを隠し、あなたがforeach()に何かTraversableを渡していることを確認する必要があります。あなたが@NullUserException's is_iterable()であることを行うことができます。

function is_iterable($var) { 
    return (is_array($var) || $var instanceof Traversable); 
} 

if(is_iterable($fields)) { 
    foreach($fields as $field) { 
     // Processing $field here 
    } 
} else { 
    echo "Fields is not iterable"; 
} 
+0

is_array()はおそらく最も簡単なチェック方法ですが、これは確かに網羅的です – Ross

0

を私は間違いなく構文を選ぶだろう:

if(is_array($fields)){ 
    foreach($fields as $field){ 
     //do stuff 
    } 
} 

は素晴らしく、魅力的な短縮形を使用して注意してください:

foreach((array)$fields as $field) 

$フィールドが含まれている場合複雑なデータ構造(単純な配列ではない)を使用すると、キャストによってコンテンツが危険にさらされる可能性があります。

関連する問題