jquery php живой поиск - PullRequest
       19

jquery php живой поиск

0 голосов
/ 21 марта 2011

я получил живой поиск с помощью ajax и php

JQUERY:

$("#search").keyup(function()   {
   var search_input = $(this).val();
   var dataString = 'keyword='+ search_input;
      if(search_input.length>1){
    $.ajax({
      type: "GET",
      url: "include/search.php?diary_date",
      data: dataString,
      beforeSend:  function() {
             $('#loading').addClass('loading');
          }, success: function(server_response) {                 
               $('#searchresultdata').html(server_response).show();
           $('span#faq_category_title').html(search_input);
    }
});
}return false;
});

PHP:

$q = "SELECT id_user, f_name, l_name, postcode, email,telp FROM user 
WHERE f_name LIKE '%$keyword%' 
OR l_name LIKE '%$keyword%'
OR email LIKE '%$keyword%'
OR postcode LIKE '%$keyword%'";

Я хочу получить результат поиска, поиск по первой букве, а не по средней или последней, например:
Ключевое слово = JO
Результат, который я хочу =
* ДЖОН БЕКС
* Джонатан Вилко * Кэти Джоанс

на мгновение система подхватывает не только первые, но и средние и последние слова
* TONY NESJO
* BAJOZ ZACKS

Ответы [ 2 ]

4 голосов
/ 21 марта 2011

Просто удалите первые % из каждой из LIKE строк.

$q = "SELECT id_user, f_name, l_name, postcode, email,telp FROM user 
WHERE f_name LIKE '$keyword%' 
OR l_name LIKE '$keyword%'
OR email LIKE '$keyword%'
OR postcode LIKE '$keyword%'";

Тем не менее, вы должны действительно , действительно исследовать, используяPDO или аналогичный и отправка связанного запроса, где каждый параметр должным образом экранируется для предотвращения атак внедрения SQL.

Если вы сделаете это, SQL станет немного сложнее, потому что вы не можете связать параметр внутристрока, поэтому добавление % должно быть сделано в виде конкатенации SQL:

$q = "SELECT id_user, f_name, l_name, postcode, email,telp FROM user 
WHERE f_name LIKE CONCAT(?, '%')
OR l_name LIKE CONCAT(?, '%')
OR email LIKE CONCAT(?, '%')
OR postcode LIKE CONCAT(?, '%')";

(затем создайте подготовленный дескриптор оператора и выполните его с соответствующими параметрами - вы найдете множество других примеров.где на Stackoverflow).

1 голос
/ 21 марта 2011

Вы можете использовать оператор REGEXP следующим образом:

$q = "SELECT id_user, f_name, l_name, postcode, email,telp FROM user 
WHERE f_name REGEXP '^$keyword' 
OR l_name REGEXP '^$keyword'
OR email REGEXP '^$keyword'
OR postcode REGEXP '^$keyword'";
...