Membuat Fasilitas Search Engine / Mesin Pencari dengan PHP dan MySQL
Membuat Fasilitas Search Engine / Mesin Pencari dengan PHP dan MySQL. Hai sob, pasti sobat semua sudah pernah dengar yang namanya search engine atau mesin pencari, malahan mungkin sobat setiap hari sudah menggunakannya untuk melakukan pencarian website yang ingin sobat kunjungi dengan mengetikkan kata kunci atau keyword nya kemudian nanti akan menampilkan website yang mengandung kata kunci tersebut, contoh mesin pencari yang paling populer adalah google. Google adalah mesin pencari yang digunakan untuk mencari website yang ada di seluruh dunia yang terindek oleh Google.
Nah, pada kesempatan kali ini saya akan mencoba untuk membuat tutorial bagaimana caranya membuat fasilitas search engine atau mesin pencari layaknya Google dengan PHP dan MySQL, tapi mesin pencari ini dibuat untuk mencari artikel-artikel yang hanya ada pada website sobat. Contohnya bisa lihat di web tutorialweb.net ini, bagian atas ada box input untuk pencarian dengan memasukkan kata kuncinya, kemuadian akan menampilkan hasil artikel apa saja yang ada di tutorialweb.net yang sesuai dengan kata kunci yang dimasukkan tadi.
Oke sob, sudah jelas kan? Kita langsung aja masuk ke tutorialnya. Karena mesin pencari ini mencari artikel yang ada di website kita, tentunya artikel-artikel tersebut tersimpan di database, kita menggunakan database MySQL seperti biasa.
Database & Table
Pertama buat database dulu ya sob, dalam kasus ini database nya adalah tutorialweb_search_engine. Jika sudah di buat database nya, silahkan dumping script SQL di bawah ini:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
CREATE TABLE `artikel` ( `id` int(11) NOT NULL, `judul` varchar(255) NOT NULL, `deskripsi` text NOT NULL, `url` varchar(255) NOT NULL, `kata_kunci` varchar(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -- Dumping data untuk tabel `artikel` -- INSERT INTO `artikel` (`id`, `judul`, `deskripsi`, `url`, `kata_kunci`) VALUES (1, 'Menampilkan Data MySQL dengan DataTables Server-side Processing (PHP, Bootstrap)', 'Tutorial bagaimana cara menampilkan data MySQL dengan DataTables Server-side processing dengan PHP dan Bootstrap', 'http://tutorialweb.net/menampilkan-data-mysql-dengan-datatables-server-side-processing-php-bootstrap/', 'menampilkan data mysql server side datatables php bootstrap'), (2, 'Membuat Fasilitas Buku Tamu dengan PHP, MySQLi dan Bootstrap', 'Cara membuat buku tamu di website dengan bahasa pemrograman PHP dan database MySQL dan Bootstrap', 'http://tutorialweb.net/membuat-fasilitas-buku-tamu-dengan-php-mysqli-dan-bootstrap/', 'buku tamu/guestbook dengan php, mysql dan bootstrap'), (3, '5 htaccess Trik Yang Harus Anda Ketahui', 'Trik terbaik dengan menggunakan htaccess', 'http://tutorialweb.net/5-htaccess-trik-yang-harus-anda-ketahui/', 'trik htaccess'), (4, 'Membuat Halaman Dinamis Dengan PHP', 'Bagaimana membuat halaman dinamis dengan PHP', 'http://tutorialweb.net/membuat-halaman-dinamis-dengan-php/', 'halaman dinamis dengan php'), (5, 'Membuat Coundown Timer Redirect dengan jQuery', 'Tutorial bagaimana cara membuat cound down timer dengan jQuery', 'http://tutorialweb.net/membuat-coundown-timer-redirect-dengan-jquery/', 'cound down timer jquery'), (6, 'Simple & Pure CSS Dropdown Menu', 'Membuat dropdown menu dengan CSS murni yang sederhana', 'http://tutorialweb.net/simple-pure-css-dropdown-menu/', 'dropdown menu css'), (7, 'Cara Installasi Joomla', 'Step by step instalasi CMS Joomla', 'http://tutorialweb.net/cara-installasi-joomla/', 'instalasi cms joomla'); |
Dari script SQL di atas nandi akan di dapatkan sebuah tabel dengan nama artikel dengan beberapa kolom, dan juga sekaligus dengan data yang sudah ter Insertkan. Lihat gambar di bawah ini.
Seperti terlihat pada kolom-kolom di atas disitu ada kolom kata_kunci, nah kolom tersebutlah yang akan di jadikan kata kunci pencarian nanti.
Setelah database di buat maka kita buat koneksinya, agar bisa nyambung ke database.
Koneksi
Untuk membuat koneksi ke database buat sebuah file baru dengan nama koneksi.php, dan ketikkan kode di bawah ini:
1 2 3 4 5 6 7 |
<?php //silahkan rubah detail koneksi di bawah ini sesuai dengan server sobat $koneksi = new mysqli("localhost", "root", "", "tutorialweb_search_engine"); if ($koneksi->connect_errno) { echo "Gagal melakukan koneksi ke database: " . $koneksi->connect_error; } ?> |
Silahkan rubah ya untuk detail koneksi nya, sesuaikan dengan server sobat sendiri.
Selanjutnya kita buat file utamanya, yang menampilkan form dan juga hasilnya.
index.php
Buat file baru, simpan dengan nama index.php. Dan masukkan kode di bawah ini:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
<?php //memasukkan file koneksi include 'koneksi.php'; ?> <!DOCTYPE html> <html> <head> <title>Search Engine</title> </head> <body> <h2>Pencarian</h2> <form action="" method="post"> <input type="text" name="kata_kunci" placeholder="Masukkan kata kunci" /> <input type="submit" name="submit" value="Cari" /> </form> <?php //jika tombol Cari di klik akan menjalankan script berikutnya if(isset($_POST['submit'])){ //membuat variabel $kata_kunci yang menyimpan data dari inputan kata kunci $kata_kunci = $koneksi->real_escape_string(htmlentities(trim($_POST['kata_kunci']))); //cek apakah kata kunci kurang dari 3 karakter if(strlen($kata_kunci)<3){ //pesan error jika kata kunci kurang dari 3 karakter echo '<p>Kata kunci terlalu pendek.</p>'; }else{ //membuat variabel $where dengan nilai kosong $where = ""; //membuat variabel $kata_kunci_split untuk memecah kata kunci setiap ada spasi $kata_kunci_split = preg_split('/[\s]+/', $kata_kunci); //menghitung jumlah kata kunci dari split di atas $total_kata_kunci = count($kata_kunci_split); //melakukan perulangan sebanyak kata kunci yang di masukkan foreach($kata_kunci_split as $key=>$kunci){ //set variabel $where untuk query nanti $where .= "kata_kunci LIKE '%$kunci%'"; //jika kata kunci lebih dari 1 (2 dan seterusnya) maka di tambahkan OR di perulangannya if($key != ($total_kata_kunci - 1)){ $where .= " OR "; } } //melakukan query ke database dengan SELECT, dan dimana WHERE ini mengambil dari $where $results = $koneksi->query("SELECT judul, LEFT(deskripsi, 60) as deskripsi, url FROM artikel WHERE $where"); //menghitung jumlah hasil query di atas $num = $results->num_rows; //jika tidak ada hasil if($num == 0){ //pesan jika tidak ada hasil echo '<p>Pencarian dengan kata kunci <b>'.$kata_kunci.'</b> tidak ada hasil.</p>'; }else{ //pesan jika ada hasil pencarian echo '<p>Pencarian dari kata kunci <b>'.$kata_kunci.'</b> mendapatkan '.$num.' hasil:</p>'; //perulangan untuk menampilkan data while($row = $results->fetch_assoc()){ //menampilkan data echo ' <p> <b>'.$row['judul'].'</b><br> '.$row['deskripsi'].'...<br> <a href="'.$row['url'].'">'.$row['url'].'</a> </p> '; } } } } ?> </body> </html> |
Untuk penjelasan kode sudah masukkan pada script di atas, jadi tidak perlu saya jelaskan lagi ya
Untuk hasilnya bisa terlihat seperti gambar di bawah ini
Permisi Bos Ini Tutorial Yang saya Cari Selama Ini… Mantap Bos… Tapi Bisa Minta Tolong lagi agar hasilnya itu bisa Tampil rapi texnya rata dalam bentuk justify dan berada dalam folder yang rata… kalau bisa tolong di share mas…karena banyak yang mencari materi ini mas
maksud brd dalam folder itu apanya?
Artikelnya sudah sy praktekin semua tanpa kopy paste mas… Tpi mas yang jadi pertanyaan saya bagaimana caranya agar hasil pencariannya memiliki tampilan yang cantik… Misalnya pas hasilnya ketemu muncul pop up yang berisikan hasil… Atau persis dengan hasil pencarian abang… Hasilnya lengkap dengan gambar dan lain lain… Kalau abang punya artikel kaya gitu pasti web ini naik soalnya banyak yang nyari
ya kalau ada waktu saya buatkan.
mas mau nanya, kalo muncul pesan ini gimana cara ngatasinya ? Trying to get property of non-object in D:\New Folder\index.php on line 50 ?
untuk menjalankannya pakek webserver, dan alamatnya localhost/…..
Sudah. ini alamatnya http://127.0.0.1:8888/belajar/indexx.php.
tapi kenapa muncul pesan itu mas ? salahnya di line 50.
dan di line 50 ada ini $num = $results->num_rows; .
bagi solusinya mas.
Kok gak dibalas lagi mas ?
kesalahan berhubungan dengan database, pastikan querynya betul.
membantu sekali mas,terimakasih.
kalau saya boleh nanya itu caranya biar kaya google pada saat saya klik tombol cari setelah itu ngeganti halaman
buat halaman baru, dengan tema yg sobat inginkan
keliatannya lumayan susah gan, nice post
mas.. kalo ditambahin paging kayak gimana tuh scriptnya, saya cobain kok ngak bisa nampil halaman ke 2 nya
cari tutoial simple pagination
Selamat malam ka
maaf mau tanya
ketika saya mencoba kodingan diatas kenapa muncul error
Notice: Undefined variable: koneksi in C:\xampp\htdocs\nyobain.php on line 23
Fatal error: Call to a member function real_escape_string() on a non-object in C:\xampp\htdocs\nyobain.php on line 23
bagaimana yah solusinya terima kasih
iya gan. bisa di abaikan dengan menuliskan kode ini = error_reporting(0)
karena query mysql sudah tidak support lagi