TELAH DIBUKA !!!

Toko Ebook Tutorial "RosihanAri.Net"


Free Ebook Tutorial from Rosihan Ari's Blog

Tutorial Javascript | Tutorial PHP Dasar | Tutorial AJAX | Tutorial CSS | Tutorial FPDF | Tutorial Wordpress



Slot iklan tersedia, pasang iklan di atas

Ebook yang direkomendasikan untuk Anda
Ebook Panduan Praktis OOP di PHP

Script PHP Menampilkan Hasil Pencarian Multikategori dengan Advanced Paging


June 22nd, 2009 | by rosihanari | Cetak Artikel Cetak Artikel

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."'>&lt;&lt; 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 &gt;&gt;</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 ]


Baca Juga Artikel Terkait
Ide Membuat Script PHP untuk Pencarian dengan Multi Kategori
Ide Membuat Advanced Paging dengan PHP
Script PHP untuk Menampilkan Data dalam Tabel dengan Warna Baris Selang-seling
Ide Membuat Script Grafik PHP Untuk Menampilkan Indeks Prestasi Mahasiswa (Studi Kasus)
Script PHP untuk Menampilkan Siswa Belum Bayar SPP (A Study Case)



Slot iklan tersedia, pasang iklan di atas


Kata kunci: paging - PHP - script - search -


Ada 59 komentar dalam artikel ini.



  1. iie says:

    Thanx bgt, ini dia yg saya cari.

  2. wawan says:

    gimana ya buat searcingnya kalo tanpa cekbox
    terimakasih dan mohon bantuannya

  3. wawan says:

    jadi secara langsung pak
    langsung pake input gitu…

    ak buat sendiri pada page 2 dan seterusnya g jalan pak
    mohon bantuannya
    .-= wawan´s last blog ..Persijap Tempa Barisan Pelapis =-.

  4. Pak Ari ada error pada paging bagianParam, jika form tidak di isi maka pagingnya menjadi misal : index.php?go=cari&alamat=XXX& <– XXX = kosong tanpa keterangan.

  5. maulidan says:

    Ass, mas gimana kalau gak pake input type button atau submit, tapi kita pake link bisa gak kayak di joomla untuk menghapus ataupun mengedit kita tinggal centangkan checkboxnya lalu di klik link edit ataupun delete. Terimakasih Wss.

  6. nay says:

    pak rosihan.saya mau nanya.kalo misalnya saja paging yang ada idnya gmana yah pak?misalnya saja saya kan ada page karyawan.php?id=220 nah kalo misalnya page 1 dia mau.tapi ketika page 2 dia tidak mengeluarkan apa apa..apa mungkin karena idnya tidak terbaca di page 2 yah pak?mohon pencerahannya.terimakasi pak.:)

    • rosihanari says:

      @nay: kemungkinan besar memang id nya gak kebaca di page 2 nya. Coba Anda echo kan id nya di halaman 2 nya. Tampil gak? kalo gak tampil berarti memang gak kebaca.

  7. joyo says:

    makasih . siipp banget

  8. yonand says:

    mas cara menempatkan IF then pada koding diatas kyk mn…klw ada peringatan:

    …Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\XAMPP\xampp\htdocs\XXXXX\cb_dl\cb.php on line 124

    dan

    …Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\XAMPP\xampp\htdocs\XXXXX\cb_dl\cb.php on line 140

    maaf saya br bljr php….and terima kasih banyak atas bantuannya……..

    • rosihanari says:

      @yonand: Script di atas bisa jalan di AppServ, saya belum test di XAMPP. Coba Anda ganti pakai AppServ mas, itu hanya pengaruh di konfigurasi php.ini nya saja.

  9. irvan says:

    pak… saia mau tanya..
    kalo saya gabungkan script diatas di dalam satu file .php.. ketika di coba di submit terdapat eror..

    itu bgaimana ya pak??
    sy ingin proses search dan script form ada di satu page??

    mohon pencerahannya pak?!!

    • rosihanari says:

      @irvan: coba cek lagi scriptnya mas, pasti ada yang kurang benar… Harusnya digabung atau tidaknya dalam satu file .php, keduanya pasti bisa kok.

  10. irvan says:

    sudahh bisa pak.. terimakasih atas tutorial ini pak,,
    tapii saya ingin bertanya lagii pak,,
    di script yg bpk cthkn ini mnmpilkan 5 data tiap halaman,, di db, saya mmpunyai lbh dari 5 data,, seharusnya data selebihnya ada di page 2 kn ya pak?? tapi kenapa tidak muncul?? solusinya bgaimana pak??

    • rosihanari says:

      @irvan: bisa ah mas, di contoh tsb saya juga contohkan lebih dari 5 halaman (di screen shot tampilan kan keliatan halaman 2) dst. Coba cek lagi scriptnya ya… terutama di query nya