pada artikel kali ini, saya akan memaparkan bagaimana teknik untuk
menggabungkan kedua hal tersebut atau tepatnya bagaimana teknik membuat
script advanced paging untuk menampilkan hasil pencarian multikategori. Artikel ini mudah-mudahan bisa dimanfaatkan oleh para mahasiswa saya yang sedang mendapat tugas dari dosennya
Untuk lebih mempermudah penjelasan, langsung saja kita terapkan ke
studi kasus. Lagi-lagi studi kasusnya terkait dengan data mahasiswa.
Karena teknik ini merupakan gabungan dari teknik pencarian multikategori dan advanced paging,
maka script ini nantinya juga merupakan kombinasi dari keduanya. Oleh
karena itu bila Anda belum menguasai kedua teknik tersebut, saya
sarankan baca dan pelajarilah terlebih dahulu.
Pokok persoalan utama dari permasalahan untuk menampilkan hasil
pencarian dengan advanced paging adalah bagaimana supaya data yang
ditampilkan dalam paging ini sesuai dengan kategori pencarian yang
dipilih. Apabila yang ditampilkan dalam paging adalah seluruh data yang
ada dalam tabel database, tentu hal ini tidak menjadi masalah. Dengan membaca artikel tentang advanced paging sebelumnya, masalah ini akan selesai.
Sebagai awal pembahasan, kita coba kembali melihat struktur tabel mahasiswanya.
CREATE TABLE mhs (
nim varchar(10),
namamhs varchar(30),
alamat text,
sex varchar(10),
PRIMARY KEY (nim)
)
Sedangkan form pencarian multikategorinya adalah sebagai berikut
cari.html
Cari Data Mahasiswa
Pilih kategori pencarian
Bila dilihat di browser, maka form pencarian di atas akan memiliki tampilan seperti di bawah ini:

