-1

IE を使用しているときにこの警告が表示されるのはなぜですか?

Warning: Invalid argument supplied for foreach() 

他のすべてのブラウザで動作します..

ループの関数:

function wdsearch(PDO $dbh){
    if(!isset($_POST['wdsubmit'])) {
    } else {
        $term = $_POST['wdsearchvalue'];
        $stmt = $dbh->prepare("
            SELECT      *
            FROM        posts
            WHERE       category = :designer
            AND         (full_text LIKE CONCAT('%', :term, '%')
            OR          heading LIKE CONCAT('%', :term, '%'))
            ORDER BY    post_date DESC
        ");
        $designer = 'Designer';
        $stmt->bindParam(":designer", $designer);
        $stmt->bindParam(":term", $term);
        $stmt->execute();
        return $stmt->fetchAll();
    }
}
wdsearch($dbh);
$wdsearch = wdsearch($dbh);

そして、ループはここに行きます..

<?php foreach($wdsearch as $wds) : ?>
<!-- HTML here -->
<?php endforeach; ?>

IE 関連の警告はありますか? 私が言ったように、他のすべてのブラウザはそれを処理できます..

4

3 に答える 3

2

問題はあなたのwdsearch機能にあります。が設定されていない場合$_POST['wdsubmit']は何も返されず、db 操作のいずれかで問題が発生した場合も配列は返されません。

データベース操作にいくつかのエラー処理を追加する必要があります。失敗または非通知の場合は、空の配列返すか、使用する前に が配列かどうを確認してください。$wdsearchforeach

于 2012-08-22T16:13:13.563 に答える
1

指定されたエラーは、特定のブラウザーではなく、PHP コードで発生しています。

問題は、 のデータ型が を$wdsearch実装していないことiteratorです。これは、文字列/数値などであることが原因で$wdsearchある可能性があります。null- または単にサポートされていないオブジェクト。

foreachでループに入る前にデータが配列is_array($wdsearch)かどうかを確認するか、 で変数が null でないことを確認してisset($wdsearch)ください。そこに有効なデータがあると思われる場合は、オブジェクトが$wdsearch実際に反復子をサポートしているかどうかを確認し、そうでない場合は更新して実装してください。

例:

<?php
if (isset($wdsearch)):
    foreach($wdsearch as $wds) :
        ?>
        <!-- HTML here -->
        <?php
    endforeach;
endif;
?>
于 2012-08-22T16:14:32.733 に答える
0

同じパラメータの場合、Chrome と FF では機能しますが、IE では機能しません。

IEで提出しているのは正確には何ですか。写真を送信するボタンのようなばかげたものはありますか? たとえば、実際の値ではなく、クリックの場所として条件を渡します。

foreach に出力する前に、$POST の受信パラメーターをデバッグします。また、null の結果セットをどのように処理しますか?

于 2012-08-22T17:02:13.950 に答える