Monday, October 31, 2011

Membuat pencarian data lebih dari satu table pada database dengan php script

Sekarang saya akan mencoba menulis sebuah tutorial php, mengenai pencarian data lebih dari satu table pada database dengan menggunakan fungsi if pada php script.
Sepintas saja mengenai manfaat dengan menyediakan pasilitas pencarian pada website kita....

Biasanya sebuah website dinamis banyak yang menerapkan pasilitas pencarian untuk di gunakan oleh para pengunjung pada website nya, seperti blog-blog atau website toko online dan lain sebagainya, dimana fungsi pencarian ini untuk mempermudah para pengunjung mendapatkan informasi produk dan dan lain-lain didalam website tesebut.

Hal ini, perlu kita perhatikan, mungkin pasilitas pencarian ini adalah termasuk hal yang penting dengan keakuratan dalam pencarianya.

Mengapa saya katakan demikian? Karena jika seorang pengunjung yang datang langsung menuju ke halaman depan, biasanya malas untuk browse map situs, karena mungkin itu di sebabkan banyaknya link yang ada pada website kita, sehingga dia akan merasa jenuh dan akan meninggalkan website kita begitu saja, karena dia merasa tidak menemukan apa yang sedang di cari nya.

Hal demikian lah yang biasanya para pengunjung menggunakan jalan alternatif, yaitu fasilitas pencarian yang disediakan, dan sangat disayangkan jika pasilitas pencarian itu tidak ada pada website kita.

Satu hal lagi yang di anggap penting, yaitu mengenai optimalisasi data hasil pencarian tersebut, harus akurat dan sesuai dengan keyword yang di inputkan pada form pencarian, dan biasanya para pencari tidak hanya mengetikan satu keyword saja agar hasil yang dia cari lebih optimal, dan kenyataanya hasil pencarian itu tidak ada, wah.... Tentu itu sangat menjengkelkan sekali!

Baiklah, sekarang kita langsung saja buat contoh database mysql menggunakan phpMyAdmin, dimana nantinya data yang akan di cari berada pada database tersebut, dengan menggunakan fungsi if. Jika pencarian tidak ditemukan pada table ke satu, lalu akan di lanjutkan ke table yang ke dua, dan jika masih belum ditemukan juga, maka akan di lanjutkan kepada table yang ke tiga, dan seterus nya....

Pada kasus ini, saya hanya buat 3 table saja sebagai contoh proses nya, dan kamu bisa menerapkanya pada database yang ada pada website yang kamu miliki, tinggal di sesuaikan saja table dan field-field nya!

Buatlah database baru bernama "pencarian", kemudian buatlah 3 buah table di dalam database tersebut, seperti pada insert database di bawah ini yang sudah saya persiapkan sebagai contoh nya, lengkap dengan dumping data untuk ke 3 table tersebut, dengan isi field-field nya :


Table structure untuk table1 :

