2016-02-16 63 views
1

我試圖建立一個Ajax搜索欄。它使用單個關鍵字正常工作,但我無法設法使它與2個關鍵字一起工作... 我在考慮解析輸入字段中的數據,但我的知識是有限的,我沒有設法找到解決方案。 任何想法?如何構建一個包含多個關鍵字的Ajax搜索欄?

在我main.js我從輸入數據是這樣的:

var kwVal = $(this).val(); 
if (kwVal.length < 3){ 
    $(".clothes-container").html(""); 
} 
else { 

    $.ajax({ 
     "url": "ajax/getclothes.php", 
     "type": "GET", 
     "data": { 
      "kw": kwVal 
     } 
    }) 

這是我的SQL請求

$sql = "SELECT title, description, picture 
    FROM outfit 
    WHERE type LIKE :keyword OR 
      color LIKE :keyword OR 
      brand LIKE :keyword OR 
      material LIKE :keyword"; 

非常感謝。

+0

您應該怎樣處理系統更多關鍵字?它是否應該找到包含所有單詞或只包含單個單詞的項目? –

+0

如何'$ SQL =「SELECT標題,描述,圖片 FROM裝備 WHERE型LIKE '%$輸入%' OR 顏色LIKE '%$輸入%' OR 品牌LIKE '%$輸入%' OR 材料喜歡'%$ input%'「;' – Rayon

回答

0

是這樣的嗎?當然,所有的SQL文本和字符串都必須正確轉義(特別是$keyword)。

// keywords extracted from user's input 
$keywords = array('blue', 'jeans'); 

// columns, that You want to match against 
$columns = array('type', 'color', 'brand', 'material'); 

// we build the condition for each keyword 
$word_conditions = array(); 
foreach ($keywords as $keyword) { 

    $conditions = array(); 
    foreach ($columns as $column) 
     $conditions[] = $column.' LIKE \'%'.$keyword.'%\''; 

    $word_conditions[] = '('.implode(' OR ', $conditions).')'; 
} 

// we build the query, that requires every item to have all the keywords 
$query = 'SELECT * FROM ... WHERE '.implode(' AND ', $word_conditions); 
+0

謝謝,但我仍然沒有設法使其工作...它沒有考慮到第二個關鍵字...如果我搜索黑色禮服它將輸出的一切是黑色......也許我的數據庫有一個錯誤,但我只是創建了一個簡單的數據庫,每列在同一個表上。所以......我會繼續嘗試。 – cassandra

+0

您會粘貼它爲「黑色」,「禮服」生成的最終SQL查詢嗎? –

0

假設您的關鍵字由「ABC DEF GEH」之類的「空間」來操縱。

比你能做的就是服務器,

$keywords = explode(" ", $_POST['data']); //Make it array; 
$string = implode(",", $keywords); 

$sql = "SELECT title, description, picture 
    FROM outfit 
    WHERE type in (".$string.") OR 
      color in (".$string.") OR 
      brand in (".$string.") OR 
      material in (".$string.")"; 
+0

這看起來很危險。 http://stackoverflow.com/search?tab=votes&q=javascript%20sql%20injection%20參數化https://xkcd.com/327/ – hlovdal