以下是一个非常基本的搜索功能的脚本。
它运行良好,从某种意义上说,只要应该得到结果,但问题是当查询返回零结果时,<div id="bar">No results!</div>
不显示。相反,页面是空白的。
$search_query = $_GET['search'];
$search_query = htmlentities($search_query);
$word = "%$search_query%";
$search=$sth->con->prepare("SELECT id, firstname, lastname FROM users WHERE
firstname LIKE ? OR
lastname LIKE ?");
$search->bindValue(1, $word, PDO::PARAM_STR);
$search->bindValue(2, $word, PDO::PARAM_STR);
$search->execute();
$results = $search->fetchAll();
foreach ($results as $row) {
$firstname = $row["firstname"];
$lastname = $row["lastname"];
if (!(count($results) == 0)) {
?>
<div id="foo">Here are your results</div>
<?php
} else {
<div id="bar">No results!</div>
<?php
}
}
?>
我在这里缺少什么?
答案 0 :(得分:2)
如果没有结果,foreach
将永远不会进入正文。您需要将if
放在foreach
:
if (count($results) != 0) {
?> <div id="foo">Here are your results</div>
<?php
foreach ($results as $row) {
...
}
} else {
?> <div id="bar"> No results!</div>
<?php
}
答案 1 :(得分:2)
您的count
位置错误。如果没有结果,则foreach
循环内容永远不会触发。
你想要这样的东西:
<?php
if (count($results)) {
echo '<div id="foo">Here are the results</div>';
foreach ($results as $row) {
// do stuff with row
}
} else {
echo '<div id="bar">No Results!</div>';
}
或者,因为非空数组是“truthy”:
<?php
if ($results) {
echo '<div id="foo">Here are the results</div>';
foreach ($results as $row) {
// do stuff with row
}
} else {
echo '<div id="bar">No Results!</div>';
}
答案 2 :(得分:2)
将foreach
循环放在第一个if
块中。如果没有返回任何行,则foreach
无需迭代。
if (count($results))
{
foreach ($results as $row)
{
$firstname = $row["firstname"];
$lastname = $row["lastname"];
echo '<div id="foo">Here are your results</div>';
}
}
else
{
echo '<div id="bar">No results!</div>';
}
修改强> 我略微修改了你的代码,因此它不会进出php块而且更容易阅读。