cara membuat multi pencarian kategori.php
OK.. pertama.. kita siapkan
databasenya terlebih dahulu, beserta tabelnya. Kalau perlu recordnya sekalian
untuk contoh saja.
CREATE TABLE mhs (
nim varchar(10),
namamhs varchar(30)
alamat text,
sex varchar(10),
PRIMARY KEY (nim)
);
INSERT INTO `mhs` VALUES ('M0197001', 'ROSIHAN ARI YUANA',
'COLOMADU', 'L');
INSERT INTO `mhs` VALUES ('M0197002', 'DWI AMALIA FITRIANI',
'KUDUS', 'P');
INSERT INTO `mhs` VALUES ('M0197003', 'FAZA FAUZAN KH.',
'COLOMADU', 'L');
INSERT INTO `mhs` VALUES ('M0197004', 'NADA HASANAH',
'COLOMADU', 'P');
INSERT INTO `mhs` VALUES ('M0197005', 'MUH. AHSANI TAQWIM',
'COLOMADU', 'L');
Selanjutnya kita siapkan form
pencariannya.
form.htm
<h1>Cari Data Mahasiswa</h1>
<p>Pilih kategori pencarian</p>
<form method="post"
action="proses.php">
<table>
<tr><td><input type="checkbox"
name="nimCat"> NIM</td><td><input
type="text" name="nim"></td></tr>
<tr><td><input type="checkbox"
name="namaCat"> Nama Mahasiswa</td><td><input
type="text" name="nama"></td></tr>
<tr><td><input type="checkbox"
name="alamatCat"> Alamat</td><td><input
type="text" name="alamat"></td></tr>
<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>
<tr><td></td><td><input
type="submit" name="submit"
value="Submit"></td></tr>
</table>
</form>
Karena bersifat multi kategori, maka
sebaiknya kita gunakan komponen checkbox. Untuk masing-masing checkbox diberi
nama yang berbeda-beda, misal di situ ada ‘nimCat’, ‘namaCat’ dst.
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:
SELECT * FROM mhs WHERE nim = '...';
Bila user memilih kategorinya NIM
dan nama mahasiswa, maka querynya berbentuk:
SELECT * FROM mhs WHERE nim = '...' AND namamhs LIKE
'%...%';
Bila user memilih kategorinya nama
mahasiswa, alamat dan jenis kelamin, maka querynya berbentuk:
SELECT * FROM mhs WHERE namamhs LIKE '%...%' AND alamat LIKE
'%...%' AND sex = '...';
Dari beberapa contoh di atas, kita
bisa simpulkan bahwa terdapat bagian query yang sama entah apapun pilihan
kategorinya yaitu bagian: SELECT * FROM mhs WHERE. Sedangkan bagian yang berbeda-beda hanyalah bagian klausa
WHERE nya saja. OK… berarti sekarang kita hanya fokus ke bagian WHERE saja
Sekarang 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
<?php
$bagianWhere = "";
?>
Selanjutnya, kita buat script untuk
mengkondisikan bila user memilih kategori NIM.
<?php
$bagianWhere = "";
if (isset($_POST['nimCat']))
{
$nim =
$_POST['nim'];
$bagianWhere .=
"nim = '$nim'";
}
?>
Maksud dari script di atas adalah,
jika user memilih checkbox NIM yang tadi diberi nama ‘nimCat’, maka akan dibaca
nilai NIM yang berasal dari textbox NIM. Selanjutnya setelah membaca nilai NIM
yang mau dicari, maka pada bagian WHERE ditambahkan perintah nim = '$nim'. Supaya membentuk query SELECT * FROM mhs WHERE nim = nim =
'$nim'.
Berikutnya script jika kategori nama
mahasiswa dipilih
<?php
$bagianWhere = "";
if (isset($_POST['nimCat']))
{
$nim =
$_POST['nim'];
$bagianWhere .=
"nim = '$nim'";
}
if (isset($_POST['namaCat']))
{
$namamhs =
$_POST['nama'];
if
(empty($bagianWhere))
{
$bagianWhere
.= "namamhs LIKE '%$namamhs%'";
}
else
{
$bagianWhere
.= " AND namamhs LIKE '%$namamhs%'";
}
}
?>
Nah… untuk bagian script untuk
kategori nama mahasiswa ini agak beda tapi sedikit. Pada prinsipnya hampir
sama, yaitu dicek dulu apakah checkbox nama mahasiswa dipilih atau tidak. Jika
dipilih maka baca value nama mahasiswa yang ingin dicari. Selanjutnya,
dilakukan pengecekan lagi. Jika $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
<?php
$bagianWhere = "";
if (isset($_POST['nimCat']))
{
$nim =
$_POST['nim'];
if
(empty($bagianWhere))
{
$bagianWhere
.= "nim = '$nim'";
}
}
if (isset($_POST['namaCat']))
{
$namamhs =
$_POST['nama'];
if
(empty($bagianWhere))
{
$bagianWhere
.= "namamhs LIKE '%$namamhs%'";
}
else
{
$bagianWhere
.= " AND namamhs LIKE '%$namamhs%'";
}
}
if (isset($_POST['alamatCat']))
{
$alamat =
$_POST['alamat'];
if
(empty($bagianWhere))
{
$bagianWhere
.= "alamat LIKE '%$alamat%'";
}
else
{
$bagianWhere
.= " AND alamat LIKE '%$alamat%'";
}
}
if (isset($_POST['sexCat']))
{
$sex =
$_POST['sex'];
if
(empty($bagianWhere))
{
$bagianWhere
.= "sex = '$sex'";
}
else
{
$bagianWhere
.= " AND sex = '$sex'";
}
}
?>
Nah… setelah selesai membentuk
bagian WHERE nya, terakhir kita padukan bagian WHERE yang terbentuk ke dalam
query utuhnya.
<?php
$bagianWhere = "";
if (isset($_POST['nimCat']))
{
$nim =
$_POST['nim'];
if
(empty($bagianWhere))
{
$bagianWhere
.= "nim = '$nim'";
}
}
if (isset($_POST['namaCat']))
{
$namamhs =
$_POST['nama'];
if
(empty($bagianWhere))
{
$bagianWhere
.= "namamhs LIKE '%$namamhs%'";
}
else
{
$bagianWhere
.= " AND namamhs LIKE '%$namamhs%'";
}
}
if (isset($_POST['alamatCat']))
{
$alamat =
$_POST['alamat'];
if
(empty($bagianWhere))
{
$bagianWhere
.= "alamat LIKE '%$alamat%'";
}
else
{
$bagianWhere
.= " AND alamat LIKE '%$alamat%'";
}
}
if (isset($_POST['sexCat']))
{
$sex =
$_POST['sex'];
if
(empty($bagianWhere))
{
$bagianWhere
.= "sex = '$sex'";
}
else
{
$bagianWhere
.= " AND sex = '$sex'";
}
}
$query = "SELECT * FROM mhs WHERE ".$bagianWhere;
$hasil = mysql_query($query);
?>
Sederhana bukan idenya? Kalau kita
buat satu-persatu IF nya tanpa trik di atas tentu kita butuh 24 buah IF untuk
semua kemungkinannya. Namun dengan trik di atas hanya butuh 4 buah IF saja.
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.
<?php
mysql_connect("dbhost", "dbuser",
"dbpassword");
mysql_select_db("dbname");
$bagianWhere = "";
if (isset($_POST['nimCat']))
{
$nim =
$_POST['nim'];
if
(empty($bagianWhere))
{
$bagianWhere
.= "nim = '$nim'";
}
}
if (isset($_POST['namaCat']))
{
$namamhs =
$_POST['nama'];
if
(empty($bagianWhere))
{
$bagianWhere
.= "namamhs LIKE '%$namamhs%'";
}
else
{
$bagianWhere
.= " AND namamhs LIKE '%$namamhs%'";
}
}
if (isset($_POST['alamatCat']))
{
$alamat = $_POST['alamat'];
if
(empty($bagianWhere))
{
$bagianWhere
.= "alamat LIKE '%$alamat%'";
}
else
{
$bagianWhere
.= " AND alamat LIKE '%$alamat%'";
}
}
if (isset($_POST['sexCat']))
{
$sex =
$_POST['sex'];
if (empty($bagianWhere))
{
$bagianWhere
.= "sex = '$sex'";
}
else
{
$bagianWhere
.= " AND sex = '$sex'";
}
}
$query = "SELECT * FROM mhs WHERE ".$bagianWhere;
$hasil = mysql_query($query);
echo "<table border='1'>";
echo "<tr><td>NIM</td><td>Nama
Mahasiswa</td><td>Alamat</td><td>Jenis
Kelamin</td></tr>";
while ($data = mysql_fetch_array($hasil))
{
echo
"<tr><td>".$data['nim']."</td><td>".$data['namamhs']."</td><td>".$data['alamat']."</td><td>".$data['sex']."</td></tr>";
}
echo "</table>";
?>
OK deh.. selamat mencoba.penulis by Rosihari ari
Komentar
Posting Komentar