2016-02-16 4 views
1

Я попытался построить панель поиска ajax. Он отлично работает с одним ключевым словом, но мне не удается заставить его работать с двумя ключевыми словами ... Я думал о разборе данных в поле ввода, но мои знания ограничены, и мне не удалось найти решение , Любые идеи?Как построить панель поиска 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, название, описание, изображение ИЗ наряде ГДЕ типа LIKE '% $ вход%' ИЛИ ​​ цвет, как '% $ вход%' OR бренда LIKE '% $ вход%' OR материал LIKE '% $ 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

Предположим, что ваши ключевые слова сглажены 'Space' как "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%20parameterized https://xkcd.com/327/ – hlovdal

Смежные вопросы