Membuat Script PHP untuk Pencarian dengan Multi Kategori
Dalam suatu aplikasi yang terkait dengan database, seringkali muncul fasilitas untuk pencarian data. Untuk mempersempit scope pencarian biasanya pencarian dilakukan berdasarkan kategori tertentu. Kategori pencarian bisa bersifat single category artinya hanya berdasar satu kategori pencarian saja atau ada yang bersifat multiple category atau multi kategori dimana user bisa melakukan pencarian berdasarkan lebih dari satu kategori.
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 Kalau kita terapkan logika seperti halnya pada single kategori, maka akan sulit diimplementasikan. Mengapa sulit? ya.. karena akan banyak kemungkinan yang terjadi dalam pemilihan kategorinya. Coba bayangkan, seandainya untuk data mahasiswa terdapat 10 buah field. Untuk single kategori, tidak ada masalah karena kemungkinkan pemilihan kategorinya ada 10 buah (Anda membuat statement kondisional sebanyak 10 buah). Namun.. jika menggunakan multi kategori, wah… bisa-bisa Anda pusing karena terlalu banyak kemungkinannya si user tadi memilih kategorinya. Hitung-hitung ada sekitar jutaan kemungkinan. wow… capee dehh…
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.
Selanjutnya kita siapkan form pencariannya.
form.htm
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:
Bila user memilih kategorinya NIM dan nama mahasiswa, maka querynya berbentuk:
Bila user memilih kategorinya nama mahasiswa, alamat dan jenis kelamin, maka querynya berbentuk:
Dari beberapa contoh di atas, kita bisa simpulkan bahwa terdapat bagian query yang sama entah apapun pilihan kategorinya yaitu bagian:
Sekarang kita analisis lagi bagian WHERE nya. Jika yang dipilih hanya NIM saja, maka dalam WHERE ditambahkan
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
Selanjutnya, kita buat script untuk mengkondisikan bila user memilih kategori 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
Berikutnya script jika kategori nama mahasiswa dipilih
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
Nah.. konsep di atas bisa dilanjutkan untuk kategori yang lain. Akhirnya scriptnya menjadi seperti di bawah ini
Nah… setelah selesai membentuk bagian WHERE nya, terakhir kita padukan bagian WHERE yang terbentuk ke dalam query utuhnya.
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.
OK deh.. selamat mencoba
untuk mendapatkan php nya silahkan dowload link di bawah ini
http://www.ziddu.com/download/17764564/search.zip.html
Dalam suatu aplikasi yang terkait dengan database, seringkali muncul fasilitas untuk pencarian data. Untuk mempersempit scope pencarian biasanya pencarian dilakukan berdasarkan kategori tertentu. Kategori pencarian bisa bersifat single category artinya hanya berdasar satu kategori pencarian saja atau ada yang bersifat multiple category atau multi kategori dimana user bisa melakukan pencarian berdasarkan lebih dari satu kategori.
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 Kalau kita terapkan logika seperti halnya pada single kategori, maka akan sulit diimplementasikan. Mengapa sulit? ya.. karena akan banyak kemungkinan yang terjadi dalam pemilihan kategorinya. Coba bayangkan, seandainya untuk data mahasiswa terdapat 10 buah field. Untuk single kategori, tidak ada masalah karena kemungkinkan pemilihan kategorinya ada 10 buah (Anda membuat statement kondisional sebanyak 10 buah). Namun.. jika menggunakan multi kategori, wah… bisa-bisa Anda pusing karena terlalu banyak kemungkinannya si user tadi memilih kategorinya. Hitung-hitung ada sekitar jutaan kemungkinan. wow… capee dehh…
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
(
'09043120'
,
'DYAN PURNOMO'
,
'SURABAYA'
,
'L'
);
10.
INSERT
INTO
`mhs`
VALUES
(
'09043121'
,
'AMALIA FITRI'
,
'SIDOARJO'
,
'P'
);
11.
INSERT
INTO
`mhs`
VALUES
(
'
09043122
'
,
'CHAIRUL ANWAR.'
,
'SURABAYA'
,
'L'
);
12.
INSERT
INTO
`mhs`
VALUES
(
'
09043123
'
,
'ERVAN ADI'
,
'SUABAYA'
,
'P'
);
13.
INSERT
INTO
`mhs`
VALUES
(
'
09043124
'
,
'IHWANUL ANIQ'
,
'GRESIK'
,
'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.
<?php
2.
$bagianWhere
=
""
;
3.
?>
01.
<?php
02.
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.
<?php
02.
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.
else
19.
{
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.
<?php
02.
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.
else
22.
{
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.
else
35.
{
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.
else
48.
{
49.
$bagianWhere
.=
" AND sex = '$sex'"
;
50.
}
51.
}
52.
53.
?>
01.
<?php
02.
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.
else
22.
{
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.
else
35.
{
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.
else
48.
{
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.
<?php
02.
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.
else
25.
{
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.
else
38.
{
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.
else
51.
{
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.
?>
untuk mendapatkan php nya silahkan dowload link di bawah ini
http://www.ziddu.com/download/17764564/search.zip.html
5 komentar:
thanks infonya gan..
bermanfaan banget.. ijin copy sama download yaaa...
Hebat, thank....
makasih banyak ilmunya, berjalan lancar banget
saya menambahkan scrip between '$tgl1' and '$tgl2' untuk mencari data di antara 2 tanggal, tetapi hasilnya blank/ kertas kosong tidak ada isinya
mohon pencerahannya ?
makasih banyak
Kayaknya script ini bisa di modif jadi menu kategori di sidebar kiri ya mas, kebetulan saya lagi buat nieh, aku coba dulu ah, makasih mas!
Mas, misalnya yang dicari ada 2 tabel bagaimana? Mohon pencerahannya.
Terima kasih.
Posting Komentar