0

下面是一个非常基本的搜索功能的脚本。

它工作得很好,从某种意义上说,结果确实会在应该的时候被获取,但问题是当查询应该返回零结果时,<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
        }
}
?>

我在这里想念什么?

4

3 回答 3

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
}
于 2013-10-05T01:58:06.697 回答
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>';
}

或者,由于非空数组是“真实的”:

<?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>';
}
于 2013-10-05T01:58:28.550 回答
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 块并且更容易阅读。

于 2013-10-05T01:59:41.177 回答