<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <link rel="stylesheet" type="text/css" href="bootstrap4/css/bootstrap.min.css"> <style type="text/css"> .mt20{ margin-top:20px; } #autocomplete{ display: none; } .list-group-item a{ text-decoration: none !important; } .list-group li{ cursor: pointer; } .list-group li:hover{ color: white; background-color: #428bca; } </style> </head> <body> <div class="container"> <div class="row justify-content-center mt20"> <div class="col-sm-6"> <form id="autoForm" method="POST" action=""> <div class="input-group input-group-lg"> <input type="text" id="keyword" name="keyword" class="form-control" placeholder="Firstname, Lastname or Nickname" aria-describedby="basic-addon2"> <div class="input-group-append"> </div> </div> </form> </div> </div> </div> </body> </html>
$(document).ready(function(){ //generate suggestion on keyup $('#keyword').keyup(function(e){ e.preventDefault(); var form = $('#autoForm').serialize(); $.ajax({ type: 'POST', url: 'search.php', data: form, dataType: 'json', success: function(response){ if(response.error){ $('#autocomplete').hide(); } else{ $('#autocomplete').show().html(response.data); } } }); }); //fill the input $(document).on('click', '.list-group-item', function(e){ e.preventDefault(); $('#autocomplete').hide(); var fullname = $(this).data('fullname'); $('#keyword').val(fullname); }); });
<?php //connection $conn = new mysqli('localhost', 'root', '', 'mydb'); //initialize output $keyword = $_POST['keyword']; //check if keyword is empty $output['error'] = true; } else{ //getting data from database via keyword $sql = "SELECT * FROM members WHERE firstname LIKE '%$keyword%' OR lastname LIKE '%$keyword%' OR nickname LIKE '%$keyword%'"; $query = $conn->query($sql); if($query->num_rows > 0){ while($row = $query->fetch_assoc()){ $output['data'] .= " <li class='list-group-item' data-fullname='".$row['firstname']." ".$row['lastname']."'>".$row['firstname']." ".$row['lastname']."</li> "; } } else{ $output['data'] = " <li class='list-group-item'>No data matches keyword</li> "; } } } ?>