Frage

Ich habe eine Live -Suche bei Ajax und PHP gemacht

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%'";

Ich möchte das Suchergebnis, suchen Sie aus dem ersten Buchstaben nicht aus der Mitte oder zuletzt: Beispiel:
keyword = jo
Ergebnis, das ich will =
* John Becks
* Jonathan Wilko * Katy Joans

Für einen Moment holt sich das System nicht nur zuerst auch mit mittleren und letzten Worten
* Tony Nesjo
* Bajoz Zacks

War es hilfreich?

Lösung

Entfernen Sie einfach den ersten % von jedem von Ihnen LIKE Saiten.

$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%'";

Das heißt, du solltest Ja wirklich, Ja wirklich Untersuchen Sie mithilfe von PDO oder ähnlich und senden Sie eine gebundene Abfrage, wobei jeder Parameter ordnungsgemäß entkommen wird, um SQL -Injektionsangriffe zu verhindern.

Wenn Sie dies tun, wird die SQL jedoch etwas komplizierter, da Sie keinen Parameter in eine Zeichenfolge binden können % muss als SQL -Verkettung erfolgen:

$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(?, '%')";

(Erstellen Sie dann einen vorbereiteten Anweisungsgriff und führen Sie mit den entsprechenden Parametern aus.

Andere Tipps

Sie können verwenden Regexp Bediener wie SO:

$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'";
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top