CREATE TABLE `table1` (
  `id` int(11) NOT NULL auto_increment,
  `detail` varchar(500) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

 Dumping data untuk table1 : 

INSERT INTO `table1` VALUES (1, 'ini adalah detail table ke satu silahkan tes dengan kata kunci ke satu');

Table structure untuk table2 :

CREATE TABLE `table2` (
  `id` int(11) NOT NULL auto_increment,
  `detail` varchar(500) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

 Dumping data untuk table2 : 

INSERT INTO `table2` VALUES (1, 'ini adalah detail table ke dua silahkan tes dengan kata kunci ke dua');

Table structure untuk table3 :

CREATE TABLE `table3` (
  `id` int(11) NOT NULL auto_increment,
  `detail` varchar(500) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

 Dumping data untuk table3 :  

INSERT INTO `table3` VALUES (1, 'ini adalah detail table ke tiga silahkan tes dengan kata kunci ke tiga');

Sekarang saatnya untuk membuat koneksi ke database mysql tersebut, yang nantinya akan kita include ke script pengolahan hasil pencarian yang berada pada file hasil-cari.php

config.php

<?php
  $dbhost = 'localhost'; //server hosting kamu
  $dbuser = 'root'; //username mysql kamu biasanya root
  $dbpass = 'password'; //password mysql kamu
  $dbname = 'pencarian'; //nama database yang kamu buat
  mysql_connect("$dbhost","$dbuser","$dbpass"); //koneksi ke mysql
  mysql_select_db("$dbname") or error(mysql_error()); //memilih nama database
  ?>

Kemudian buatlah sebuah formulir untuk pencarian, sebagai berikut :

form.php

<form action="hasil-cari.php" method="post" name="pencarian" id="pencarian">
  <input type="text" name="search" id="search"/>
  <input type="submit" name="submit" id="submit" value="Cari Data!"/>
</form>

Dan untuk proses data hasil pencarian yang dikirim via POST dari formulir form.php, akan di terima dan di proses oleh hasil-cari.php

hasil-cari.php
<?php
//include kan koneksi ke database disini
include "config.php";

//jika form pencarian mengandung isi maka akan di proses
if ((isset($_POST['submit'])) AND ($_POST['search'] <> ""))
{
  //menerima dan membaca data yang di terima via form metode POST
  $search = $_POST['search'];
 
  //memilih table ke satu dari database mysql
  $sql1 = mysql_query("SELECT * FROM table1 WHERE detail LIKE '%$search%' ") or die(mysql_error());
 
  //membuat jumlah hasil pencarian pada table ke satu
  //dengan fungsi mysql_num_rows()
  $jumlah1 = mysql_num_rows($sql1);
 
  //jika hasil pada table ke satu lebih dari pada 0 maka akan di proses
  if ($jumlah1 > 0)
  {
   //menampilkan jumlah hasil pencarian pada table ke satu
   echo '<p>Ditemukan '.$jumlah1.' data yang sesuai pada table ke satu!</p>';
  
   //membuat pengulangan dengan fungsi while
   //untuk tampilan hasil table ke satu
   while ($hasil1 = mysql_fetch_array($sql1))
  {
   //menampilkan nomor urut
   $num++; echo $num.'. ';
  
   //menampilkan hasil pencarian pada table ke satu
   echo $hasil1[detail].'<br>';
  }
  }

  //jika data tidak di temukan pada table ke satu
  //maka akan dilanjutkan ke table yang ke dua
  else
  {
   //memilih table ke satu dari database mysql
   $sql2 = mysql_query("SELECT * FROM table2 WHERE detail LIKE '%$search%' ") or die(mysql_error());
  
   //membuat jumlah hasil pencarian pada table ke dua
   //dengan fungsi mysql_num_rows()
   $jumlah2 = mysql_num_rows($sql2);
  
   //jika hasil pada table ke dua lebih dari pada 0 maka akan di proses
   if ($jumlah2 > 0)
   {
   //menampilkan jumlah hasil pencarian pada table ke dua
    echo '<p>Ditemukan '.$jumlah2.' data yang sesuai pada table ke dua!</p>';
   
   //membuat pengulangan dengan fungsi while
   //untuk tampilan hasil table ke dua
    while ($hasil2 = mysql_fetch_array($sql2))
    {
    //menampilkan nomor urut
    $num2++; echo $num2.'. ';
   
    //menampilkan hasil pencarian pada table ke dua
    echo $hasil2[detail].'<br>';
    }
    }
 
  //jika data tidak di temukan pada table ke dua, maka akan dilanjutkan ke table yang ke tiga
  else
  {
  //memilih table ke tiga dari database mysql
  $sql3 = mysql_query("SELECT * FROM table3 WHERE detail LIKE '%$search%' ") or die(mysql_error());
 
  //membuat jumlah hasil pencarian pada table ke tiga
  //dengan fungsi mysql_num_rows()
  $jumlah3 = mysql_num_rows($sql3);
 
  //jika hasil pada table ke tiga lebih dari pada 0 maka akan di proses
  if ($jumlah3 > 0)
  {
   //menampilkan jumlah hasil pencarian pada table ke dua
   echo '<p>Ditemukan '.$jumlah3.' data yang sesuai pada table ke tiga!</p>';
  
   //membuat pengulangan dengan fungsi while
   //untuk tampilan hasil table ke tiga
   while ($hasil3 = mysql_fetch_array($sql3))
  {
   //menampilkan nomor urut
   $num3++; echo $num3.'. ';
  
   //menampilkan hasil pencarian pada table ke tiga
   echo $hasil3[detail].'<br>';
  }
  }
  
  //jika semua data tidak di temukan pada ke 3 table
  else
  {
  echo "Data yang kamu cari tidak ada pada ke tiga table database kami!";
  }
 
  }
  }
  }
 
  //jika form pencarian kosong
  else
  {
  echo 'Silahkan masukkan kata kunci yang kamu cari!';
  }
?>

Untuk download script di atas dengan lengkap, silahkan Klick Disini!

Silahkan kamu mencobanya pada hosting local di komputer kamu, dan sebelumnya komputer kamu harus sudah terpasang Apache dan mysql terlebih dahulu, jika kamu belum memilikinya, silahkan baca artikel sebelumnya tentang Cara instalasi AppServ sebagai fasilitas pendukung pembelajaran script program php.

Semoga artikel di atas bermanfaat bagi yang sedang mencari dan belajar tentang php, ayo mari sama-sama kita saling bertukar ilmu. Dan jangan lupa berikan komentar pada postingan ini. Thank's.

IKLAN



Ikuti di Google+




Komentar di Facebook:

Jika ingin bertanya, silahkan gunakan Form komentar yg paling bawah selain komentar di Facebook ini, karena tidak setiap saat sy monitor trus di Facebook. Thank's

40 komentar:

  1. Terima kasih gan ini ilmu yg bagus untuk pembelajaran saya,
    salam saya, dan mohon izin untuk pembelajaran saya, tolong sekalian beri saya komentar gan untuk mengubah agar blog saya menjadi website yang oke.
    terimakasih

    ReplyDelete
  2. Blog nya ada dimana mas.....? saya gk bs buka profile nya mas..........

    ReplyDelete
  3. Makasih kang, sangat bermanfaat buat saya, kalau saya ada masalah mudah-mudahan akang bisa bantu ...

    ReplyDelete
  4. mas klw kita buat pencarian untuk semua isi text dalam website itu gman? soalnya t4 web saya itu pencariannya cuman berita aja mas?

    ReplyDelete
  5. Maksud nya mas Singga gimana? Artikel di atas itu, memang untuk mencari seluruh isi teks yang tersimpan dalam tabel-tabel database MySql, kalo web nya mas Singga memiliki beberapa tabel pada database, gunakan konsep di atas....

    Cuma saran saya, jangan seluruh nya tabel yang ada pada database dimasukan pada sasaran pencarian, karena itu akan membahayakan ke amanan web nya....!

    ReplyDelete
  6. kalau mau bikin advance search seperti toko online gimana ya mas?
    Misalkna saya punya table Brand, Type, Warna, Harga. dan setiap table bisa di buatkan filter jadi for input pencariannya bukan cuma 1 tapi setiap table mempunyai form combo box pencarian.

    ReplyDelete
  7. hamkagood >> Maksudnya user/pengunjung bisa memilih untuk mencari di table mana gitu mas? Contohnya user hanya akan mencari di table Brand saja atau di table Harga saja, apa seperti itu?! Mas bisa gunakan metode yg udh saya tulis, silahkan dibuka disini :

    Cara membuat pencarian multi table manual pada database mysql dengan php

    Thank's atas kunjungan nya ya, klo belum ketemu yg di cari bisa tanya lg, smoga membantu....

    ReplyDelete
  8. belum ketemu gan>..........maksud saya gini

    Misalnya saya punya Table:
    CREATE TABLE IF NOT EXISTS `stock_hp` (
    `ID` int(9) NOT NULL AUTO_INCREMENT,
    `Brand` varchar(12) NOT NULL,
    `Type` varchar(20) NOT NULL,
    `Warna` varchar(32) NOT NULL,
    `keterangan` varchar(300) DEFAULT NULL,
    `update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`ID`),


    Form pencarian:
    combo box 1 berisi Brand: NOKIA, SAMSUNG, Blackberry
    combo box 2 berisi Warna:Black, Red, White, Purple
    Button value: FILTER

    jadi misalkan mau cari Brand Blackberry semua type tapi yang warna white saja.

    saya pilih Combo box1: Blackberry
    Combo box2: White
    cari dengan menekan tombol filter

    ReplyDelete
  9. Hamka >> Maf br buka komentar nya...
    Kalo sy gk salah pengertian, buat seperti ini untuk Query hasil pencarianya :

    SELECT * FROM stock_hp WHERE Brand = 'brand-yg-dipilih' AND Warna = 'warna-yg-dipilih'

    Untuk contoh form nya seperti ini :

    <?php
    $server = "localhost";
    $username = "root";
    $password = "passwordnya";
    $database = "nama_database";
    mysql_connect($server,$username,$password) or die("Koneksi gagal");
    mysql_select_db($database) or die("Database tidak bisa dibuka");
    ?>
    <form name="cari" action="<? $_SERVER['PHP_SELF']; ?>" method="post">
    Brand : <select name="Brand" />
    <option value="Nokia">Nokia</option>
    <option value="Samsung">Samsung</option>
    <option value="Blackbary">Blackbary</option>
    </select>
    Warna : <select name="Warna" />
    <option value="Black">Black</option>
    <option value="White">White</option>
    <option value="Red">Red</option>
    <option value="Purple">Purple</option>
    </select>
    <input type="submit" name="filter" value="FILTER" />
    </form>

    <?php
    $Brand = $_POST[Brand];
    $Warna = $_POST[Warna];
    $query = mysql_query("SELECT * FROM stock_hp WHERE Brand = '$Brand' AND Warna = '$Warna' LIMIT 20");
    $jumlah = mysql_num_rows($query);
    if ($jumlah>0){
    echo "<b>Hasil pencarian ada $jumlah ditemukan!</b><br>";
    while ($data = mysql_fetch_array($query))
    {
    $h_Brand = $data['Brand'];
    $h_Type = $data['Type'];
    $h_Warna = $data['Warna'];
    $h_Ket = $data['Keterangan'];
    echo "Brand: $h_Brand, Type: $h_Type, Warna: $h_Warna, Keterangan: $h_Ket. <br>";
    }
    }
    else
    {
    echo "Tidak ada hasil ditemukan pada database, karena kurang modal gan...";
    }
    ?>


    Kalo menurut saya untuk jenis Brand pada database di atas gunakan type ENUM, jika jenis nya sama untuk HP semua, supaya gk keliru dan mudah saat meng inputkan data nya.

    O'y... untuk ber Experiment gunakan LocalServer, kebetulan sy yg buat Installer nya Download disini :

    http://sourceforge.net/projects/local-server/

    Thank's

    ReplyDelete
    Replies
    1. mas kalau search pake 2 tabel database syntax nya gimana mas ?

      Delete
  10. Thanks Infonya bro, membantu sekali..
    Tugas rancang kuliah saya jadi mudah :)

    ReplyDelete
  11. mas.. kalo make ini kan ngecek tabel 1 dlu, kalo tabel 1 gk ada baru ke tabel 2.. nah kalo gitu misal pas kita cari ada di tabel 1 otomatis di tabel 2 gk ke ambil kan? gimana tuh?

    ReplyDelete
    Replies
    1. ya, btul,, script di atas it memang sperti itu...

      Delete
  12. tolong bantuan nya mas,
    saya di tugasin buat search data.
    nah tablenya itu ada 4.

    misalkan saya punya tabel
    T_koki, T_meja, T_makanan, sama T_harga,
    nah saya di tugasin nya,,
    kalo misalkan saya cari data meja no 7.
    nah yang keluar tuh ada:

    nama_makanan dari T_makanan,id_koki dari T_koki, sama harga dari T_harga. terus sama total harga..

    itu gimana mas.. tolong pencerahan nya. :D

    ReplyDelete
    Replies
    1. Klo sperti itu setiap table harus menambahkan masing-masing kunci ke 3 table lainya, yaitu field yg menghubungkan ke 4 table trsbut.

      Contoh:
      misalkan table T_meja, maka harus menambahkan field id_meja, f_harga, f_koki, dan f_makanan.

      Begitupun table lainya, harus memiliki id penghubung, sperti field id_harga pada table T_harga sperti diatas

      Jika demikian query pencarian nya adlh,
      Contoh untk mencari data pada meja no 7:
      select * from t_harga, t_koki, t_makanan where t_harga.f_meja='7' and t_koki.f_meja='7' and t_makanan.f_meja='7' order by id_meja

      Menurut sy kurang efektif...
      Sebaiknya, supaya lebih gampang rubah struktur database nya, Contoh:
      Nama database: restoran
      Memiliki 1 table saja, yakni: t_pesanan
      dengan memiliki 4 field, yaitu:
      f_koki, f_meja, f_makanan, dan f_harga

      Maka query pencarian nya adalah,
      Contoh:
      select * from t_pesanan where f_meja = '7'

      Bs juga field nya hanya dijadikan sbagai index id saja sebagai kunci untuk menghubungkan ke table lain nya, misalkan field f_koki adalah kunci id untuk menghubungkan ke table t_koki.

      Untk menjumlahkan isi dari data array adalah,
      Contoh:
      while($data = mysql_fetch_array($sql)){
      $harga += $data['f_harga'];
      }
      echo $harga;

      Maf, br bs respon....

      Delete
  13. Sya mw bertnya, ketika saya mencoba ada yang error di bagian :
    $num++; , $num2++ , dan $num3++;. Mohon bantuan dan penjelsanya. Terima kasih.

    ReplyDelete
    Replies
    1. Silahkan tambahkan variable $num = 0; sebelum baris ini:

      if ((isset($_POST['submit'])) AND ($_POST['search'] <> ""))

      Menjadi:

      $num = 0;
      if ((isset($_POST['submit'])) AND ($_POST['search'] <> ""))

      Thank's

      Delete
    2. Saya mencoba di localhost mash error, dgn error yang sama di $num++;, $num2++;, $num3++; dan saya sdh menambahkan menjadi :$num = 0;
      if ((isset($_POST['submit'])) AND ($_POST['search'] <> "")). Tetap error juga. Tetapi saya mencoba dengan di hosting, Alhamdulillah tidak ad yang error. Terima kasih banyak :).

      Delete
    3. Sry Nis, untk variable $num ada 3, yakni $num, $num2, $num3, dan variable tersebut adlh masing2,,

      Silahkan tambahkan
      $num = 0;
      $num2 = 0;
      $num3 = 0;

      Thank's

      Delete
    4. Alhamdulillah sudah bisa, terima kasih banyak.

      Delete
    5. Saya mw nnya. Jika pencarian untuk menghasilkan hyperlink bgmn carany? Seperti pencarian pada web ini (http://www.tutorialwebgratis.com/search?q=php), ketika kita mencari php, maka secara otomatis akan menghasilkan link dan lanjutkan membaca. It bagaimana caranya? Terima kasih seblumnya.

      Delete
  14. Mas Ujang Rohidin mau nanya, gimana kalau data yang di table 1 sudah ketemu sedang kan di table 2 data tersebut juga ada. yang ini kan kalau data di tabel 1 sudah ketemu dan tabel 2 atau tabel 2 diabaikan? gimana cara nya kalau menampilkan ketiga table tersebut mas. Trims

    ReplyDelete
    Replies
    1. Klo gitu silahkan buat satu query aj, dengan perintah sperti dibawah ini:

      "select * from table1,table2,table3 where table1.detail like '%$search%' and table2.detail like '%$search%' and table3.detail like '%$search%';"


      Thank's

      Delete
  15. mas bisa minta bantuannya ini. tolong remote PC saya. bingung banget. cara nampilin data yang ditemukan dengan style CSS

    ReplyDelete
    Replies
    1. Maksudnya nampilin data ap?
      klo mau di remote PC nya silahkn hub sy via FB aj, supaya mas bs tau, kpan sy lg oll...

      Delete
  16. mas mohon bantuannya saya nemu eror gini :
    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\kplogbook\logbookcari.php on line 11

    line 11 itu ini mas :
    $cek = mysql_num_rows($q);

    bagaimana ya solusinya

    ReplyDelete
    Replies
    1. Query nya sperti apa mas...? mungkin salah pada perintah mysql nya,, jngan lp di cek jg pada database nya....

      Biasanya error seperti itu, hasil mysql_query() nya ga berhasil...

      Thank's

      Delete
  17. tolong lah mas punyaku dibetulin masih error,,, tolong bgt
    file'y sdh tak kirim ke email

    ReplyDelete
  18. Mas mau tanya saya ada masalah untuk pengambilan data dari Database untuk link otomatis kedalam form

    Misal di dalam database terdapat kode barang dan nama barang

    saya ingin ketika saya input kode barang maka otomatis nama barang sudah terinput juga

    bisa tidak contoh scriptnya seperti apa

    terima kasih

    ReplyDelete
  19. Mas mau tanya saya ada masalah untuk pengambilan data dari Database untuk link otomatis kedalam form

    Misal di dalam database terdapat kode barang dan nama barang

    saya ingin ketika saya input kode barang maka otomatis nama barang sudah terinput juga

    bisa tidak contoh scriptnya seperti apa

    terima kasih

    ReplyDelete
    Replies
    1. Saat proses buat variable kode barang

      Contoh:
      $kodebarang = $_POST['kode'];
      $query = mysql_query("SELECT * FROM namatable WHERE kodebarang = '$kodebarang'");
      $data = mysql_fetch_array($query);

      Hasil nya nama barang yg tampil sesuai kode yg di inputkan:
      $namabarang = $data['namabarang'];

      Delete
  20. permisi,numpang nanya,
    saya punya dua tabel, tabel 1kriteria, tabel 2 sub kriteria.
    saya ingin menampilkan kedua data dari tabel tersebut, tapi yang muncul adalah:
    kriteria1
    sub kriteria1 id 1
    kriteria1
    sub kriteria1 id 2..

    sementara yang saya inginkan
    kriteria1
    sub kriteria1 id 1
    sub kriteria1 id 2..
    jadi, kriterianya muncul satu kalia aja..
    mohon bantuannya semuaa... :)

    ReplyDelete
  21. saya mau masukin scriptnya gabisa bisa

    ReplyDelete
  22. SELECT kontrak.id,kontrak.id_kontrak,kontrak.nip,kontrak.tarif,kontrak.tempo,transaksi.id_trans,transaksi.id,transaksi.petugas,transaksi.tgl_trans,transaksi.pembayaran,transaksi.jumlah,transaksi.total FROM transaksi, kontrak WHERE transaksi.id=kontrak.id AND id_trans=id_trans AND transaksi.id LIKE '%search%' ORDER BY id_trans ,
    melalui untuk menapilkannya pake $_get apa $_post, kalo kita pakai mysql yog dan xampp nya jalan, tapi nampilin di script kita gmana,
    apakah pake mysql_num_rows atau mysql_fetch_row, masalahnya ndak nampil, sedangkan melalui xampp dan mysql front tampil.

    ReplyDelete
    Replies
    1. gunakan:

      while($data = mysql_fetch_array($query))
      {
      $variable1 = $data['nama_field'];
      }

      Delete
  23. Mas, saya mau nanya, kalau kita searching dengan keyword, kemudian keyword yg ketemu berwarna merah misalnya, gimana caranya?

    Misalnya diweb saya, terdapat tabel dengan isi content "Manfaat buah jeruk bagi kesehatan sangatlah beragam. Jeruk adalah salah satu buah yang paling populer di dunia"

    Kemudian saya searching dengan keyword JERUK, nah pas ketemu, hanya tulisan jeruknya berwarna merah, gimana caranya? sedangkan isi content yg lain tetap warna hitam.

    terima kasih

    Amir

    ReplyDelete

 
Free hosting
Copyright © . Tutorial Web Gratis