Warning: Invalid argument supplied for foreach() とでたら。。。

原因としては、主に2つが考えられます。  
1.配列データがnullの時  
2.渡した変数が配列でなかった時

// 1,2への対処法、一度に2つ調べてくれるので便利です!
if (! is_array($hoge)) {
 foreach($hoge as ....)
}

以上のコードを追加してあげれば大丈夫そうです。

追記   foreachに渡す変数が配列でないときは、以下の処理をしてあげれば変数を配列に直してくれるそうです。

foreach((array)$hoge as .....)