Jumat, 09 November 2012

Membuat Pencarian Sederhana dengan PHP dan MySQL


Kali ini kita akan mencoba pencarian sederhana dengan PHP. Pada pencarian ini kita akan mencari data yang ada di database mysql.
Yang dibahas di sini antara lain:
  • Pencarian di database mysql sederhana
  • Pencarian dengan 1 file php
  • mencegah menampilkan data apabila tombol submit belum diklik
  • Menampilkan nomor pencarian
  • menampilkan jumlah hasil pencarian
  • menampilkan pesan apabila hasil pencarian tidak ditemukan
Baiklah langsung aja kita mulai.
Langkah pertama adalah membuat database yang akan kita cari nantinya. Untuk lebih mudahnya gw siapkan query yang tinggal diexecute di PHPMyadmin Anda.
  1. – Struktur dari tabel `siswa`
  2. CREATE TABLE IF NOT EXISTS `siswa` (
  3. `id` int(12) NOT NULL auto_increment,
  4. `nama` text NOT NULL,
  5. `sex` varchar(1) NOT NULL,
  6. PRIMARY KEY (`id`)
  7. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;
  8. – Dumping data untuk tabel `siswa`
  9. INSERT INTO `siswa` (`id`, `nama`, `sex`) VALUES
  10. (1, ‘Kyubi naruto’, ‘L’),
  11. (2, ‘Uchiha sasuke’, ‘L’),
  12. (3, ‘Naruto Kun’, ‘L’),
  13. (4, ‘Sasuke Kun’, ‘L’),
  14. (5, ‘Sakura Chan’, ‘P’),
  15. (6, ‘Konohamaru Chan’, ‘L’),
  16. (7, ‘Hyuga Hinata’, ‘P’),
  17. (8, ‘Hyuga Neji’, ‘L’),
  18. (9, ‘Ichimaru’, ‘L’),
  19. (10, ‘Yamakiba’, ‘L’),
  20. (11, ‘Jiraiya’, ‘L’),
  21. (12, ‘Orochimaru’, ‘L’),
  22. (13, ‘Akamaru’, ‘L’),
  23. (14, ‘Kakashi’, ‘L’);
– — Struktur dari tabel `siswa` — CREATE TABLE IF NOT EXISTS `siswa` ( `id` int(12) NOT NULL auto_increment, `nama` text NOT NULL, `sex` varchar(1) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ; — — Dumping data untuk tabel `siswa` — INSERT INTO `siswa` (`id`, `nama`, `sex`) VALUES (1, ‘Kyubi naruto’, ‘L’), (2, ‘Uchiha sasuke’, ‘L’), (3, ‘Naruto Kun’, ‘L’), (4, ‘Sasuke Kun’, ‘L’), (5, ‘Sakura Chan’, ‘P’), (6, ‘Konohamaru Chan’, ‘L’), (7, ‘Hyuga Hinata’, ‘P’), (8, ‘Hyuga Neji’, ‘L’), (9, ‘Ichimaru’, ‘L’), (10, ‘Yamakiba’, ‘L’), (11, ‘Jiraiya’, ‘L’), (12, ‘Orochimaru’, ‘L’), (13, ‘Akamaru’, ‘L’), (14, ‘Kakashi’, ‘L’);
Caranya:
  1. Buat database dengan nama pencarian
    membuat database mysql
  2. Kemudian klik SQL pada tab menu atas.
  3. Kemudian paste kode sql di atas.
    exekusi query mysql di phpmyadmin
  4. Maka jadilah database Anda
    database siswa yang sudah jadi
Langkah ke dua adalah menampilkan data. Kita buat menampilkan data dulu kemudian nanti kita modifikasi untuk menampilkan hasil pencarian.
  1. kita buat dulu folder cari di dalam folder www (apabila menggunakan appserv) atau di dalam folder htdocs (apabila menggunakan xamps)
  2. kemudian kita buat file php dengan nama tampil.php
    1. <?php
    2. // konfigurasi
    3. $db_host = “localhost”; // nama host
    4. $db_user = “root”; // username mysql
    5. $db_pass = “”; //password isi sesuai seting server Anda.
    6. $db_name = “pencarian”; // karena nama database yang kita buat adalah pencarian
    7. // koneksi ke database
    8. $link = mysql_pconnect ($db_host, $db_user, $db_pass) or die (“Ga bisa connect”);
    9. mysql_select_db ($db_name) or die (“Ga bisa select database”);
    10. // menampilkan data
    11. $sql = mysql_query(“SELECT * FROM siswa”) or die(mysql_error());
    12. while ($res=mysql_fetch_array($sql)) {
    13. echo $res[nama].‘<br>’;
    14. }
    15. ?>
    <?php // konfigurasi $db_host = “localhost”; // nama host $db_user = “root”; // username mysql $db_pass = “”; //password isi sesuai seting server Anda. $db_name = “pencarian”; // karena nama database yang kita buat adalah pencarian // koneksi ke database $link = mysql_pconnect ($db_host, $db_user, $db_pass) or die (“Ga bisa connect”); mysql_select_db ($db_name) or die (“Ga bisa select database”); // menampilkan data $sql = mysql_query(“SELECT * FROM siswa”) or die(mysql_error()); while ($res=mysql_fetch_array($sql)) { echo $res[nama].’<br>’; } ?>
    ini adalah script sederhana untuk menampilkan data. Nantinya kita ubah agar bisa menampilkan hasil pencarian
  3. Merubah script agar bisa menampilkan data tertentu.
    Di sini kita tinggal mengubag kode SQLnya. Kita bisa menggunakan LIKE diikuti kata yang ingin dicari. Dan diikuti kata yang dicari dan diberi tanda %.
    Contoh: apabila kita ingin menampilkan semua siswa yang berawalan huruf s maka kita buat seperti ini:
    1. SELECT * FROM siswa WHERE nama LIKE ‘s%’
    SELECT * FROM siswa WHERE nama LIKE ‘s%’
    Cukup mudah bukan? Mari kita lihat script selengkapnya:
    1. <?php
    2. // konfigurasi
    3. $db_host = “localhost”; // nama host
    4. $db_user = “root”; // username mysql
    5. $db_pass = “”; //password isi sesuai seting server Anda.
    6. $db_name = “pencarian”; // karena nama database yang kita buat adalah pencarian
    7. // koneksi ke database
    8. $link = mysql_pconnect ($db_host, $db_user, $db_pass) or die (“Ga bisa connect”);
    9. mysql_select_db ($db_name) or die (“Ga bisa select database”);
    10. // menampilkan data
    11. // lihat perubahannya di bawah ini:
    12. $sql = mysql_query(“SELECT * FROM siswa WHERE nama LIKE ‘s%’ “) or die(mysql_error());
    13. while ($res=mysql_fetch_array($sql)) {
    14. echo $res[nama].‘<br>’;
    15. }
    16. ?>
    <?php // konfigurasi $db_host = “localhost”; // nama host $db_user = “root”; // username mysql $db_pass = “”; //password isi sesuai seting server Anda. $db_name = “pencarian”; // karena nama database yang kita buat adalah pencarian // koneksi ke database $link = mysql_pconnect ($db_host, $db_user, $db_pass) or die (“Ga bisa connect”); mysql_select_db ($db_name) or die (“Ga bisa select database”); // menampilkan data // lihat perubahannya di bawah ini: $sql = mysql_query(“SELECT * FROM siswa WHERE nama LIKE ‘s%’ “) or die(mysql_error()); while ($res=mysql_fetch_array($sql)) { echo $res[nama].’<br>’; } ?>
  4. Yang tidak boleh dilupakan tentunya adalah form pencariannya.OK mari kita buat file dengan nama form_cari.htm
    1. <strong>PENCARIAN:</strong><br>
    2. <form action=“tampil.php” method=“post” name=“pencarian” id=“pencarian”>
    3. <input type=“text” name=“search” id=“search”>
    4. <input type=“submit” name=“submit” id=“submit” value=“CARI”>
    5. </form>
    <strong>PENCARIAN:</strong><br> <form action=”tampil.php” method=”post” name=”pencarian” id=”pencarian”> <input type=”text” name=”search” id=”search”> <input type=”submit” name=”submit” id=”submit” value=”CARI”> </form> Sebuah form sederhana ini nantinya digunakan untuk memasukkan kata yang hendak kita cari.
    Cermati kode berikut ini:
    1. … action=“tampil.php” method=“post” name=“pencarian” id=”penc…
    … action=”tampil.php” method=”post” name=”pencarian” id=”penc… Ini maksudnya pencarian akan dilakukan di file tampil.php yakni file yang kita buat sebelumnya.
  5. Form pencarian sudah OK. Kita tinggal tangkap variabel dari form_cari.php.
    Karena metode yang digunakan adalah POST kita bisa menangkap variabelnya dengan $_POST['search'];
    search di sini adalah id dari Text Field di form pencarian.
    Ini dia script yang udah kita modifikasi:
    1. <?php
    2. // konfigurasi
    3. $db_host = “localhost”; // nama host
    4. $db_user = “root”; // username mysql
    5. $db_pass = “”; //password isi sesuai seting server Anda.
    6. $db_name = “pencarian”; // karena nama database yang kita buat adalah pencarian
    7. // koneksi ke database
    8. $link = mysql_pconnect ($db_host, $db_user, $db_pass) or die (“Ga bisa connect”);
    9. mysql_select_db ($db_name) or die (“Ga bisa select database”);
    10. // menampilkan data
    11. // lihat perubahannya di bawah ini:
    12. $search = $_POST['search'];
    13. // kemudian kita ubah kata kunci pencarian menjadi variabel
    14. // lihat pada $search
    15. // untuk mencari kata yang mengandung kata tertentu, kita ubah tanda % menjadi di awal dan akhir kata kunci.
    16. $sql = mysql_query(“SELECT * FROM siswa WHERE nama LIKE ‘%$search%’ “) or die(mysql_error());
    17. while ($res=mysql_fetch_array($sql)) {
    18. echo $res[nama].‘<br>’;
    19. }
    20. ?>
    <?php // konfigurasi $db_host = “localhost”; // nama host $db_user = “root”; // username mysql $db_pass = “”; //password isi sesuai seting server Anda. $db_name = “pencarian”; // karena nama database yang kita buat adalah pencarian // koneksi ke database $link = mysql_pconnect ($db_host, $db_user, $db_pass) or die (“Ga bisa connect”); mysql_select_db ($db_name) or die (“Ga bisa select database”); // menampilkan data // lihat perubahannya di bawah ini: $search = $_POST['search']; // kemudian kita ubah kata kunci pencarian menjadi variabel // lihat pada $search // untuk mencari kata yang mengandung kata tertentu, kita ubah tanda % menjadi di awal dan akhir kata kunci. $sql = mysql_query(“SELECT * FROM siswa WHERE nama LIKE ‘%$search%’ “) or die(mysql_error()); while ($res=mysql_fetch_array($sql)) { echo $res[nama].’<br>’; } ?>
  6. Agar lebih simple kita bisa menjadikan 2 file (tampil.php dan form_cari.htm) menjadi satu file.
    Tapi kita juga harus memikirkan agar kode dieksekusi apabila tombol cari sudah dipencet. :D
    Tidak lucu apabila belum diapa-apain udah basah eh maaf, sudah mengeksekusi script. Yang ada hanyalah menampilkan halaman kosong atau lebih parah lagi menampilkan kode error.
    1. if ((isset($_POST['submit'])) AND ($_POST['search'] <> “”)) {
    2. }
    if ((isset($_POST['submit'])) AND ($_POST['search'] <> “”)) { … }
    Maksud kode di atas adalah kode yang diantara kurung kurawal hanya akan dieksekusi jika $_POST['submit']sudah diklik dan apabila ($_POST['search'] sudah ada nilainya.
    Mari kita lihat script yang sudah jadi. dan ingat cukup satu file ini untuk menghandle pencarian.
    1. <strong>PENCARIAN:</strong><br>
    2. <form action=“<?$_SERVER['PHP_SELF']?>” method=“post” name=“pencarian” id=“pencarian”>
    3. <input type=“text” name=“search” id=“search”>
    4. <input type=“submit” name=“submit” id=“submit” value=“CARI”>
    5. </form>
    6. <?php
    7. // konfigurasi
    8. $db_host = “localhost”; // nama host
    9. $db_user = “root”; // username mysql
    10. $db_pass = “”; //password isi sesuai seting server Anda.
    11. $db_name = “pencarian”; // karena nama database yang kita buat adalah pencarian
    12. // koneksi ke database
    13. $link = mysql_pconnect ($db_host, $db_user, $db_pass) or die (“Ga bisa connect”);
    14. mysql_select_db ($db_name) or die (“Ga bisa select database”);
    15. // menampilkan data
    16. // lihat perubahannya di bawah ini:
    17. if ((isset($_POST['submit'])) AND ($_POST['search'] <> “”)) {
    18. $search = $_POST['search'];
    19. $sql = mysql_query(“SELECT * FROM siswa WHERE nama LIKE ‘%$search%’ “) or die(mysql_error());
    20. while ($res=mysql_fetch_array($sql)) {
    21. echo $res[nama].‘<br>’;
    22. }
    23. }
    24. ?>
    25. <br>
    26. <strong>Catatan:</strong>
    <strong>PENCARIAN:</strong><br> <form action=”<?$_SERVER['PHP_SELF']?>” method=”post” name=”pencarian” id=”pencarian”> <input type=”text” name=”search” id=”search”> <input type=”submit” name=”submit” id=”submit” value=”CARI”> </form> <?php // konfigurasi $db_host = “localhost”; // nama host $db_user = “root”; // username mysql $db_pass = “”; //password isi sesuai seting server Anda. $db_name = “pencarian”; // karena nama database yang kita buat adalah pencarian // koneksi ke database $link = mysql_pconnect ($db_host, $db_user, $db_pass) or die (“Ga bisa connect”); mysql_select_db ($db_name) or die (“Ga bisa select database”); // menampilkan data // lihat perubahannya di bawah ini: if ((isset($_POST['submit'])) AND ($_POST['search'] <> “”)) { $search = $_POST['search']; $sql = mysql_query(“SELECT * FROM siswa WHERE nama LIKE ‘%$search%’ “) or die(mysql_error()); while ($res=mysql_fetch_array($sql)) { echo $res[nama].’<br>’; } } ?> <br> <strong>Catatan:</strong> Perhatikan pula kode <?$_SERVER['PHP_SELF']?> yang semula adalah tampil.php. Kode diatas untuk mencegah adanya error apabila nama file diganti dan akan mengeksekusi dirinya sendiri.
Sedikit Tambahan.
Kita coba modif dikit kode diatas agar bisa menampilkan:
  • nomor pencarian
  • jumlah pencarian
  • pesan apabila tidak ada hasil pencarian
  1. Untuk nomor pencarian kita bisa menggunakan increement dengan kode sederhana berikut:
    1. $nomor++; echo $nomor;
    $nomor++; echo $nomor; Sangat mudah dan simple..
  2. Untuk jumlah pencarian kita bisa gunakan sedikit kode ini:
    1. $jumlah = mysql_num_rows($sql);
    2. echo ‘Ada ‘.$jumlah.‘ data yang sesuai.’;
    $jumlah = mysql_num_rows($sql); echo ‘Ada ‘.$jumlah.’ data yang sesuai.’;
  3. Sedangkan untuk pesan zero data kita bisa bikin conditional seperti ini:
    1. if ($jumlah > 0) {
    2. // kode menampilkan data
    3. }
    4. else { echo ‘Maaf, hasil pencarian tidak ditemukan.’;}
    if ($jumlah > 0) { // kode menampilkan data } else { echo ‘Maaf, hasil pencarian tidak ditemukan.’;}
Kode lengkapnya seperti ini:
  1. <strong>PENCARIAN:</strong><br>
  2. <form action=“<?$_SERVER['PHP_SELF']?>” method=“post” name=“pencarian” id=“pencarian”>
  3. <input type=“text” name=“search” id=“search”>
  4. <input type=“submit” name=“submit” id=“submit” value=“CARI”>
  5. </form>
  6. <?php
  7. // konfigurasi
  8. $db_host = “localhost”; // nama host
  9. $db_user = “root”; // username mysql
  10. $db_pass = “”; //password isi sesuai seting server Anda.
  11. $db_name = “pencarian”; // karena nama database yang kita buat adalah pencarian
  12. // koneksi ke database
  13. $link = mysql_pconnect ($db_host, $db_user, $db_pass) or die (“Ga bisa connect”);
  14. mysql_select_db ($db_name) or die (“Ga bisa select database”);
  15. // menampilkan data
  16. if ((isset($_POST['submit'])) AND ($_POST['search'] <> “”)) {
  17. $search = $_POST['search'];
  18. $sql = mysql_query(“SELECT * FROM siswa WHERE nama LIKE ‘%$search%’ “) or die(mysql_error());
  19. //menampilkan jumlah hasil pencarian
  20. $jumlah = mysql_num_rows($sql);
  21. if ($jumlah > 0) {
  22. echo ‘<p>Ada ‘.$jumlah.‘ data yang sesuai.</p>’;
  23. while ($res=mysql_fetch_array($sql)) {
  24. $nomor++; echo $nomor.‘. ‘;
  25. echo $res[nama].‘<br>’;
  26. }
  27. }
  28. else {
  29. // menampilkan pesan zero data
  30. echo ‘Maaf, hasil pencarian tidak ditemukan.’;
  31. }
  32. }
  33. else { echo ‘Masukkan dulu kata kuncinya’;}
  34. ?>
<strong>PENCARIAN:</strong><br> <form action=”<?$_SERVER['PHP_SELF']?>” method=”post” name=”pencarian” id=”pencarian”> <input type=”text” name=”search” id=”search”> <input type=”submit” name=”submit” id=”submit” value=”CARI”> </form> <?php // konfigurasi $db_host = “localhost”; // nama host $db_user = “root”; // username mysql $db_pass = “”; //password isi sesuai seting server Anda. $db_name = “pencarian”; // karena nama database yang kita buat adalah pencarian // koneksi ke database $link = mysql_pconnect ($db_host, $db_user, $db_pass) or die (“Ga bisa connect”); mysql_select_db ($db_name) or die (“Ga bisa select database”); // menampilkan data if ((isset($_POST['submit'])) AND ($_POST['search'] <> “”)) { $search = $_POST['search']; $sql = mysql_query(“SELECT * FROM siswa WHERE nama LIKE ‘%$search%’ “) or die(mysql_error()); //menampilkan jumlah hasil pencarian $jumlah = mysql_num_rows($sql); if ($jumlah > 0) { echo ‘<p>Ada ‘.$jumlah.’ data yang sesuai.</p>’; while ($res=mysql_fetch_array($sql)) { $nomor++; echo $nomor.’. ‘; echo $res[nama].’<br>’; } } else { // menampilkan pesan zero data echo ‘Maaf, hasil pencarian tidak ditemukan.’; } } else { echo ‘Masukkan dulu kata kuncinya’;} ?>
Gw rasa itu aja cukup untuk pencarian. Hal-hal yang perlu dilakukan agar pencarian menjadi lebih baik adalah:
  1. menambahkan fasilitas anti sql injection
  2. anti XSS atack. Tapi bisa nggak yah XSS attack lewat pencarian gini?
  3. pencarian multi kolom
  4. pencarian dengan OR ata AND
  5. dan lain lain
sumber : http://www.gecko.web.id

Tidak ada komentar:

Posting Komentar