0

検索ページを開くと、

(1) すべての結果がすぐに表示されます (データベース内のすべてのエントリ)。

(2)空の入力で検索ボタンをクリックすると、データベース内のすべてのエントリも表示されます。

これを解決するにはどうすればよいですか? どんな助けでも大歓迎です。

<form action="search.php" method="get">


<input type="text" name="k" size="50" value="<?php echo $_GET['k']; ?>"/>

<input type="submit" value="search" />


</form>
<hr color="white">

<?php

$k = $_GET['k'];
$terms = explode(" ", $k);

$query = "SELECT * FROM table WHERE ";

foreach ($terms as $each) {
    $i++;

    if ($i == 1)
        $query .= "keywords LIKE '%$each%' ";
    else
        $query .= "OR keywords LIKE '%$each%' ";
}

//connect
mysql_connect("localhost", "abc", "pass");
mysql_select_db("mydb");


$query = mysql_query($query);
$numrows = mysql_num_rows($query);
if ($numrows > 0) {

    while ($row = mysql_fetch_assoc($query)) {
        $id = $row['id'];
        $title = $row['title'];
        $link = $row['link'];
        $picture = $row['picture'];
        $keywords = $row['keywords'];
        $date = $row['date'];


    echo $row['title'];

    }

}
else
    echo "No results found for \"<b>$k</b>\"";

//disconnect
mysql_close();



?>
4

2 に答える 2

0

ここでいくつかの必須の定型文に答えます:

  1. セキュリティ上の問題があります。クエリに入れる入力は常にサニタイズする必要があります。SQL インジェクションを見てみましょう
  2. mysql_* はPHP 5.5で非推奨になりました。代わりにmysqli_*を使用してください

そして今、問題は...

あなたはいつも

"keywords LIKE '%%' ";

句をクエリに追加します。なんで?ページの最初の呼び出しは、k という名前の GET パラメータがないことを意味します。そして、この行:

$terms = explode(" ", $k);

空の文字列リテラルを 1 つ含む、長さ 1 の配列を返します...

また、検索条件として空の文字列を指定すると、結果は同じです...

于 2013-09-27T19:01:55.963 に答える