• Home
  • /
  • Database
  • /
  • Script PHP Menampilkan Hasil Pencarian Multikategori dengan Advanced Paging

Script PHP Menampilkan Hasil Pencarian Multikategori dengan Advanced Paging

 

Pada dua artikel terpisah sebelumnya, saya pernah memaparkan bagaimana teknik membuat script untuk pencarian multikategori dan juga teknik bagaimana membuat script advanced paging.

Sedangkan 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


<h1>Cari Data Mahasiswa</h1>

<p>Pilih kategori pencarian</p>

<form method="post" action="show.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="namamhs"></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>

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 ]

 

Bagikan artikel ini jika bermanfaat !

Assalaamu'alaikum.. aktivitas keseharian saya mengajar di Universitas Sebelas Maret, dengan matakuliah pemrograman dan basis data. Adapun bidang penelitian saya tentang computational thinking dan computer-aided learning.

Leave a Reply