Question

ive recherche en direct de travail a avec ajax et 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%'";

Je veux que le résultat de la recherche, la recherche de la première lettre non pas du milieu ou dernière par exemple:
keyword = JO
Résultat je veux =
* JOHN BECKS
* JONATHAN WILKO * KATY JOANS

pour un moment le système ramasser non seulement d'abord même les mots du milieu et le dernier mois * TONY NESJO
* Bajoz ZACKS

Était-ce utile?

La solution

Il suffit de retirer le premier % de chacun de vos chaînes de 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%'";

Cela dit, vous devriez vraiment , vraiment étudier en utilisant AOP ou similaire et l'envoi d'une requête liée, où chaque paramètre se correctement échappé pour empêcher les attaques par injection SQL.

Si vous faites que le SQL se complique un peu plus, cependant, parce que vous ne pouvez pas lier un paramètre dans une chaîne, de sorte que l'ajout du % doit être fait comme une concaténation 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(?, '%')";

(puis produire une poignée de déclaration préparée et exécuter avec les paramètres appropriés - vous trouverez de nombreux exemples où d'autre sur Stackoverflow).

Autres conseils

Vous pouvez utiliser l'opérateur REGEXP comme ceci:

$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'";
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top