0

私のウェブサイトには単純な検索ボックスがあり、現在のところ、特定の基準が満たされている場合にのみ結果が生成されます。

if(isset($_GET['action'])&&isset($_GET['searchbox'])) {
    if($_GET['searchbox']!='') {
        $result = mysql_query("SELECT * FROM `restaurants` WHERE `restaurant` LIKE '%{$_GET['searchbox']}%'");  // RESULT IS FIND EVERYTHING THAT MATCHES SEARCH FROM TABLE //
    } else {
        $result = mysql_query("SELECT * FROM `restaurants`");
    }
}

<form action="search.php" id="searchform" method="get" class="searchbox-container">
    <input type="text" id="searchbox" name="searchbox" class="searchbox" />
    <input type="submit" class="searchbox-btn" value="Search" />
    <input type="hidden" name="action" value="search" />

私が欲しいのは、検索ボックスがレストラン名などの特定のデータだけでなく、すべてのテーブルデータからデータベースから結果を返すことです。

また、誰かが「sto」を検索すると「stoke」などの結果が表示されるように機能させたいので、検索はデータベースにあるものとまったく同じである必要はありません。

コードが間違っているか古くなっている場合は申し訳ありませんが、これは少し古い大学のチュートリアルから取られました。

4

1 に答える 1

3

MySql を使用してデータベース内のすべてを検索する方法はありません。どのテーブルでどの列を検索するかを選択する必要があります。さまざまなクエリを使用してさまざまなデータを検索し、結果を PHP で結合するか、なんらかの JOIN を実行できます。気をつけないと、まったく効率の悪いものになってしまいます。

もう 1 つ注意してください - これはすでに部分的な単語と一致しているはずです - LIKE 句の検索語の前後の % は、「この位置の任意の文字」を意味します

レストランでさらに多くのフィールドを検索するには、次のように開始できます (たとえば、スローガンがある場合)。

$result = mysql_query("SELECT * FROM `restaurants` WHERE `restaurant` LIKE '%{$_GET['searchbox']}%' OR `slogan` LIKE '%{$_GET['searchbox']}%'");

ただし、ユーザー入力を SQL に直接注入するべきではありません。攻撃にさらされる可能性があります。

JOIN を使用して他のテーブルのフィールドをさらに検索するには、次のように開始できます (たとえば、食品テーブルがある場合)。

$result = mysql_query("SELECT `restaurants`.* FROM `restaurants` LEFT JOIN `food` ON `food`.`restaurant_id` = `restaurant`.`id` WHERE `restaurant` LIKE '%{$_GET['searchbox']}%' OR `food` LIKE '%{$_GET['searchbox']}%'");

私が今あなたに与えたものについて助けが必要な場合は、これらの2つのページを見ることができます:

http://dev.mysql.com/doc/refman/5.0/en/select.html

http://dev.mysql.com/doc/refman/5.0/en/join.html

于 2013-04-06T16:01:29.793 に答える