仅在Internet Explorer中为foreach提供的参数无效

时间:2012-08-22 16:03:42

标签: php internet-explorer foreach warnings

为什么在使用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相关警告?就像我说的所有其他浏览器都可以处理它..

3 个答案:

答案 0 :(得分:2)

问题在于您的wdsearch功能;如果未设置$_POST['wdsubmit'],则不返回任何内容,如果在任何数据库操作中出现任何问题,它也不会返回数组。

您需要为数据库操作添加一些错误处理,如果发生故障或非发布,请返回空数组 / 检查{{ 1}}是使用$wdsearch之前的数组。

答案 1 :(得分:1)

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

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

尝试在使用foreach进入is_array($wdsearch)循环之前验证数据是否为数组,或使用isset($wdsearch)验证变量是否为空。如果您认为那里有有效数据,请检查$wdsearch中的对象是否实际支持迭代器,如果没有,请更新它以实现!

示例:

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

答案 2 :(得分:0)

如果相同的参数适用于Chrome和FF,但不适用于IE。

您在IE中提交的是什么?是否有一些愚蠢的事情,如图片提交按钮?这会将您的条款作为点击的位置传递,而不是实际值。

在输出到foreach之前调试$ POST中的传入参数。另外你如何处理空结果集?