为什么在使用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相关警告?就像我说的所有其他浏览器都可以处理它。
问题出在wdsearch
函数中;如果未设置$_POST['wdsubmit']
,它将不返回任何内容;如果任何db操作出现任何错误,它也不会返回数组。
您需要在数据库操作中添加一些错误处理,如果失败或未发布,请返回一个空数组和/或在使用foreach
之前检查$wdsearch
是否为数组。
指定的错误发生在PHP代码中,而不是任何特定的浏览器中。
问题是,$wdsearch
的数据类型没有实现iterator
。这可能是由于$wdsearch
是null
、字符串/数字等造成的或者仅仅是一个不支持的对象。
在使用is_array($wdsearch)
进入foreach
循环之前,请尝试验证数据是否为数组,或者使用isset($wdsearch)
验证变量是否为null。如果您认为那里有有效的数据,请检查$wdsearch
中的对象是否真的支持迭代器,如果不支持,请更新它以实现!
示例:
<?php
if (isset($wdsearch)):
foreach($wdsearch as $wds) :
?>
<!-- HTML here -->
<?php
endforeach;
endif;
?>
如果对于相同的参数,它可以在Chrome和FF中工作,但不能在IE中工作。
你在IE中到底提交了什么。有没有一些愚蠢的东西,比如一个带图片提交的按钮?这将传递您的条件作为单击的位置,而不是实际值。
在输出到foreach之前,调试$POST中的传入参数。另外,如何处理空结果集?