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 に答える