Rabu, 09 Oktober 2013

PHP. AUTOCOMPLETE DENGAN AJAX

PHP.AJAX
AUTOCOMPLETE DENGAN AJAX
Ikhwan Anshori

Auto complete atau sering juga disebut Auto suggest adalah metode pemrograman untuk membuat praktis dalam melakukan sebuah pencarian. Dengan menggunakan auto complete kita tidak harus mengingat seluruh keyword yang akan kita cari. Dengan demikian proses pencarian akan lebih cepat dilakukan.


Untuk membuat sebuah auto complete bisa menggunakan beberapa bahasa pemrograman misalnya AJAX dan yang lainya. Nah kali ini yang akan digunakan adalah ajax auto complete. Beberapa kebutuhan yang akan digunakan dalam membuat autocomplete ini antara lain :
1.    Database (coba)

a.    Tabel (barang)
Struktur tabel barang sebagai berikut :


2.    File PHP meliputi :
a.    Search.html
b.    Search.php

3.    CSS file (style.css)
Kebutuhan dari pembuatan Ajax Auto Complete ini telah didapat, kemudian untuk pertama kita buat databasenya berikut tabel beserta recordnya dengan SQL berikut :
-- buat database dengan nama coba --
create DATABASE `coba`;

-- gunakan database coba --
use `coba`;

--
-- Table structure for table `barang`
--

CREATE TABLE IF NOT EXISTS `barang` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `nama` varchar(20) NOT NULL,
  `stock` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=19 ;

--
-- Dumping data for table `barang`
--

INSERT INTO `barang` (`id`, `nama`, `stock`) VALUES
(1, 'Baju', 405),
(2, 'Celana', 1),
(3, 'Kemeja', 4),
(4, 'a', 1),
(5, 'b', 2),
(6, 'c', 3),
(7, 'd', 4),
(8, 'e', 5),
(9, 'f', 7),
(10, 'g', 8),
(11, 'h', 9),
(12, 'i', 10),
(13, 'j', 11),
(14, 'aaa', 21),
(15, 'aaaaa', 22),
(16, 'aasaas', 23),
(17, 'adasa', 24),
(18, 'asadasa', 25);

SQL diatas digunakan untuk membuat database dengan nama coba. Kemudian didalam database coba kita buat tabel dengan nama barang, lalu kita masukan record untuk percobaan seperti pada script diatas.
Jika SQL sudah dieksekusi maka tabel yang akan terlihat seperti berikut  (beserta record):

Kemudian untuk file – file proses :

1.   Search.html

<html>
<head>
<title>AJAX AUTO COMPLETE</title>
<link rel='stylesheet' type='text/css' href='style.css' />
<script language='JavaScript'>
var ajaxRequest;
function getAjax() //fungsi untuk mengecek AJAX pada browser
{
try
{
ajaxRequest = new XMLHttpRequest();
}
catch (e)
{
try
{
ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
alert("Your browser broke!");
return false;
}
}
}
}
function autoComplete() //fungsi menangkap input search dan menampilkan hasil search
{
getAjax();
input = document.getElementById('inputan').value;

if (input == "")
{
document.getElementById("hasil").innerHTML = "";
}
else
{
ajaxRequest.open("GET","search.php?input="+input);
ajaxRequest.onreadystatechange = function()
{
document.getElementById("hasil").innerHTML = ajaxRequest.responseText;
}
ajaxRequest.send(null);
}
}

function autoInsert(nama) //fungsi mengisi input text dengan hasil pencarian yang dipilih
{
document.getElementById('inputan').value = nama;
document.getElementById('hasil').innerHTML = "";
}
</script>
</head>
<body>
<div id='outer'>
Nama Barang : <hr/><input type='text' onkeyup="autoComplete();" id='inputan' placeholder='cari disini'>
<div id='hasil'></div> <!– menampilkan hasil search –>
</div>
</body>
</html>
Penjelasan :
function getAjax() //fungsi untuk mengecek AJAX pada browser
{
try
{
ajaxRequest = new XMLHttpRequest();
}
catch (e)
{
try
{
ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
alert("Your browser broke!");
return false;
}
}
}
}
Script diatas digunakan untuk cek AJAX pada browser. Sebab versi browser berbeda, cek ini penting dilakukan untuk memastikan ajax dapat bekerja di browser dengan baik.
function autoComplete() //fungsi menangkap input search dan menampilkan hasil search
{
getAjax();
input = document.getElementById('inputan').value;

if (input == "")
{
document.getElementById("hasil").innerHTML = "";
}
else
{
ajaxRequest.open("GET","search.php?input="+input);
ajaxRequest.onreadystatechange = function()
{
document.getElementById("hasil").innerHTML = ajaxRequest.responseText;
}
ajaxRequest.send(null);
}
}

Untuk script diatas secara ringkas maksudnya adalah ketika user menuliskan huruf pada input field, maka event onkeyup akan mendeteksi input tersebut dan secara stimulan mengirimkanya ke fungsi auto complete ini (function autoComplete). Di dalam fungsi ini masih terdapat beberapa filter, yakni ketika tidak ada satupun karakter ditulis namun kolom input dalam keadaan aktif maka ajax tidak akan melakukan request ke search.php, sebaliknya jika terdapat karakter yang dituliskan ke kolom input, fungsi ini akan melakukan request kepada file search.php dengan membawa parameter (keyword) yang diketik oleh user.

