-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 操作中出现任何问题,它也不会返回数组。

您需要为您的数据库操作添加一些错误处理,并且在失败或非发布的情况下,返回一个空数组/在使用之前检查是否$wdsearch是一个数组foreach

于 2012-08-22T16:13:13.563 回答
1

指定的错误发生在您的 PHP 代码中,而不是任何特定的浏览器中。

问题是, 的数据类型$wdsearch没有实现iterator. 这可能是由$wdsearch存在null、字符串/数字/等引起的。- 或者只是一个不支持的对象。

在进入foreach循环之前尝试验证数据是否为数组is_array($wdsearch),或者使用 验证变量不为空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 中的传入参数。另外你如何处理空结果集?

于 2012-08-22T17:02:13.950 回答