Cara Membuat Live Search dengan Ajax pada PHP – Hai sobat ketemu lagi dengan saya dan pada kesempatan kali ini saya akan melanjutkan postingan saya sebelumnya tentang Ajax Search. Setelah sebelumnya kita belajar tentang membuat menu search pada ajax dengan trigger tombol cari, sekarang kita akan menghapus tombol carinya dan membuat triggernya pada saat combobox dipilih/saat menulis kata kuncinya secara otomatis akan merefresh tabelnya.
Baca juga :
Cara Membuat Menu Filter & Search ke Semua Kolom pada PHP
Cara Membuat Menu Filter & Search dengan Ajax Tanpa Loading pada PHP
Berbeda dengan postingan sebelumnya hanya pada ajaxnya untuk yang lainnya sama dan pada tutorial kali ini kita tidak membutuhkan tombol cari jadi untuk itu tombol cari kita hapus saja. Namun saya akan mengulangnya agi dan saya jelaskan dari buat project lagi. Untuk itu sobat ikuti step-step dibawah ini.
Membuat Database MySQL
1. Pertama yang WAJIB ada yaitu sobat harus membuat sebuah database. Sobat bisa menggunakan tools bantu seperti navicat, heidi SQL atau lainnya. Sobat juga bisa membuatnya dengan mengakses url localhost/phpmyadmin -> klik tab Database dan tuliskan db_dewankomputer-> Klik tombol Create/Buat.
2. Buat tabel untuk mengetes nantinya apakah benar-benar terkoneksi atau belum dengan mengetikkan query dibawah ini pada tab SQL lalu klik tombol Kirim/Go
CREATE TABLE `tbl_mahasiswa_search` ( `id` int(11) PRIMARY KEY NOT NULL AUTO_INCREMENT, `nama_mahasiswa` varchar(255) NOT NULL, `alamat` text NOT NULL, `jenis_kelamin` varchar(255) NOT NULL, `tgl_masuk` date NOT NULL, `jurusan` varchar(255) NOT NULL )
3. Isikan data pada tbl_mahasiswa_search dengan mengetikkan query dibawah ini
INSERT INTO `tbl_mahasiswa_search` VALUES (1, 'Dewan Komputer', 'Cilacap', 'Laki-laki', '2019-01-01', 'Sistem Informasi'); INSERT INTO `tbl_mahasiswa_search` VALUES (2, 'Sule', 'Jakarta', 'Laki-laki', '2019-01-01', 'Teknik Informatika'); INSERT INTO `tbl_mahasiswa_search` VALUES (3, 'Maemunah', 'Yogyakarta', 'Perempuan', '2019-01-01', 'Sistem Informasi'); INSERT INTO `tbl_mahasiswa_search` VALUES (4, 'Siti', 'Semarang', 'Perempuan', '2019-01-01', 'Teknik Informatika'); INSERT INTO `tbl_mahasiswa_search` VALUES (5, 'Andre', 'Purwokerto', 'Laki-laki', '2019-01-22', 'Sistem Informasi'); INSERT INTO `tbl_mahasiswa_search` VALUES (6, 'John Smith', 'Njojog', 'Laki-laki', '2019-01-22', 'Sistem Informasi'); INSERT INTO `tbl_mahasiswa_search` VALUES (7, 'Adam Levine', 'Prapatan Ciamis', 'Laki-laki', '2019-01-22', 'Sistem Informasi'); INSERT INTO `tbl_mahasiswa_search` VALUES (10, 'Sudirman', 'Jakarta', 'Laki-laki', '2019-01-22', 'Sistem Informasi'); INSERT INTO `tbl_mahasiswa_search` VALUES (11, 'Ahmad Yani', 'Jakarta', 'Laki-laki', '2019-01-22', 'Teknik Informatika'); INSERT INTO `tbl_mahasiswa_search` VALUES (12, 'Suprapto', 'Jakarta', 'Laki-laki', '2019-01-22', 'Sistem Informasi'); INSERT INTO `tbl_mahasiswa_search` VALUES (13, 'Adul', 'Medan', 'Laki-laki', '2019-01-22', 'Sistem Informasi'); INSERT INTO `tbl_mahasiswa_search` VALUES (14, 'Komeng', 'Palangkaraya', 'Laki-laki', '2019-01-22', 'Teknik Informatika'); INSERT INTO `tbl_mahasiswa_search` VALUES (15, 'Dono', 'Riau', 'Laki-laki', '2019-01-22', 'Sistem Informasi'); INSERT INTO `tbl_mahasiswa_search` VALUES (16, 'Kasino', 'Jakarta', 'Laki-laki', '2019-01-22', 'Teknik Informatika'); INSERT INTO `tbl_mahasiswa_search` VALUES (17, 'Indro', 'Purbalingga', 'Laki-laki', '2019-01-22', 'Sistem Informasi'); INSERT INTO `tbl_mahasiswa_search` VALUES (18, 'Titik Puspa', 'Purwokerto', 'Perempuan', '2019-01-22', 'Sistem Informasi'); INSERT INTO `tbl_mahasiswa_search` VALUES (19, 'Meriam Belina', 'Cilacap', 'Perempuan', '2019-01-22', 'Sistem Informasi'); INSERT INTO `tbl_mahasiswa_search` VALUES (20, 'John Gundulmu', 'Jakarta', 'Laki-laki', '2019-01-22', 'Teknik Informatika'); INSERT INTO `tbl_mahasiswa_search` VALUES (21, 'Adele', 'Jakarta', 'Laki-laki', '2019-01-22', 'Teknik Informatika'); INSERT INTO `tbl_mahasiswa_search` VALUES (22, 'Jokowi', 'Jakarta', 'Laki-laki', '2019-01-22', 'Sistem Informasi'); INSERT INTO `tbl_mahasiswa_search` VALUES (23, 'Megawati', 'Medan', 'Perempuan', '2019-01-22', 'Teknik Informatika'); INSERT INTO `tbl_mahasiswa_search` VALUES (24, 'Prabowo', 'Palangkaraya', 'Laki-laki', '2019-01-22', 'Sistem Informasi'); INSERT INTO `tbl_mahasiswa_search` VALUES (25, 'Raisa', 'Riau', 'Perempuan', '2019-01-22', 'Teknik Informatika'); INSERT INTO `tbl_mahasiswa_search` VALUES (26, 'Luna Maya', 'Jakarta', 'Perempuan', '2019-01-22', 'Teknik Informatika'); INSERT INTO `tbl_mahasiswa_search` VALUES (27, 'Dery', 'Purbalingga', 'Laki-laki', '2019-01-22', 'Sistem Informasi'); INSERT INTO `tbl_mahasiswa_search` VALUES (28, 'Septian', 'Purwokerto', 'Laki-laki', '2019-01-22', 'Sistem Informasi');
Cara Membuat Menu Filter & Search dengan Ajax
Untuk mempercantik tampilannya saya menggunakan bootstrap 4. Tidak usah berlama-lama, saya akan memberikan contohnya, yaitu sebagai berikut
1. Pertama buatlah folder pada htdocs, pada contoh saya beri nama folder dewan-live-search
2. Buatlah file koneksi.php pada folder project sobat dan isikan dengan script dibawah. Saya segaja tidak membuat file koneksi pada satu file dengan menu search seperti kebanyakan tutorial karena dalam penerapannya itu tidaklah mungkin jika kita membuat file koneksinya pada setiap halaman karena akan sangat susah nanti jika akan mengimplementasikan atau memindahkan server kita harus ganti satu per satu. Oleh karena itu kita harus membuatnya pada satu file saja dan jika ingin pindah server kita akan menggantinya di file ini saja.
<?php define('HOST','localhost'); define('USER','root'); define('PASS',''); define('DB1', 'db_dewankomputer'); // Buat Koneksinya $db1 = new mysqli(HOST, USER, PASS, DB1); ?>
isikan sesuai dengan host, user, password, dan nama database sobat. Untuk contoh di bawah ini saya berinama database dengan nama db_dewankomputer.
Jika sobat ingin tahu cara mengkoneksikan dengan dua database atau lebih dalam satu aplikasi maka sobat bisa kunjungi postingan dibawah ini
3. Tambahkan librari bootstrap untuk mempercantik tampilan dan librari js yang tentunya diperlukan untuk bisa menjalankan ajax. Kode dibawah letakkan pada tag <head> dan saya mencontohkan degan librari cs dan js online. Jika sobat ingin menggunakan untuk keperluan development tentu sobat harus mendownloadnya terlebih dahulu siwebsite resminya atau pada project ini di akhir postingan. Kodenya adalah sebagai berikut
<!-- Bootstrap --> <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.css" rel="stylesheet"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
4. Buatlah file index.php pada folder sobat dan buat form search serta tabelnya. Untuk mempercantik tampilannya saya menggunakan booststrap 4. Isikan dengan script dibawah ini
<div class="row mb-3"> <div class="col-sm-12"><label class="text-bold">Filer dan cari</label></div> <div class="col-sm-3"> <div class="form-group form-inline"> <label>Jurusan</label> <select name="s_jurusan" id="s_jurusan" class="form-control"> <option value=""></option> <option value="Sistem Informasi">Sistem Informasi</option> <option value="Teknik Informatika">Teknik Informatika</option> </select> </div> </div> <div class="col-sm-4"> <div class="form-group form-inline"> <label>Keyword</label> <input type="text" name="s_keyword" id="s_keyword" class="form-control"> </div> </div> </div><hr> <div class="data"></div>
5. Kemudian pada file index.php paling bawah sobat tambahkan script dibawah ini yang berisi ajax
<script> $(document).ready(function(){ load_data(); function load_data(jurusan, keyword) { $.ajax({ method:"POST", url:"data.php", data: {jurusan: jurusan, keyword:keyword}, success:function(hasil) { $('.data').html(hasil); } }); } $('#s_keyword').keyup(function(){ var jurusan = $("#s_jurusan").val(); var keyword = $("#s_keyword").val(); load_data(jurusan, keyword); }); $('#s_jurusan').change(function(){ var jurusan = $("#s_jurusan").val(); var keyword = $("#s_keyword").val(); load_data(jurusan, keyword); }); }); </script>
Penjelasan :
KodeĀ load_data(); adalah kode untuk memanggil fungsi load_data yang mempunyai fungsi untuk menampilkan tabel pada elemen yang mempunyai class .data. Pada contoh diatas adalah pada index.php bagian <div class=”data”></div>. Nanti hasilnya adalah apa yang ditampilkan pada data.php dalam contoh kali ini adalah tabelnya. Tidak seperti pada tutorial sebelumnya yang menggunakan event click sebagai trigger untuk merefresh data, pada contoh kali ini kita akan menggunakan 2 event yaitu event select change dan event input text keyup. Pada event select change berarti jika user mengganti isi yang ada pada select option / combobox maka sistem akan menampilkan tabel yang ada pada tabel file data.php. Sedangkan pada event input text keyup berarti setiap user menginputkan 1 huruf maka sistem akan menampilkan tabel yang ada pada tabel file data.php. Oleh karena itu fungsi ajaxnya sebenarnya sama yaitu seperti dibawah
$.ajax({ method:"POST", url:"data.php", data: {jurusan: jurusan, keyword:keyword}, success:function(hasil) { $('.data').html(hasil); } });
Jadi
kita tidak perlu membuatnya pada event select change dan event input text keyup. Kita cukup membuatnya sekali saja yang kemudian kita simpan pada suatu fungsi dan jika kita membutuhkannya kita cukup memanggil nama fungsinya saja dan juga nilainya tentunya karena pada fungsi load_data() kita juga bisa menambahkan nilai yaitu jurusan dan keyword seperti yang tertulis pada kode load_data(jurusan, keyword). Jika kita tidak menuliskan nilainya sama saja dengan load_data(“”, “”) atau load_data();Sedangkan pada kode dibawah berfungsi untuk menampilkan hasil dari tabel yang sudah di filter.
success: function(hasil) { $('.data').html(hasil); }
6. Seperti yang tertulis diatas pada ajax, kita perlu file data.php untuk menampilkan datanya dalam table. Jika sobat sudah membuatnya dan menampilkan tabelnya dalam file index.php atau lainnya, maka sobat bisa memisahkan tabelnya saja. Contoh kodenya pada data.php adalah sebagai berikut
<table class="table table-striped table-bordered" style="width:100%"> <thead> <tr> <td>No</td> <td>Nama Mahasiswa</td> <td>Alamat</td> <td>Jurusan</td> <td>Jenis Kelamin</td> <td>Tanggal Masuk</td> </tr> </thead> <tbody> <?php include 'koneksi.php'; $s_jurusan=""; $s_keyword=""; if (isset($_POST['jurusan'])) { $s_jurusan = $_POST['jurusan']; $s_keyword = $_POST['keyword']; } $search_jurusan = '%'. $s_jurusan .'%'; $search_keyword = '%'. $s_keyword .'%'; $no = 1; $query = "SELECT * FROM tbl_mahasiswa_search WHERE jurusan LIKE ? AND (nama_mahasiswa LIKE ? OR alamat LIKE ? OR jurusan LIKE ? OR jenis_kelamin LIKE ? OR tgl_masuk LIKE ?) ORDER BY id DESC LIMIT 100"; $dewan1 = $db1->prepare($query); $dewan1->bind_param('ssssss', $search_jurusan, $search_keyword, $search_keyword, $search_keyword, $search_keyword, $search_keyword); $dewan1->execute(); $res1 = $dewan1->get_result(); if ($res1->num_rows > 0) { while ($row = $res1->fetch_assoc()) { $id = $row['id']; $nama_mahasiswa = $row['nama_mahasiswa']; $alamat = $row['alamat']; $jurusan = $row['jurusan']; $jenis_kelamin = $row['jenis_kelamin']; $tgl_masuk = $row['tgl_masuk']; ?> <tr> <td><?php echo $no++; ?></td> <td><?php echo $nama_mahasiswa; ?></td> <td><?php echo $alamat; ?></td> <td><?php echo $jurusan; ?></td> <td><?php echo $jenis_kelamin; ?></td> <td><?php echo $tgl_masuk; ?></td> </tr> <?php } } else { ?> <tr> <td colspan='7'>Tidak ada data ditemukan</td> </tr> <?php } ?> </tbody> </table>
Bagaimana sama bukan dengan kode untuk menampilkan data dalam tabel. Kenapa dipisah yaitu agar ajax bisa merefresh halaman ini saja saat user klik cari dan tentunya refresh disini tidak memerlukan loading. Kode diatas menggunakan metode object oriented dan prepare statement. Cara ini dinilai paling aman jika kita menggunakan mysqli. Untuk perbedaan Object Oriented dan Procedural maka sobat bisa lita postingan dibawah
Cara Membuat Koneksi dengan Database MySQL menggunakan PHP
7. Jika sobat jalankan maka akan menjadi seperti dibawah
Pada contoh diatas, trigger untuk meresfresh adalah tombol Cari. Kita bisa membuat triggernya apa saja seperti . Sekain postingan saya tentang Cara Membuat Menu Filter & Search ke Semua Kolom pada PHP. Jika ada pertanyaan atau masih bingung sobat bisa tanyakan pada kolom komentar yang tersedia pada kolom paling bawah.
Baca juga :
Jika sobat ingin mendownload tutorial diatas maka sobat bisa klik link dibawah ini :
min sdh ikuti scriptnya tp koq ndak jln ya…
itu saat
$query = “SELECT * FROM tbl_mahasiswa_search WHERE jurusan LIKE ? AND (nama_mahasiswa LIKE ? OR …
emang bisa ya like nya tanda tanya gitu?
bisa gan itu pake statement parameter buat menghindari SQL Injection,
masing2 di deklarasikan di bind_param()
contoh :
$dewan1->bind_param(‘ssssss’, $search_jurusan, $search_keyword, $search_keyword, $search_keyword, $search_keyword, $search_keyword);
tanda tanya (?) total 6
“s” total 6
$parameter total 6
semua harus sama
ohya gan…bagaimana jika yg keyword itu dibikin autocomplete dari field nama…caranya koq gak nemu ya?
saya sudah pernah posting itu 2x dengaan plugin dan tanpa plugin
knp ya..gak jalan pdl sdh disesuaikan koneksi,php nya
malah muncul error spt ini PHP Fatal error: Call to undefined method mysqli_stmt::get_result() in /data.php on line 29
apa sama 100% atau dimodifikasi?
kalo dimodifikasi apanya?
pake versi PHP berapa?
dan apakah mysqli sudah ada/enable?
sdh bisa gan…dan saya tdk memodifikasi asli dari download-an…ternyata mysqli nya ada yg blm dienablekan…makasih responnya…
oh ya kalo sekalian ditambah Pagination nya ada tidak ya biar saat meload data yg banyak enak lihatnya…makasih
untuk yg pagination sudah saya bahas terpisah di beberapa postingan sebelumnya..
Halo gan, saya coba modifikasi script diatas, datanya terdisplay tp livesearchnya g jalan. ini link untuk file yg saya buat: https://drive.google.com/drive/folders/15-eqOYSy2q-3dToZDZue9x0z2brUt1yz?usp=sharing
saya buat link karna kepanjangan klo copas semua code kesini…
mohon bantuannya gan…
masalahnya cuma di
if (isset($_POST[‘KODE_STS’])) {
$s_keyword = $_POST[‘keyword’];
}
harusnya
if (isset($_POST[‘keyword’])) {
$s_keyword = $_POST[‘keyword’];
}
karena ajaxnya tidak mengirim parameter ‘KODE_STS’ tapi hanya ‘keyword’
wuih langsung berhasil, makasih gan…
sekarang saya tinggal lanjut tutorial berikutnya…mantabb gan…
Gan, maaf tanya lagi, klo untuk menggabungkan livesearch dan pagination nya itu gmn yah? saya liat hanya pagination saja blm ada penggabungannya, saya bingung nggabunginnya…
gampang mas tinggal tambahin limit aja di querynya
sisanya tinggal lihat di
https://dewankomputer.com/2019/03/06/cara-membuat-pagination-menggunakan-ajax-tanpa-loading-pada-php/
yang penting pahami dulu dua-duanya baru coba gabungin
Gan apa yg salah ya kok error mulu
Fatal error: Call to undefined method PDOStatement::bind_param()
mohon bantuan cek dong
$search_jurusan = ‘%’. $s_jurusan .’%’;
$search_keyword = ‘%’. $s_keyword .’%’;
$no = 1;
$query = “SELECT * FROM tbl_aktif WHERE ket LIKE ? AND (nama LIKE ? OR tgl_test LIKE ? OR waktu LIKE ? OR ket LIKE ?) ORDER BY notest DESC LIMIT 200”;
$sql = $pdo->prepare($query);
$sql->bind_param(‘ssssss’, $search_jurusan, $search_keyword, $search_keyword, $search_keyword, $search_keyword);
$sql->execute();
$res1 = $sql->get_result();
itu di query ‘?’ ada 5 tpi di bind_param ‘s’ ada 6
link download nya mati semua kak, please
Gan mau nanya, kalo query select dimasukkan ke dalam javascript tapi nampilin value dropdown semuanya itu gimana yaa
bisa menggunakan ajax, mungkin link dibawah bisa buat referensi
https://dewankomputer.com/2019/03/26/cara-membuat-combobox-bertingkat-filter-daerah-dengan-ajax-dan-php/