为什么在使用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相关警告?就像我说的所有其他浏览器都可以处理它..
答案 0 :(得分:2)
问题在于您的wdsearch
功能;如果未设置$_POST['wdsubmit']
,则不返回任何内容,如果在任何数据库操作中出现任何问题,它也不会返回数组。
您需要为数据库操作添加一些错误处理,如果发生故障或非发布,请返回空数组和 / 或检查{{ 1}}是使用$wdsearch
之前的数组。
答案 1 :(得分: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;
?>
答案 2 :(得分:0)
如果相同的参数适用于Chrome和FF,但不适用于IE。
您在IE中提交的是什么?是否有一些愚蠢的事情,如图片提交按钮?这会将您的条款作为点击的位置传递,而不是实际值。
在输出到foreach之前调试$ POST中的传入参数。另外你如何处理空结果集?