0

ajax と php を使ってライブ検索ができるようになりました

Jクエリ:

$("#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
検索結果 =
* JOHN BECKS
* JONATHAN WILKO * KATY JOANS

しばらくの間、システムは最初の単語だけでなく、途中の単語や最後の単語もピックアップします
* TONY NESJO
* BAJOZ ZACKS

4

2 に答える 2

4

%各文字列から最初のものを削除するだけ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 の他の場所で多くの例を見つけることができます)。

于 2011-03-20T21:33:38.200 に答える
1

次のように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'";
于 2011-03-20T21:48:27.980 に答える