Untuk membuat fasilitas pencarian berdasarkan satu kategori pada prinsipnya mudah. Sebagai contoh misalkan pencarian data mahasiswa, dimana user bisa melakukan pencarian berdasarkan salah satu dari kategori NIM, nama mahasiswa, alamat, jenis kelamin atau yang lain. Dalam hal ini (single category), prinsipnya hanyalah menggunakan statement kondisional saja. Jika yang dipilih adalah kategori NIM, maka jalankan query pencarian data berdasarkan kategori NIM. Jika yang dipilih adalah kategori nama mahasiswa, maka jalankan query pencarian data berdasarkan nama mahasiswa dan seterusnya. Saya kira mudah… dan tidak ada masalah.
Namun… bagaimana bila pencariannya berdasarkan multi kategori? misalkan user ingin mencari tahu siapa saja sih mahasiswa yang beralamat di Solo dan berjenis kelamin laki-laki misalnya
Sebagai gambaran saja, seperti apa pencarian multi kategori itu, bisa Anda lihat pada gambar di bawah ini.
Gambar di atas menggambarkan pencarian data mahasiswa, dimana user bisa memilih kategori pencarian lebih dari satu. Dalam contoh di atas terdapat 4 kategori, dimana user dapat mengkombinasikannya sesuai keinginan. Perhatikan, bahwa gambar di atas menunjukkan si user ingin mencari mahasiswa bernama ‘Joko’ yang beralamat di ‘Solo’. Kalau dihitung-hitung ada sebanyak 24 buah total pilihan yang mungkin dipilih user. Kalau Anda buat ke 24 kemungkinan tersebut dengan statement kondisional wah… repot
Nah… pada artikel ini akan dibahas bagaimana trik untuk membuat script guna keperluan pencarian multi kategori tersebut. Untuk mudahnya kita akan menerapkannya ke studi kasus saja. Studi kasus yang dipilih sama seperti contoh pada gambar di atas saja yah.. supaya mudah.
OK.. pertama.. kita siapkan databasenya terlebih dahulu, beserta tabelnya. Kalau perlu recordnya sekalian untuk contoh saja.
01.CREATE TABLE mhs (02.nim varchar(10),03.namamhs varchar(30)04.alamat text,05.sex varchar(10),06.PRIMARY KEY (nim)07.);08. 09.INSERT INTO `mhs` VALUES ('M0197001', 'ROSIHAN ARI YUANA', 'COLOMADU', 'L');10.INSERT INTO `mhs` VALUES ('M0197002', 'DWI AMALIA FITRIANI', 'KUDUS', 'P');11.INSERT INTO `mhs` VALUES ('M0197003', 'FAZA FAUZAN KH.', 'COLOMADU', 'L');12.INSERT INTO `mhs` VALUES ('M0197004', 'NADA HASANAH', 'COLOMADU', 'P');13.INSERT INTO `mhs` VALUES ('M0197005', 'MUH. AHSANI TAQWIM', 'COLOMADU', 'L');form.htm
01.<h1>Cari Data Mahasiswa</h1>02. 03.<p>Pilih kategori pencarian</p>04. 05.<form method="post" action="proses.php">06.<table>07.<tr><td><input type="checkbox" name="nimCat"> NIM</td><td><input type="text" name="nim"></td></tr>08.<tr><td><input type="checkbox" name="namaCat"> Nama Mahasiswa</td><td><input type="text" name="nama"></td></tr>09.<tr><td><input type="checkbox" name="alamatCat"> Alamat</td><td><input type="text" name="alamat"></td></tr>10.<tr><td><input type="checkbox" name="sexCat"> Jenis Kelamin</td><td><input type="radio" name="sex" value="L"> Laki-Laki <input type="radio" name="sex" value="P"> Perempuan</td></tr>11.<tr><td></td><td><input type="submit" name="submit" value="Submit"></td></tr>12.</table>13.</form>OK.. next.. ini yang paling penting yaitu script untuk pencariannya.
OK.. sekarang kita coba analisis sebentar tentang bagaimana query yang terbentuk bila user memilih suatu kategori tertentu. Sebagai contoh misalkan user memilih kategorinya adalah NIM saja, maka querynya berbentuk:
1.SELECT * FROM mhs WHERE nim = '...';1.SELECT * FROM mhs WHERE nim = '...' AND namamhs LIKE '%...%';1.SELECT * FROM mhs WHERE namamhs LIKE '%...%' AND alamat LIKE '%...%' AND sex = '...';SELECT * FROM mhs WHERE. Sedangkan bagian yang berbeda-beda hanyalah bagian klausa WHERE nya saja. OK… berarti sekarang kita hanya fokus ke bagian WHERE sajaSekarang kita analisis lagi bagian WHERE nya. Jika yang dipilih hanya NIM saja, maka dalam WHERE ditambahkan
nim = '...'. Bila NIM dan nama mahasiswa yang dipilih maka nim = '...' ini ditambahkan AND namamhs LIKE '%...%' sehingga menjadi nim = '...' AND namamhs LIKE '%...%'. dan seterusnya. Dengan demikian konsep untuk pencarian multi kategori sebenarnya hanya menggabung-gabung syarat pada bagian WHERE saja.Nah.. bagaimana jika ide di atas kita implementasikan dalam script?
OK.. mula-mula, kita beri inisialisasi untuk bagian WHERE nya adalah empty sting terlebih dahulu
1.<?php2.$bagianWhere = "";3.?>01.<?php02. 03.$bagianWhere = "";04. 05.if (isset($_POST['nimCat']))06.{07.$nim = $_POST['nim'];08.$bagianWhere .= "nim = '$nim'";09.}10. 11.?>nim = '$nim'. Supaya membentuk query SELECT * FROM mhs WHERE nim = nim = '$nim'.Berikutnya script jika kategori nama mahasiswa dipilih
01.<?php02. 03.$bagianWhere = "";04. 05.if (isset($_POST['nimCat']))06.{07.$nim = $_POST['nim'];08.$bagianWhere .= "nim = '$nim'";09.}10. 11.if (isset($_POST['namaCat']))12.{13.$namamhs = $_POST['nama'];14.if (empty($bagianWhere))15.{16.$bagianWhere .= "namamhs LIKE '%$namamhs%'";17.}18.else19.{20.$bagianWhere .= " AND namamhs LIKE '%$namamhs%'";21.}22.}23. 24.?>$bagianWhere kosong, maka $bagianWhere akan ditambahkan namamhs LIKE '%namamhs%'. Maksud dari $bagianWhere kosong adalah bila user tidak memilih kategori NIM. Jika user tidak memilih kategori NIM, maka otomatis $bagianWhere nya masih kosong bukan? Namun… bila user juga memilih kategori NIM, atau dengan kata lain $bagianWhere tidak kosong alias sudah terisi dengan nim = '$nim', maka $bagianWhere ditambahkan dengan AND namamhs LIKE '%$namamhs%' sehingga menjadi nim = '$nim' AND namamhs LIKE '%$namamhs%'. Simpel bukan idenya.. Nah.. konsep di atas bisa dilanjutkan untuk kategori yang lain. Akhirnya scriptnya menjadi seperti di bawah ini
01.<?php02. 03.$bagianWhere = "";04. 05.if (isset($_POST['nimCat']))06.{07.$nim = $_POST['nim'];08.if (empty($bagianWhere))09.{10.$bagianWhere .= "nim = '$nim'";11.}12.}13. 14.if (isset($_POST['namaCat']))15.{16.$namamhs = $_POST['nama'];17.if (empty($bagianWhere))18.{19.$bagianWhere .= "namamhs LIKE '%$namamhs%'";20.}21.else22.{23.$bagianWhere .= " AND namamhs LIKE '%$namamhs%'";24.}25.}26. 27.if (isset($_POST['alamatCat']))28.{29.$alamat = $_POST['alamat'];30.if (empty($bagianWhere))31.{32.$bagianWhere .= "alamat LIKE '%$alamat%'";33.}34.else35.{36.$bagianWhere .= " AND alamat LIKE '%$alamat%'";37.}38.}39. 40.if (isset($_POST['sexCat']))41.{42.$sex = $_POST['sex'];43.if (empty($bagianWhere))44.{45.$bagianWhere .= "sex = '$sex'";46.}47.else48.{49.$bagianWhere .= " AND sex = '$sex'";50.}51.}52. 53.?>01.<?php02. 03.$bagianWhere = "";04. 05.if (isset($_POST['nimCat']))06.{07.$nim = $_POST['nim'];08.if (empty($bagianWhere))09.{10.$bagianWhere .= "nim = '$nim'";11.}12.}13. 14.if (isset($_POST['namaCat']))15.{16.$namamhs = $_POST['nama'];17.if (empty($bagianWhere))18.{19.$bagianWhere .= "namamhs LIKE '%$namamhs%'";20.}21.else22.{23.$bagianWhere .= " AND namamhs LIKE '%$namamhs%'";24.}25.}26. 27.if (isset($_POST['alamatCat']))28.{29.$alamat = $_POST['alamat'];30.if (empty($bagianWhere))31.{32.$bagianWhere .= "alamat LIKE '%$alamat%'";33.}34.else35.{36.$bagianWhere .= " AND alamat LIKE '%$alamat%'";37.}38.}39. 40.if (isset($_POST['sexCat']))41.{42.$sex = $_POST['sex'];43.if (empty($bagianWhere))44.{45.$bagianWhere .= "sex = '$sex'";46.}47.else48.{49.$bagianWhere .= " AND sex = '$sex'";50.}51.}52. 53.$query = "SELECT * FROM mhs WHERE ".$bagianWhere;54.$hasil = mysql_query($query);55. 56.?>Nah… berikut ini script secara keseluruhan untuk menampilkan hasil query berdasarkan multi kategori yang dipilih user. Untuk mempercantik tampilan hasil pencarian saya tampilkan dalam bentuk tabel.
01.<?php02. 03.mysql_connect("dbhost", "dbuser", "dbpassword");04.mysql_select_db("dbname");05. 06.$bagianWhere = "";07. 08.if (isset($_POST['nimCat']))09.{10.$nim = $_POST['nim'];11.if (empty($bagianWhere))12.{13.$bagianWhere .= "nim = '$nim'";14.}15.}16. 17.if (isset($_POST['namaCat']))18.{19.$namamhs = $_POST['nama'];20.if (empty($bagianWhere))21.{22.$bagianWhere .= "namamhs LIKE '%$namamhs%'";23.}24.else25.{26.$bagianWhere .= " AND namamhs LIKE '%$namamhs%'";27.}28.}29. 30.if (isset($_POST['alamatCat']))31.{32.$alamat = $_POST['alamat'];33.if (empty($bagianWhere))34.{35.$bagianWhere .= "alamat LIKE '%$alamat%'";36.}37.else38.{39.$bagianWhere .= " AND alamat LIKE '%$alamat%'";40.}41.}42. 43.if (isset($_POST['sexCat']))44.{45.$sex = $_POST['sex'];46.if (empty($bagianWhere))47.{48.$bagianWhere .= "sex = '$sex'";49.}50.else51.{52.$bagianWhere .= " AND sex = '$sex'";53.}54.}55. 56.$query = "SELECT * FROM mhs WHERE ".$bagianWhere;57.$hasil = mysql_query($query);58.echo "<table border='1'>";59.echo "<tr><td>NIM</td><td>Nama Mahasiswa</td><td>Alamat</td><td>Jenis Kelamin</td></tr>";60.while ($data = mysql_fetch_array($hasil))61.{62.echo "<tr><td>".$data['nim']."</td><td>".$data['namamhs']."</td><td>".$data['alamat']."</td><td>".$data['sex']."</td></tr>";63.}64.echo "</table>";65.?>Oya.. bila script di atas tidak jalan silakan download scriptnya langsung di bawah ini
[ Download Script ]
Source : http://blog.rosihanari.net/ide-membuat-script-php-untuk-pencarian-dengan-multi-kategori/