У меня есть этот код для мгновенного поиска, как в Google.Код должен запрашивать базу данных для соответствующего термина, в моем случае имя и фамилия пользователя.Я использовал синтаксис LIKE
в своем запросе, но он будет искать в базе данных только столбец fname.Запрос правильный или мне нужно это исправить?Примечание: я использую SQLite в качестве своей базы данных.
PHP-код:
<?php
if(isset($_POST['action']) && $_POST['action'] == 'lookup'){
$q = filter_var($_POST['q'], FILTER_SANITIZE_STRING);
$stmt = $db->prepare('SELECT id, fname, lname FROM teachers WHERE fname LIKE ? OR lname LIKE ?');
$stmt->execute(array($q));
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
if( $results > 0){
echo json_encode($results);
}
}
?>
HTML и JS-код
<div class="container-fluid" id="content">
<div class="row justify-content-center" id="searchBox">
<div class="col-sm-12 col-md-7 col-lg-7" id="">
<form action="POST" method="" id="searchForm">
<div class="input-group">
<input type="text" name="search" class="form-control" id="searchBar" placeholder="Cerca">
<div class="input-prepend">
<button type="button" name="lookup" class="btn btn-link" id="searchBtn"><i class="fas fa-search"></i></button>
</div>
</div>
</form>
<div class="suggestedResults"></div>
</div>
</div>
</div>
<script>
$(document).ready(function(){
quickSearch();
});
var quickSearch = function(){
$('#searchBar').on('keyup', function(e){
e.preventDefault();
el = $(this).val();
list = $('.suggestedResults');
if(el.length > '3'){
$.ajax({
type: 'POST',
url: 'ajax/SearchController.php',
data: {action: 'lookup' ,q: el},
beforeSend: function(){
list.empty();
},
success: function(response){
var data = JSON.parse(response);
$.each(data, function(i, item){
list.append('<li class="suggestions-list"><a class="s-link" href="profile.php?'+data[i].id+'">'+data[i].fname+' '+data[i].lname+'</a></li>');
});
}
});
}
});
}
</script>