Free Ebook Tutorial from Rosihan Ari's Blog

Tutorial Javascript | Tutorial PHP | Tutorial AJAX | Tutorial CSS | Tutorial FPDF | Tutorial Wordpress | Tutorial Java SE


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


GampSMS SMS Gateway

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 ]




Share ke Facebook Share ke Twitter
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)

Kata kunci: paging - PHP - script - search -


Ada 59 komentar dalam artikel ini.



  1. Wahyu says:

    terimakasih tutorialnya pak….

  2. ade says:

    duh mas, dr kmrin sy cari2 penyebab kesalahanx tp tdk ketemu2 jg..
    dah berulang2 kali sy cek scriptx,tp tetap muncul 2 pesan ini…

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in E:\AppServ\www\skripsiku\info_barang.php on line 77

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in E:\AppServ\www\skripsiku\info_barang.php on line 98

    gimana kira2 ini ya mas??

  3. ade says:

    Mkasih bxk mas dah mjwb p’taxan sy..
    Sy adalah pgunjung setia blog mas ini.
    Setelah edit sana-sini sdh tdk eror lg mas.
    Kmrin sy mwx gabung scriptx jd 1 file,jd form pencarianx gabung sm hasil yg dicari.
    Stelah sy gabung,hasil yg dicari muncul di hal.1,tp jika b’pindah di hal.2 muncul error,sy cr tw penyebabx,t’xta rupax saat b’pndah kehal.2 inputan di formx mnjd kosong,krn b’pindah hal.
    Edit sana-sini lg dah g error,tp saat berpindah ke hal.2 lg,hasil yg dicari melalui form tdk sesuai sm hasil yg di tampilkan mas.
    Disini ini yg sy bingung smpe skrg mas..
    Tolong Banget nih mas dibantu..ini z bwt utk mnyelesaikn skripsi ku mas,sbntr lg deadline mas.
    bgmn carax,jika file ini digabung dan pada hal.2 dan seterusx data yg di cari sesuai.
    Mohon Maaf Mas klo komentarx pnjang bgt..
    Trima Kasih Sebelumx.

  4. ade says:

    Oke mas p’taxan sy kmrin sy dah dpt solusix.
    t’xta harus menambhkn beberapa code lg spy file pencarian multi kategori perpage ini bs digabung jd 1 file.
    jd parameter $bagianWhere tdk kosong pd saat b’pindah halaman..
    Mkasi baxk sdh m’bantu ya mas..
    Sukses Selalu…

  5. pemula says:

    if (isset($_POST['nimCat']) || isset($_GET['nim']))

    mas antara nimCat dan nim ko berbeda yah
    + yang nimCat pakai POST
    + yang nim pakai GET

    bisa dijelaskan mas alsanya?
    Terima Kasih

  6. key says:

    Mantab kali…. thanks bos

  7. iyan says:

    Bang mau tanya yg mngkin gak terkait dgn judul diatas… misalnya kita lagi buka akun FB trus ada yg ngirim pesan kekita.. maka halaman langsung menampilkan penambahan pesan walaupun kita tidak menekan tombol apapun (tidak ada proses refresh atau reload halaman)
    itu bagaimana teknisnya…saya udh berusaha nyari lwt bantuan google blom ada yang pas..mohon pencerahannya…terima kasih

  8. riri says:

    mau nanya mas..
    saya udah bikin coding spt yang di atas..pas halaman pertamanya jalan, tapi halaman ke-2 dst nya ga jalan..
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource..

    gmn yah..

  9. Untara says:

    Mas Ari Ysh,
    Saya sdh coba script paging dgn pencarian multi kategorinya di aplikasi saya. Ada satu masalah, yaitu pada saat pilihan untuk tampilan halaman berikutnya, jml datanya bertambah dan tampilannya menjadi all kategori.Untuk tampilan di hal pertama tdk ada masalah, jml data sdh sesuai dgn kategori yg dipilih.
    Mohon pencerahannya Mas, Trims.

    • rosihanari says:

      @untara: coba didebug lagi scriptnya, mungkin kategorinya tidak dibaca di halaman paging berikutnya. Harusnya kategori itu diletakkan di parameter link setiap halamannya.

  10. Aslkum wr wb,
    mas maaf mau nanya, kalau script diatas diaplikasikan untuk model pilihan yang bentuknya list drop down gimana?
    saya udah nyoba utak atik tapi masih belom jalan dgn baik, yg saya bikin spt ini:

    1. file form.php di dalamnya ada bentuk pilihan drop down, action nya ke prosesForm.php.
    2. di file prosesForm.php, bentuk pilihan drop down tsb diambil sama variabel pilihan=$_POST['pilihan']
    3. file prosesForm tsb ada paging-nya, link next, prev ama nomor nomor halaman,

    saya udah nyoba utak atik pake script di atas tapi masih aja ada variabel yg gak dikenali di halaman prev atau next….

    untuk kasus drop down mungkin mas rosihan bisa kasih sedikit clue?
    maturnuwun…

  11. Yoanna says:

    Terimakasih, semoga Allah selalu melimpahkan pahala yang berlimpah Amin

  12. masgon says:

    mas sy sdh berhasil mengaplikasikannya…
    jika dibuat tanpa ada ceklist/cekbox itu gmn yah? jd user langsung ketik di inputan formnya terus nantinya dieksekusi dgn melihat dari apa-apa aja yg diisinya…bingung



 

Komentar/pertanyaan Anda!

Mohon maaf, komentar/pertanyaan yang menggunakan email palsu atau komentar bernada negatif, cemooh, umpatan, cacian atau sejenisnya secara otomatis akan terhapus karena dianggap spam dan tidak akan tampil

Dimohon jangan pula memasukkan code program dalam bentuk apapun ke dalam komentar karena akan dianggap spam.

Mohon maaf jika seandainya ada beberapa pertanyaan Anda yang tidak direspon atau ditanggapi mengingat banyaknya komentar yang masuk dan keterbatasan kemampuan/ilmu saya dalam menjawab pertanyaan satu persatu. Saya harap Anda bisa memahami dan memakluminya.

Semua komentar atau pertanyaan yg masuk tidak akan langsung tampil di halaman ini, karena akan dimoderasi dahulu.


*