2012-04-19 13 views
1
$term = $_POST['term']; 

$sql = mysql_query("SELECT * FROM tblCocktail WHERE Ingredients LIKE '%$term%'"); 

これは、テキスト入力ボックスから値を取得してデータベースを検索するために使用しているコードの一部です。しかし、私は%の代わりにそのように変更したい$ term%それは複数の選択された用語を検索する能力のために、配列をループします。検索スクリプトをテキスト入力値ではなく配列にループさせる

すべてのヘルプは

-Matt

答えて

0

高く評価されますが、配列をループすることにより、検索式を構築することができます。

$search = ''; 
foreach ($_POST['term'] as $term) { 
    $search .= " OR '$term'"; 
} 
$search = preg_replace('/^ OR/', '', $search); // remove first OR 

// Ingredients LIKE $search 

しかし、SQLインジェクションを避けるために、次のような式を用意するのではなく、準備済みの文を使用するようにしてください。

希望に役立ちます。

+0

完璧に、ありがとう。 – MattHeywood

0

これを最も効果的に実行するには、MySQL's MATCHの機能を確認してください。 、

SELECT * FROM tblCocktail WHERE MATCH (Ingredients) AGAINST ('%$Term1%', '%$Term2$'); 
0

代わりの複雑なロジックとクエリの建物を追加するテーブルにFULLTEXT属性を追加し、フルテキスト検索を実行します。あなたは、列にフルテキストインデックスを入れて、その後、あなたのような洗練された検索を使用することができますお勧めしますそれのために:

CREATE TABLE `tblCocktail` (
`id`   INT NOT NULL AUTO_INCREMENT, 
`Ingredients` VARCHAR(255) 
    ... 
PRIMARY KEY (`id`)), 
FULLTEXT(`Ingredients`) 
ENGINE = MyISAM; 

... 

$terms = implode($term_array); // todo: protect against injection here too 
$query = "SELECT * 
      FROM `tblCocktail` 
      WHERE MATCH(`Ingredients`) AGAINST ('$terms')"; 
関連する問題