Cara Membuat Combobox Bertingkat Filter Daerah dengan Ajax dan PHP – Hai ketemu lagi dengan saya dan pada kesempatan kali ini saya akan membahas tentang kesukaan saya yaitu ajax. Dan kali ini saya akan membahas tentang combobox bertingkat/tree yang terdiri dari 4 combobox yang mana combobox pertama yaitu provinsi jika dipilih maka akan muncul kabupaten yang ada pada provinsi yang dipilih dan kemudian jika dipilih maka kecamatan akan terfilter sesuai kabupaten yang dipilih sampai pada tingkat kelurahan. Cara berikut tidak hanya digunakan pada filter daerah namun juga bisa digunaka nuntuk keperluan lain seperti filter divisi dan sub divisi, kepala bagian dan sub kepala bagian dan masih banyak lagi.
Untuk sekarang ini saya suka membuat aplikasi dengan ajax karena jika dengan ajax semua bisa kita buat tanpa loading yang memberatkan aplikasi. Jika sobat ingin melihat tutorial saya lainnya tantang ajax ada banyak bisa sobat cari pada blog ini. Langsung saja saya contohka cara membuat combobox bertingkat 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 karena datanya sangat banyak sobat bisa download file .sql dibawah ini dan imporkan pada database sobat
Membuat Combobox Bertingkat
1.Buat file koneksi.php yang berfugsi untuk menyambungkan aplikasi dengan database dan isikan dengan kode dibawah
<?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
2. Buat file index.php dan masukkan librari css dan js pada tag <head> seperti dibawah ini
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Untuk librari css dan js saya menggunakan online karena hanya untuk keperluan demo, jika sobat ingin membuatnya untuk development maka sobat perlu mendownloadnya terlebih dahulu atau sobat bisa mendowload bersama project ini diakhir postingan. Karena kita menggunakan Ajax jadi kita wajib untuk memasukkan jquery.js/jquery.min.js. Dan karena kita menggunakan Popover dari bootstrap maka wajib untuk memasukkan librari bootstrap.
3. Masih di file index.php sobat tambahkan kode dibawah pada tag <body>…</body>
<nav class="navbar navbar-dark bg-primary fixed-top"> <a class="navbar-brand" href="index.php" style="color: #fff;"> Dewan Komputer </a> </nav> <div class="container mb-5"> <h2 align="center" style="margin: 60px 10px 10px 10px;">Dewan Demo Combobox Bertingkat Daerah Indonesia</h2><hr> <div class="row"> <div class="col-sm-6"> <div class="form-group"> <label>Provinsi</label> <select class="form-control" name="provinsi" id="provinsi"> <option value=""> Pilih Provinsi</option> </select> </div> <div class="form-group"> <label>Kabupaten</label> <select class="form-control" name="kabupaten" id="kabupaten"> <option value=""></option> </select> </div> <div class="form-group"> <label>Kecamatan</label> <select class="form-control" name="kecamatan" id="kecamatan"> <option value=""></option> </select> </div> <div class="form-group"> <label>Kelurahan</label> <select class="form-control" name="kelurahan" id="kelurahan"> <option value=""></option> </select> </div> </div> </div> <hr> </div> <div class="navbar bg-dark fixed-bottom"> <div style="color: #fff;">© <?php echo date('Y'); ?> Copyright: <a href="https://dewankomputer.com/"> Dewan Komputer</a> </div> </div>
4. Masih di index.php, selanjutnya kita buat ajaxnya sebagai berikut
<script type="text/javascript"> $(document).ready(function(){ $.ajax({ type: 'POST', url: "get_provinsi.php", cache: false, success: function(msg){ $("#provinsi").html(msg); } }); $("#provinsi").change(function(){ var provinsi = $("#provinsi").val(); $.ajax({ type: 'POST', url: "get_kabupaten.php", data: {provinsi: provinsi}, cache: false, success: function(msg){ $("#kabupaten").html(msg); } }); }); $("#kabupaten").change(function(){ var kabupaten = $("#kabupaten").val(); $.ajax({ type: 'POST', url: "get_kecamatan.php", data: {kabupaten: kabupaten}, cache: false, success: function(msg){ $("#kecamatan").html(msg); } }); }); $("#kecamatan").change(function(){ var kecamatan = $("#kecamatan").val(); $.ajax({ type: 'POST', url: "get_kelurahan.php", data: {kecamatan: kecamatan}, cache: false, success: function(msg){ $("#kelurahan").html(msg); } }); }); }); </script>
Pada script diatas terlihat ada 4 ajax,
- Pertama adalah ajax yang berfungsi untuk mengisi combobox provinsi.
- Kedua adalah ajax yang berfungsi untuk mengambil data kabupaten jika combobox provinsi berubah.
- Ketiga adalah ajax yang berfungsi untuk mengambil data kecamatan jika combobox kabupaten berubah dan mengisinya pada combobox kecamatan.
- Terakhir adalah ajax untuk mengisi combobox kelurahan jika combobox kecamatan dipilih.
5. Selanjutnya adalah membuat file get_provinsip.php yang berfungsi untuk mengambil data provinsi yang kemudian ditampilkan pada combobox provinsi yang dipanggil oleh ajax diatas. Scriptnya adalah sebagai berikut :
<?php include 'koneksi.php'; echo "<option value=''>Pilih Provinsi</option>"; $query = "SELECT * FROM provinsi ORDER BY nama ASC"; $dewan1 = $db1->prepare($query); $dewan1->execute(); $res1 = $dewan1->get_result(); while ($row = $res1->fetch_assoc()) { echo "<option value='" . $row['id_prov'] . "'>" . $row['nama'] . "</option>"; } ?>
6. Selanjutnya
adalah membuat file get_kabupaten.php yang berfungsi untuk mengambil data kabupaten dan mengisinya pada combobox yang dipanggil oleh ajax saat poengguna memilih provinsi<?php include 'koneksi.php'; $provinsi = $_POST['provinsi']; echo "<option value=''>Pilih Kabupaten</option>"; $query = "SELECT * FROM kabupaten WHERE id_prov=? ORDER BY nama ASC"; $dewan1 = $db1->prepare($query); $dewan1->bind_param("i", $provinsi); $dewan1->execute(); $res1 = $dewan1->get_result(); while ($row = $res1->fetch_assoc()) { echo "<option value='" . $row['id_kab'] . "'>" . $row['nama'] . "</option>"; } ?>
7. Selanjutnya adalah membuat file get_kecamatan.php yang berfungsi untuk mengisi combobox kecamatan saat combobox kabupaten dipilih
<?php include 'koneksi.php'; $kabupaten = $_POST['kabupaten']; echo "<option value=''>Pilih Kecamatan</option>"; $query = "SELECT * FROM kecamatan WHERE id_kab=? ORDER BY nama ASC"; $dewan1 = $db1->prepare($query); $dewan1->bind_param("i", $kabupaten); $dewan1->execute(); $res1 = $dewan1->get_result(); while ($row = $res1->fetch_assoc()) { echo "<option value='" . $row['id_kec'] . "'>" . $row['nama'] . "</option>"; } ?>
8. Terakhir adalah membuat file get_kelurahan.php yang berfungsi untuk megisi combobox kelurahan saat combobox kecamatan dipilih
<?php include 'koneksi.php'; $kecamatan = $_POST['kecamatan']; echo "<option value=''>Pilih Kelurahan</option>"; $query = "SELECT * FROM kelurahan WHERE id_kec=? ORDER BY nama ASC"; $dewan1 = $db1->prepare($query); $dewan1->bind_param("i", $kecamatan); $dewan1->execute(); $res1 = $dewan1->get_result(); while ($row = $res1->fetch_assoc()) { echo "<option value='" . $row['id_kel'] . "'>" . $row['nama'] . "</option>"; } ?>
9. Jika sobat telah mengikuti langkah-langkah diatas seharusnya aplikasi sudah berjalan dengan sempurna seperti gambar dibawah
10. SAAT MENYIMPAN DATA
Karena di comboboxnya valuenya adalah id jadi jika sobat membuat untuk form tentu yg tersimpan adalah id seperti id_prov, id_kab, id_kec, id_kel. Memang normalnya seperti itu, makanya untuk provinsi, kabupaten, kecamata, kelurahan itu bagusnya menggunakan relasi tabel. Jika sobat hanya menyimpan namanya maka sobat pasti akan kesulitan saat ingin membuat fitur edit. Terus bagaimana untuk menampilkan namanya? Sobat bisa menggunakan JOIN pada query saat ingin menampilkan data.
Namun jika sobat benar-benar ingin menyimpan nama saja, sobat TIDAK BISA menggunakan FORM SUBMIT. Gunakanlah AJAX juga untuk menyimpan datanya. Di AJAX sendiri juga ada fitur seperti form submit yaitu .serialize(), NAMUN untuk AJAX yg saya bicarakan sekarang menggunakan FormData contohnya bisa dilihat di link dibawah lihat pada function simpanData(). PAHAMI dan RESAPI terlebih dahulu karena jika pelum pahan script AJAXnya pasti akan kebingungan ke depannya.
Terus cara mengambil value NAMA bagaimana? Ada banyak cara, contohnya
1. Menggunakan DOM Javacript (bisa menggunakan var/let)
//menggunakan DOM javascript let id_provinsi = document.getElementById(“provinsi”).value; let nama_provinsi = document.getElementById(“provinsi”).options[e.selectedIndex].text;
2. Menggunakan JQuery seperti dibawah (bisa menggunakan var/let)
//untuk mendapatkan id_provinsi let id_provinsi = $(‘#provinsi’).val(); //untuk mendapatkan nama provinsi let nama_provinsi = $(‘#provinsi option:selected’).text();
untuk kabupaten, kecamatan, kelurahan sama saja
3. Bisa menggunakan custom function di javascript. Jadi sobat buat function di javascript jadinya seperti dibawah
//Membuat Custom function (sekali bikin bisa untuk berkali-kali pakainya cukup panggil nama functionnya) function getSelectText(selId) { var sel = document.getElementById(selId); var i = sel.selectedIndex; var selected_text = sel.options[i].text; return selected_text; } //untuk mengambil value namanya-nya let provinsi = getSelectText(“provinsi”); let kabupaten = getSelectText(“kabupaten”); let kecamatan = getSelectText(“kecamatan”); let kelurahan = getSelectText(“kelurahan”);
Jadi ada banyak cara kodingnya namun jangan dibikin bingung, cukup pilih salah satu saja intinya pahami dulu scriptnya jangan main copas saja. Copas boleh dan sah-sah saja tapi sobat harus tahu apa yang di copas okee…
Saya hanya memberikan dasarnya saja jadi jika sobat ingin menggabungkan dengan aplikasi yang sedang sobat buat silahkan berkreasi sendiri supaya menjadi lebih bagus lagi.
Sekian postingan saya tentang Cara Membuat Combobox Bertingkat Filter Daerah dengan Ajax dan PHP. Jika ada salah kata saya mohon maaf dan jika ada pertanyaan silahkan tinggalkan pada kolom komentar dibawah.
Jika sobat ingin mendownload tutorial diatas maka sobat bisa klik link dibawah ini :
Kalau ingin mengunci wilayah sesuai user login gimana min?
Misalnya gini :
User 1 wilayanya aceh, berarti data tepilih harus aceh, tapi untuk kabupaten nya terbuka sesuai wilayah yang terkunci tersebut dari propinsi aceh.
kolom provinsi terisi sesuai session provinsi dan event diganti dari sebelumnya on provinsi change jadi saat window di load/document ready
cara masukin nama daerah ke database nya gimana mas kalau mau disimpan, soalnya value pada select nya kan id bukan namanya
menggunakan jquery bisa dengan
var nama_provinsi = $(‘#provinsi option:selected’).text();
atau
var nama_provinsi = $(‘#provinsi’).find(‘option:selected’).text();
bisa juga pake DOM javascript
var e = document.getElementById(“provinsi”);
var nama_provinsi = e.options[e.selectedIndex].text;
Halo Kak,
Boleh dibantu jelasin. Script ini,
var nama_provinsi = $(‘#provinsi option:selected’).text();
untuk menggantikan yang ini ya,
var provinsi = $(“#provinsi”).val();
yg di ajax nya???
Thanks
iya untuk menggantikan yg itu, contohnya :jika
var nama_provinsi = $(‘#provinsi option:selected’).text();
//akan mengambil teks yg tertampil di combobox dalam kasus ini Jakarta
sedangkan
var provinsi = $(“#provinsi”).val();
//akan mengambil valuenya yaitu 12345
taruh koding dimana yang var nama_provinsi = $(‘#provinsi option:selected’).text(); di index.php apa di get_provinsi.php apa buat baru file saya bingung soalnya muncul id bukan nama
koding diatas adalah javascript yg menggunakan JQuery jadi di letakkan di index.php tag javascript
let provinsi = $(“select[name=provinsi] option:selected”).text();
cara input ke db biar jadi nama provinsi, kabupaten,kecamatan gmanaya?
biar bukan id nya yang masuk?
ada tutorial full scriptnya?
pake javascript buat ngambil textnya
buat function di javascript
function getSelectText(selId) {
var sel = document.getElementById(selId);
var i = sel.selectedIndex;
var selected_text = sel.options[i].text;
return selected_text;
}
dan untuk mengambil value-nya
let provinsi = getSelectText(“provinsi”);
let kabupaten = getSelectText(“kabupaten”);
let kecamatan = getSelectText(“kecamatan”);
let kelurahan = getSelectText(“kelurahan”);
ini di taronya dimana?
di xampp/htdocs
Mksd saya script untuk mengambil namanya buka idnya soalnya kalo d simpan d database yang di simpan id nya
di tag javascript simpan datanya menggunakan ajax bukan form submit
Saya coba secara online kok gak keluar daftar provinsinya di combobox ya, kalau offline bisa tuh
config ke database nya sudah di setting dengan benar?
Kalau mau hanya menampilkan Kecamatan dan Kelurahan saja bagaimana? Jadi Provinsi dan Kabupaten di buang
tinggal hapus ajax provinsi on change dan kabupatyen on change dan kecamatan blangwswung di tampilkan di awal load halaman…
klo cara tampilin di page wordpress gmana gan? klo plugin kan ada yg pke shorcode
kurang tahu kalo di wordpress
Klo untuk codeigniter gmna gan, masih bingung soalnya, ada kontak wa ndak buat tanya2?
bedanya cuma di routingnya mas kaya select data biasa kalo mau bikin api kalo untuk js & ajaxnya sama,
kebetulan saya tidak main CI tpi laravel tpi intinya ttep sama
Maaf, database yg terpisah per tabel ada? Saya terkendala saat import database.
assalamualaikum mau nanya bisa diupdate blog lagi gan yang buat id yang tersimpan bukan nama terus saya juga bingung disimpan dimana apakah di get_provinsi di index.php apa buat file lagi tolong diupdate lagi soalnya banyak orang bertanya malah disimpan id didatabase bukan nama provinsi kabupaten kecamatan kelurahan
memang rata2 provinsi, kabupaten, kecamatan, kelurahan itu yg tersimpan id karena seharusnya menggunakan relasi tabel di databasenya,
tapi jika ttep ingin nama yg tersimpan jangan pake form submit tapi menggunakan AJAX
jadi mainnya di javascript yg tentu saja javascriptnya ada di index.php
//untuk mendapatkan id_provinsi
var id_provinsi = $(‘#provinsi’).val();
//untuk mendapatkan nama provinsi
var nama_provinsi = $(‘#provinsi option:selected’).text();
AJAX untuk simpan bisa dilihat di postingan ini sama saja yg pntg dipahami dulu tahu script javascript itu yg mana dan PHP itu yg seperti apa
https://dewankomputer.com/2019/04/09/membuat-crud-expert-pencarian-dengan-jquery-ajax-bootstrap-modal-sweetalert-dan-wysihtml5-pada-php-part-2-action-simpan-preview-edit-hapus/
mas, misal sy punya form edit kayak gini..
Provinsi
<select class="form-control" name="id_prov" id="ubahProv" value="”>
kemudian untuk pemanggilan value id provinsinya agar nanti bisa ter-select, script di mana ya yang harus di ubah? ini kah..?
$(“#provinsi”).change(function(){
var provinsi = $(“#provinsi”).val();
$.ajax({
type: ‘POST’,
url: “get_kabupaten.php”,
data: {provinsi: provinsi},
cache: false,
success: function(msg){
$(“#kabupaten”).html(msg);
}
});
});
terima kasih sebelumnya atas responsenya..
iya $(“#provinsi”) jadi $(“#ubahProv”)
dan value nya bukan pas di select tpi di option
siap mas, $(“#provinsi”) jadi $(“#ubahProv”) sudah sy rubah sebelumnya..
tadi hanya salah copy di komentar.. hehe
“dan value nya bukan pas di select tpi di option”
untuk pernyataan ini, sudah sy coba masukkan di get_provinsi.php nya menggunakan kondisi
while ($rows = $res1->fetch_assoc())
{
if($rows[‘id_prov’] == $get_id)
{
echo “”.$rows[‘nama’].””;
}
else
{
echo “”.$rows[‘nama’].””;
}
}
hanya masih bingung, cara memanggil value dari database yang sudah ada itu bagaimana.. hehe..
sy masukkan value $get_id nya manual (misal: 36/Banten), akhirnya yg pilihan kabupaten tidak bisa dipilih/muncul.. hehe
mohon petunjuk..
“cara memanggil value dari database yang sudah ada” maksudnya?
kode lengkapnya aja masukkan di pastebin daripada bingung
masih bingung juga untuk penggunaan let ubahProv = $(“#ubahProv”).val(ubahProv);
sy otak-atik juga tidak mau.. hahaha
mungkin masnya bisa bantu sy? 😀
ini lagi bantu rekan kerja untuk penelitian..
in sya Allah ke depan juga butuh bantuan masnya buat menyempurnakan..
ini no sy xxxx-xxxx-xxxx
minta tlg masnya hubungi sy ya.. terima kasih
ada banyak cara sebenernya
cara 1
1. di semua ajaxnya, pada data: {selected: selected} dan variabel selected default 0.
2. jika pada klik edit selected terisi sesuai id provinsi dari data yg mau di edit.
3. pada masing2 file php itu saat echo option ditambahin selected jika id provinsinya sama
contoh :
$get_id= $_POST[‘selected’];
if($rows[‘id_prov’] == $get_id)
echo ““;
} else {
echo ““;
}
4. begitu juga di yg kabupaten, kecamatan, kelurahan
cara 2
tambah di ajaxnya saat success
success: function(msg) {
$(“#provinsi”).html(msg);
$(“#provinsi”).val(36).change();
}
di provinsi on change
success: function(msg) {
$(“#kabupaten”).html(msg);
$(“#kabupaten”).val(3602).change();
}
dst…
sudah sy otak-atik mas.. tp krna msh minim ilmu ttg jquery, malah auto pusing.. hehe
nanti sy butuh bantuan masnya buat menyempurnakan session, pembuatan php mailer buat pendaftaran, sama combobox bertingkat ini karna penggunaannya juga buat lain (misal: pemilihan ruang.. selanjutnya ke bed pasien)..
tinggal bikin editnya yg kesusahan 😀
siyap.. terima kasih penjelasannya mas..
akan sy coba otak-atik dulu..
tapi misal masnya ada waktu untuk membantu sy, masnya bisa wa sy di nomor td..
sebelum dan sesudahnya, sy ucapkan banyak terima kasih atas ilmunya.. 🙂
jazakallah khairan katsiran..
kalau membuat form edit, gimana cara ambil datanya?
jika option sudah terpilih semua… lalu option atas dirubah… jika ingin option di bawah2 hilang gmn kak kode nya?
jika menggunakan jquery maka tinggal nambah baris ini di function yang men trigger nya
$(“#kecamatan”).empty();
$(“#kelurahan”).empty();