JQuery PHP Live -Suche
-
27-10-2019 - |
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
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'";