0

私はまだPHPの初心者なので、これが簡単なものであれば申し訳ありません。

PHP と mySQL を使用して、Web サイトのかなり基本的な検索機能を作成しています。データベースに接続し、データベースを選択し、テーブルをクエリして、テーブルの列をフェッチしました。

$k = htmlspecialchars($_GET['k']); // Get search query

$select = mssql_query("SELECT * FROM search WHERE Title Like '%" . $k . "%'");

if( mssql_num_rows($select) < 1) {

$noResults = 'No results found for <b>' . $k . '</b>, <label for="k">Please try again.</label>';

} else {

while ($results = mssql_fetch_array($select)) {

    $title = $results['Title'];
    $link = $results['Link'];
    $description = $results['Description'];

}

}

$results[''] 列を変数に入れてから、各変数を次のようにエコーアウトしようとすると;

             if( isset($noResults)) {

                echo $noResults;

            } else { 

                echo '<li>' . '<h2>' . '<a href="' . $link . '" title="' . $title . '">' . $title . '</a>' . '</h2>' . '<p>' . $link . '</p>' . '<p>' . $description . '</p>' . '</li>'; 

             }

ただし、そのクエリに一致する1行のみがエコーされますが、そのように列を単純にエコーアウトする場合は、

    echo $results['Title'];
    echo $results['Link'];
    echo $results['Description'];

クエリに一致するすべての行が表示されます。

なぜこれが起こっているのかわかりません。誰かが私を助けることができれば、それは素晴らしいことです!

4

3 に答える 3

2

出力をwhile ループで実行しますか?

while ループを実行し、その後 echo を呼び出すと、各結果セットは前の結果セットを上書きし、echo はフェッチされた最後の結果セットを出力します。

ループでエコーを呼び出すとすべての結果セットが「独自の」出力行を生成します。

すべての結果セットを変数に保持したい場合は、配列を使用できます。これは、ループの前で宣言され、ループで埋められます。

于 2013-01-24T11:07:41.847 に答える
2

ループを使用する必要があります。

$k = mysql_real_escape_string($_GET['k']); // Get search query

$select = mssql_query("SELECT * FROM search WHERE Title Like '%" . $k . "%'");

if( mssql_num_rows($select) < 1) {

    $noResults = 'No results found for <b>' . $k . '</b>, <label for="k">Please try again.</label>';

} else {
    $results= array();
    while ($result = mssql_fetch_array($select)) {
        $results[]= $result;
    }

}

if( isset($noResults)) {

    echo $noResults;

} else { 
    echo "<ul>";
    foreach($results as $result){
        echo '<li>' . '<h2>' . '<a href="' . $result['link'] . '" title="' . $result['title'] . '">' . $result['title'] . '</a>' . '</h2>' . '<p>' . $result['link'] . '</p>' . '<p>' . $result['description'] . '</p>' . '</li>'; 
    }
    echo "</ul>";
}
于 2013-01-24T11:11:58.520 に答える
1

あなたの質問からはいくつかのことが明確ではありませんが、チェックしているので、ループの外で変数をエコーし​​ていると思いますisset($noResults)。これは、while の各ループで変数を新しい値で再割り当てしていることを意味します。したがって、最終的には変数に割り当てられた最後のものを取得します。配列を使用して値を保持するか、ループ内でエコーする必要があります。

于 2013-01-24T11:14:30.080 に答える