function autoInsert(nama) //fungsi mengisi input text dengan hasil pencarian yang dipilih
{
document.getElementById('inputan').value = nama;
document.getElementById('hasil').innerHTML = "";
}
Setelah pencarian selesai dilakukan maka record yang didapat dari keyword akan ditampilkan, ketika user memilih suggest yang diberikan oleh ajax maka fungsi ini yang akan menangani input tersebut. Ketika event klik pada list suggest dilakukan oleh user,maka secara otomatis fungsi ini membaca apa yang dipilih oleh user dan memasukannya ke kolom input.
input type='text' onkeyup="autoComplete();" id='inputan' placeholder='cari disini'>

Input diatas digunakan untuk memasukan keyword. Sementara atribut onkeyup digunakan untuk mendeteksi penulisan di dalam kolom input.

<div id='hasil'></div> <!– menampilkan hasil search –>

Setelah pencarian berhasil dilakukan kemudian data dikembalikan lagi ke file search.html dan hasil pencarian diletakan di tag div yang mempunyai identitas hasil.

2.       Search.php

<html>
<head>
    <link rel='stylesheet' type='text/css' href='style.css' />
</head>
<body>
<?php
mysql_connect("localhost","root",""); /* koneksi */
mysql_select_db("coba");     /* MySQL */
if (isset($_GET['input']))
{
$input = $_GET['input'];
$query = mysql_query("SELECT * FROM barang WHERE nama LIKE '%$input%'"); //query mencari hasil search
$hasil = mysql_num_rows($query);
if ($hasil !=0)
{
echo"<ul class='auto'>";
while ($data = mysql_fetch_array($query))
{
?>
<a href="javascript:autoInsert('<?php echo"$data[1]"; ?>');">
<li>
<?php echo"$data[0]. $data[1] stok $data[2]"; ?>
</li>
</a>
<?php
}
echo"</ul>";
}
else
{
echo "Data tidak ditemukan";
}
}

else if(isset($_GET['id']))
{
$id = $_GET['id'];
$query = mysql_query("SELECT * FROM barang WHERE id='$id'");
$info = mysql_fetch_row($query);
echo "ID : ".$info[0]."<BR>Nama : ".$info[1]."<BR>Stock : ".$info[2];
}
?>
</body>
</html>

Penjelasan :
mysql_connect("localhost","root",""); /* koneksi */
mysql_select_db("coba");     /* MySQL */

Script diatas digunakan untuk koneksi ke localhost MySQL.
$input = $_GET['input'];
$query = mysql_query("SELECT * FROM barang WHERE nama LIKE '%$input%'"); //query mencari hasil search

Setelah keyword didapatkan dari request ajax dengan menggunakan metode get kemudian diambil ($_GET[‘input’]) dan dilakukan query select untuk mencari record yang mempunyai kandungan keyword tersebut didalamnya.

$hasil = mysql_num_rows($query);
if ($hasil !=0)

Kemudian dilakukan penghitungan terhadap record yang didapat, jika ternyata record yang dihitung adalah nol (0) atau tidak ditemukan record berdasarkan keyword yang dicari maka akan mucul pesan

echo "Data tidak ditemukan";

Atau sebaliknya jika memang terdapat record yang dicari maka lakukan baris berikut :

else if(isset($_GET['id']))
{
$id = $_GET['id'];
$query = mysql_query("SELECT * FROM barang WHERE id='$id'");
$info = mysql_fetch_row($query);
echo "ID : ".$info[0]."<BR>Nama : ".$info[1]."<BR>Stock : ".$info[2];
}

Pada script diatas dapat ditebak bahwa yang akan ditampilkan adalah field 0,1,2 (id,nama,stock).

3.   Style.css

/*
style.css
digunakan untuk tampilan
*/
body,html{margin: 0px;font-family: tahoma,arial,helvetica;font-size: 11px;color: #191919;padding: 10px;}
#outer{width: 300px;height: auto;overflow: hidden;margin: 5px;border: 0.1em solid #edd897;padding: 5px;background: #f3efe5;
-moz-box-shadow: 0px 0px 4px 4px #555;-webkit-box-shadow: 0px 0px 4px 4px #555;-khtml-box-shadow: 0px 0px 4px 4px #555;box-shadow: 0px 0px 3px 2px #bbb;
}
input{width: 200px;height: 30px;border: 0.1em solid #edd897;-moz-border-radius: 5px;-khtml-border-radius: 5px;-webkit-border-radius: 5px;border-radius: 5px;}
ul.auto{width: 100%;height: auto;overflow: hidden;display: inline;margin: 0px;padding: 0px;}
ul.auto li{width: 100%;height: 22px;border-bottom: 0.1em solid #edd897;background: #f4f4f4;padding: 8px 0px 0px 5px;}
ul.auto li:hover{background: #e9e9e9;}
a{text-decoration: none;color: #2f8eee;}

CSS diatas digunakan untuk memperindah tampilan pencarian di halaman search.html yang telah dibuat tadi. Dan hasil pembuatan ajax auto complete sebagai berikut :


Demikian artikel yang dapat saya bagikan, jika sekiranya dibutuhkan silakan di-copy, jika ingin dibagikan silakan cantumkan alamat sumber. Terima kasih saran yang membangun sangat penulis harapkan demi perbaikan artikel ini ke depanya. Terima kasih.




Yogyakarta, 8 Oktober 2013


Ikhwan Anshori        

Cari sesuatu?

Teman

 
 
Copyright © 2013 goldenbooks - All Rights Reserved
Golden Books - Powered By Blogger