Selanjutnya kita akan coba bahas mengenai script menampilkan data hasil pencarian menggunakan teknik paging.
Tentu kita tahu bahwa pencarian dengan kategori akan membatasi data
yang muncul sebagai hasil pencarian. Kategori pencarian ini nanti akan
dikaitkan dengan adanya batasan syarat dalam query SQL,
dalam hal ini adalah adanya klausa WHERE (syarat) dalam statement
SELECT nya. Anda dapat membaca kembali bagaimana mengimplementasikan
konsep penggunaan query SQL untuk pencarian multi kategori ini dalam artikel sebelumnya.
Bila hal tersebut diterapkan dalam paging, maka syarat atau kategori
pencarian yang dipilih harus dikenali dalam setiap halaman pagingnya.
Tidak hanya syarat atau kategori pencarian yang harus dikenali di
setiap halaman paging, namun juga kata kunci yang digunakan dalam
pencarian. Mengapa diperlukan? ya… karena keduanya akan digunakan dalam
query SQL untuk menampilkan data.
Trus… bagaimana caranya supaya kategori dan kata kunci pencarian
yang dipilih tersebut dikenali di setiap halaman paging? caranya adalah
dengan menggunakan teknik request GET,
yaitu menambahkan parameter pada URL link di setiap halaman paging.
Dalam setiap halaman paging, kedua hal tersebut harus selalu ada dalam
link pagingnya.
Berikut ini adalah contoh URL link yang akan digunakan untuk
menampilkan data dengan kategori yang dipilih berdasarkan NAMA
MAHASISWA dan ALAMAT. Kata kunci yang digunakan untuk NAMA MAHASISWA
adalah ‘xxx’ dan kata kunci ALAMAT adalah ‘yyy’.
http://.../show.php?page=1&namamhs=xxx&alamat=yyy
Dalam URL berparameter tersebut, untuk mengetahui kategori yang digunakan cukup menggunakan perintah isset($_GET['...']), misal isset($_GET['namamhs']) untuk mengecek apakah NAMA MAHASISWA digunakan sebagai kategori pencarian. Jika kategori tersebut digunakan, maka nilai isset($_GET['namamhs']) akan bernilai TRUE.
Secara lengkap, script untuk menampilkan hasil pencarian multi
kategori dengan teknik advanced paging adalah seperti di bawah ini:
show.php
<?php
mysql_connect('dbhost', 'dbuser', 'dbpass');
mysql_select_db('dbname');
// $bagianWhere digunakan membentuk syarat WHERE di query SQL
// sesuai kategori pencarian yang dipilih
$bagianWhere = "";
// $bagianParam digunakan untuk membentuk parameter link di setiap halaman paging
// berisi kategori yang dipilih dan keywordnya
$bagianParam = "";
// jika NIM termasuk kategori pencarian
if (isset($_POST['nimCat']) || isset($_GET['nim']))
{
if (isset($_POST['nimCat'])) $nim = $_POST['nim'];
if (isset($_GET['nim'])) $nim = $_GET['nim'];
if (empty($bagianWhere) && empty($bagianParam))
{
$bagianWhere .= "nim = '$nim'";
$bagianParam .= "nim=".$nim;
}
}
// jika NAMA MAHASISWA termasuk kategori pencarian
if (isset($_POST['namaCat']) || isset($_GET['namamhs']))
{
if (isset($_POST['namaCat'])) $namamhs = $_POST['namamhs'];
if (isset($_GET['namamhs'])) $namamhs = $_GET['namamhs'];
if (empty($bagianWhere) && empty($bagianParam))
{
$bagianWhere .= "namamhs LIKE '%$namamhs%'";
$bagianParam .= "namamhs=".$namamhs;
}
else
{
$bagianWhere .= " AND namamhs LIKE '%$namamhs%'";
$bagianParam .= "&namamhs=".$namamhs;
}
}
// jika ALAMAT termasuk kategori pencarian
if (isset($_POST['alamatCat']) || isset($_GET['alamat']))
{
if (isset($_POST['alamatCat'])) $alamat = $_POST['alamat'];
if (isset($_GET['alamat'])) $alamat = $_GET['alamat'];
if (empty($bagianWhere) && empty($bagianParam))
{
$bagianWhere .= "alamat LIKE '%$alamat%'";
$bagianParam .= "alamat=".$alamat;
}
else
{
$bagianWhere .= " AND alamat LIKE '%$alamat%'";
$bagianParam .= "&alamat=".$alamat;
}
}
// jika JENIS KELAMIN termasuk kategori pencarian
if (isset($_POST['sexCat']) || isset($_GET['sex']))
{
if (isset($_POST['sexCat'])) $sex = $_POST['sex'];
if (isset($_GET['sex'])) $sex = $_GET['sex'];
if (empty($bagianWhere) && empty($bagianParam))
{
$bagianWhere .= "sex = '$sex'";
$bagianParam .= "sex=".$sex;
}
else
{
$bagianWhere .= " AND sex = '$sex'";
$bagianParam .= "&sex=".$sex;
}
}
// jumlah data yang akan ditampilkan per halaman
$dataPerPage = 5;
// apabila $_GET['page'] sudah didefinisikan, gunakan nomor halaman tersebut,
// sedangkan apabila belum, nomor halamannya 1.
if(isset($_GET['page']))
{
$noPage = $_GET['page'];
}
else $noPage = 1;
// perhitungan offset
$offset = ($noPage - 1) * $dataPerPage;
// query SQL untuk menampilkan data perhalaman sesuai offset
$query = "SELECT * FROM mhs WHERE ".$bagianWhere." LIMIT $offset, $dataPerPage";
$hasil = mysql_query($query);
// menampilkan data
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>";
// mencari jumlah semua data dalam tabel guestbook
$query = "SELECT COUNT(*) AS jumData FROM mhs WHERE ".$bagianWhere;
$hasil = mysql_query($query);
$data = mysql_fetch_array($hasil);
$jumData = $data['jumData'];
// menentukan jumlah halaman yang muncul berdasarkan jumlah semua data
$jumPage = ceil($jumData/$dataPerPage);
// menampilkan link previous
if ($noPage > 1) echo "<a href='".$_SERVER['PHP_SELF']."?page=".($noPage-1)."&".$bagianParam."'><< Prev</a>";
// memunculkan nomor halaman dan linknya
for($page = 1; $page <= $jumPage; $page++)
{
if ((($page >= $noPage - 3) && ($page <= $noPage + 3)) || ($page == 1) || ($page == $jumPage))
{
if (($showPage == 1) && ($page != 2)) echo "...";
if (($showPage != ($jumPage - 1)) && ($page == $jumPage)) echo "...";
if ($page == $noPage) echo " <b>".$page."</b> ";
else echo " <a href='".$_SERVER['PHP_SELF']."?page=".$page."&".$bagianParam."'>".$page."</a> ";
$showPage = $page;
}
}
// menampilkan link next
if ($noPage < $jumPage) echo "<a href='".$_SERVER['PHP_SELF']."?page=".($noPage+1)."&".$bagianParam."'>Next >></a>";
?>
Berikut ini tampilan yang menggambarkan pencarian data mahasiswa berdasarkan ALAMAT dan JENIS KELAMIN

dan tampilan hasil pencariannya adalah

Anda dapat pula mendownload script semuanya di bawah ini
[ Download Script ]
Thanks to : blog.rosihanari.net