• RSS
  • Facebook
  • Twitter
Comments


Sudah banyak artikel yang mengupas tentang mengubah dropdown list dengan Ajax dan PHP. Saya hanya akan mereview aja. Mungkin aja boz lupa sintaknya, betul gak? Keuntungan kalau website atau aplikasi yang kita buat telah menggunakan Ajax adalah halaman tidak perlu direfresh saat menampilkan data. Itu artinya pengguna tidak harus menunggu lama untuk melihat data yang diinginkan.

Kita langsung membahas contoh kasusnya ya boz. Misalnya pada sebuah aplikasi terdapat sebuah form untuk memasukkan data barang dimana setiap barang tergabung ke dalam sebuah grup barang. Contohnya kita punya sebuah grup barang dengan nama TV yang mempunyai beberapa merk barang seperti Soni, Sarap, ElGe, Dijitak, dan Sungsang.

Mari kita mulai dengan membuat dua buah tabel yaitu tabel grupbarang dan tabel barang. Kemudian masukkan beberapa sample data.

CREATE TABLE IF NOT EXISTS `grupbarang` (
`idgrupbarang` varchar(10) NOT NULL,
`grupbarang` varchar(40) NOT NULL,
PRIMARY KEY (`idgrupbarang`)
);

INSERT INTO `grupbarang` (`idgrupbarang`, `grupbarang`) VALUES
('Tv', 'Televisi'),
('Ant', 'Antena'),
('Kbl', 'Kabel');


CREATE TABLE IF NOT EXISTS `barang` (
`idbarang` varchar(20) NOT NULL,
`idgrupbarang` varchar(10) NOT NULL,
`barang` varchar(50) NOT NULL,
PRIMARY KEY (`idbarang`)
);

INSERT INTO `barang` (`idbarang`, `idgrupbarang`, `barang`) VALUES
('Tv1', 'Tv', 'Soni'),
('Tv2', 'Tv', 'Sarap'),
('Tv3', 'Tv', 'ElGe'),
('Ant1', 'Ant', 'Antena UHF PF Goceng'),
('Ant2', 'Ant', 'Antena UHF PF Ceban'),
('Tv4', 'Tv', 'Dijitak'),
('Tv5', 'Tv', 'Sungsang'),
('Kbl1', 'Kbl', 'Kabel Roll Hitam'),
('Kbl2', 'Kbl', 'Kabel Rol Bening'),
('Kbl3', 'Kbl', 'Kabel Antena Gepeng'),
('Kbl4', 'Kbl', 'Kabel Antena Bulat');

Sekarang kita buat file PHP dan Javascript.

InputForm.php

<?php
// sesuaikan path penyimpanan library adodb anda
include("../libs/adodb/adodb.inc.php");

$db=ADONewConnection('mysql');
$db->Connect('localhost','root', '','test');
?>
<!-- Sertakan file ajax.js -->
<script language="javascript" src="ajax.js"></script>
<h2>Input Data Barang</h2>
<form method="post" action="" name="inputform" id="inputform">

<?php
// ambil data grup barang dari tabel grubarang
$GB=$db->Execute("SELECT idgrupbarang, grupbarang FROM grupbarang");
?>
Grup barang :
<select name="idgrupbarang" onChange="showHint(this.value)">
<option value="" selected="selected">Pilih Grup Barang</option>
<?php
while(!$GB->EOF){
?>
<option value="<?php echo $GB->fields['idgrupbarang']?>"><?php echo $GB->fields['grupbarang']?></option>
<?php
$GB->MoveNext();
}
?>
</select>
<br />City :
<select name="idbarang" id="idbarang">
<option>-</option>
</select>
</form>

ajax.js

var xmlHttp

function showHint(str){
if (str.length==0){
document.getElementById("idbarang").innerHTML="";
return;
}
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null){
alert ("Browser anda tidak support AJAX!");
return;
}
var url="CariBarang.php";

url=url+"?id="+str;

url=url+"&sid="+Math.random();
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}

function stateChanged() {
if (xmlHttp.readyState==4){
document.getElementById("idbarang").innerHTML=xmlHttp.responseText;
}
}

function GetXmlHttpObject(){
var xmlHttp=null;
try {
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}catch (e){
// Internet Explorer
try{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}catch (e){
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}

CariBarang.php

<?php
// sesuaikan path penyimpanan library adodb anda
include("../libs/adodb/adodb.inc.php");

$db=ADONewConnection('mysql');
$db->Connect('localhost','root', '','test');

/*
Nilai variabel $id diambil dari variabel id yang dideklarasikan pada file ajax.js
*/
$id=$_GET['id'];

$B=$db->Execute("SELECT idbarang, barang FROM barang WHERE idgrupbarang='$id'");

$hint="";

while(!$B->EOF){
$hint.="<option value=".$B->fields['idbarang'].">".$B->fields['barang']."</option>";
$B->MoveNext();
}

if ($hint == ""){
$response="Tidak ada data barang";
}else{
$response=$hint;
}

//output responnya
echo $response;
?>

Antara file InputForm.php, ajax.js, dan CariBarang.php saling berhubungan. Pada InputForm.php kita menyertakan ajax.js.

<script language="javascript" src="ajax.js"></script>

Pada saat grup barang sudah kita pilih, method onChange="showHint(this.value)" akan mengirimkan data idgrupbarang yang baru saja dipilih ke ajax.js dan disimpan pada variabel id (url=url+"?id="+str;). Oleh ajax.js diteruskan ke file CariBarang.php, di file inilah terjadi query ke tabel barang berdasarkan nilai dari variabel id. Setelah proses query selesai, CariBarang.php mengirimkan hasil query ke ajax.js kemudian diteruskan ke InputForm.php dan diletakkan pada atribut id="idbarang".

Preview

Saat pertama kali dibuka, file InputForm.php akan menampilkan form seperti ini :



Setelah memilih salah satu grup barang, maka akan muncul daftar barang berdasar grub barang yang dipilih seperti ini :



[...]

Categories: ,
Comments


Setelah sekian lama tidak mengupdate blog ini, akhirnya tumbuh lagi semangat untuk terus selalu berbagi ilmu dengan kalian semua. Boz, kali ini saya akan menjelaskan bagaimana menampilkan data dari sebuah tabel dan ditampilkan menggunakan fungsi while. Tentu saja koneksi ke databasenya menggunakan ADOdb.

Pertama, saya siapkan tabelnya terlebih dahulu dan saya beri nama tabel employees. Berikut ini adalah sintak SQL-nya:

CREATE TABLE IF NOT EXISTS `employees` (
`id` int(6) NOT NULL AUTO_INCREMENT,
`name` char(20) DEFAULT NULL,
`lastname` char(20) DEFAULT NULL,
`salary` float DEFAULT NULL,
`age` int(2) DEFAULT NULL,
`afiliation` date DEFAULT NULL,
`status` int(1) DEFAULT NULL,
`active` tinyint(1) DEFAULT NULL,
`workeddays` int(2) DEFAULT NULL,
`photo` char(30) DEFAULT NULL,
PRIMARY KEY (`id`)
);

Dan berikut ini adalah datanya. Sengaja saya berikan sample datanya karena terkadang kita... Kita? Situ aja kali, aku mah enggak. Iya deh, saya. Terkadang kita, ups! Saya suka malas kalau mengisi sample data. Makanya saya sertakan sample data berikut ini untuk mengisi tabel yang telah dibuat sebelumnya.

INSERT INTO `employees` (`id`, `name`, `lastname`, `salary`, `age`, `afiliation`, `status`, `active`, `workeddays`, `photo`) VALUES
(1, 'Ana', 'Trujillo', 2000, 45, '2005-05-13', 2, 0, 10, '1.jpg'),
(2, 'Jennifer', 'Aniston', 3500, 23, '2004-10-22', 1, 0, 0, '2.jpg'),
(3, 'Michael', 'Norman', 1200, 19, '2007-01-10', 1, 1, 5, '3.jpg'),
(4, 'Vanessa55', 'Black', 7500, 31, '2000-11-05', 1, 0, 30, '4.jpg'),
(5, 'Michael', 'Strauss', 3200, 45, '2006-10-21', 2, 0, 22, '5.jpg'),
(6, 'William', 'Brown', 2300, 21, '2001-03-10', 1, 1, 10, '6.jpg'),
(7, 'Lucca', 'Normany', 2800, 36, '2006-10-02', 3, 0, 20, '7.jpg');

Sekarang, asumsinya, kita sudah mempunyai sebuah tabel dan berisi sample data. Selanjutnya kita tampilkan sample data tadi menggunakan fungsi perulangan while. Agar data yang ditampilkan di browser terlihat rapi, kita gunakan tag table, tr, th, dan td untuk membuat sebuah tabel. Sintaknya seperti ini dan simpan sebagai employees.php :

<table width="100%" border="1" cellspacing="0" cellpadding="2">
<tr>
<th>No.</th>
<th>First Name</th>
<th>Last Name</th>
<th>Salary</th>
<th>Age</th>
<th>Afiliation</th>
<th>Status</th>
<th>Active</th>
<th>Workeddays</th>
<th>Photo</th>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
</table>

Pada sintak diatas, tag-tag yang berwarna biru adalah tag yang akan berulang sesuai dengan banyaknya sample data yang ada. Agar kita bisa menampilkan sample data yang diambil dari database, maka kita harus menambahkan sintak untuk membuat koneksi ke database. Berarti kita harus mengedit file employees.php dan tambahkan script berikut ini di awal file.

<?php
include("../libs/adodb/adodb.inc.php");

/*******************************************************
Aturan dalam membuat koneksi ke database menggunakan ADOdb

$db=ADONewConnection($DRIVER);
$db->Connect($HOST,$USER_NAME, $PASSWORD,$USER_DATABASE);
*******************************************************/

$db=ADONewConnection('mysql');
$db->Connect('localhost','root', '','test');
?>

Selanjutnya adalah menambahkan sintak SQL yang membuat query ke tabel employees. Tambahkan sintak SQL berikut di bawah script koneksi yang telah dibuat sebelumnya.

$E=$db->Execute("SELECT id, name, lastname, salary, age, afiliation, status, active, workeddays, photo FROM employees");

Membuat koneksi ke database sudah, membuat sintak SQL juga sudah. Berarti sekarang tinggal membuat script untuk menampilkan data dengan menggunakan perulangan while. Kalau boz membaca artikel ini dari atas, pasti boz akan melihat kumpulan tag html yang berwarna biru. Tag-tag html yang berwarna biru kita edit menjadi seperti ini :

<?php
// beri nilai awal untuk nomor
$i=1;

// melakukan perulangan selama data masih ada untuk ditampilkan
// jika data sudah ditmpilkan semua(EOF = End Of File), perulangan while akan berhenti
while(!$E->EOF){
?>
<tr>
<td><?php echo $i?></td>
<td><?php echo $E->fields['name']?></td>
<td><?php echo $E->fields['lastname']?></td>
<td><?php echo $E->fields['salary']?></td>
<td><?php echo $E->fields['age']?></td>
<td><?php echo $E->fields['afiliation']?></td>
<td><?php echo $E->fields['status']?></td>
<td><?php echo $E->fields['active']?></td>
<td><?php echo $E->fields['workeddays']?></td>
<td><?php echo $E->fields['photo']?></td>
</tr>
<?php
$i++;
$E->MoveNext();
}
?>

Pusing ya boz kalau penjelasan sintaknya terpisah-pisah. Ya udah, kita gabungkan deh. Nah, kalau kita gabungkan maka sintaknya harusnya sih seperti ini :

<?php
include("../libs/adodb/adodb.inc.php");

/*******************************************************
Aturan dalam membuat koneksi ke database menggunakan ADOdb

$db=ADONewConnection($DRIVER);
$db->Connect($HOST,$USER_NAME, $PASSWORD,$USER_DATABASE);
*******************************************************/

$db=ADONewConnection('mysql');
$db->Connect('localhost','root', '','test');

$E=$db->Execute("SELECT id, name, lastname, salary, age, afiliation, status, active, workeddays, photo FROM employees");
?>
<table width="100%" border="1" cellspacing="0" cellpadding="2">
<tr>
<th>No.</th>
<th>First Name</th>
<th>Last Name</th>
<th>Salary</th>
<th>Age</th>
<th>Afiliation</th>
<th>Status</th>
<th>Active</th>
<th>Workeddays</th>
<th>Photo</th>
</tr>
<?php
// beri nilai awal untuk nomor
$i=1;

// melakukan perulangan selama data masih ada untuk ditampilkan
// jika data sudah ditmpilkan semua(EOF = End Of File), perulangan while akan berhenti
while(!$E->EOF){
?>
<tr>
<td><?php echo $i?></td>
<td><?php echo $E->fields['name']?></td>
<td><?php echo $E->fields['lastname']?></td>
<td><?php echo $E->fields['salary']?></td>
<td><?php echo $E->fields['age']?></td>
<td><?php echo $E->fields['afiliation']?></td>
<td><?php echo $E->fields['status']?></td>
<td><?php echo $E->fields['active']?></td>
<td><?php echo $E->fields['workeddays']?></td>
<td><?php echo $E->fields['photo']?></td>
</tr>
<?php
$i++;
$E->MoveNext();
}
?>
</table>

Hasilnya  seperti ini :



[...]

Categories: ,
Comments

Saat saya berseluncur ke website tetangga, saya melihat sebuah tombol submit yang bagus. Sepertinya tombol ini menggunakan gambar sebagai backgroundnya, saya berpikir seperti itu. Tapi saya salah sangka (Fuihh.. untung saja tidak berdosa). Setelah saya telanjangi kodenya, ternyata seperti ini:

<input type="image" value="Submit" src="url-image" />

Ternyata website tersebut menggunakan atribut type="image". Harus diakui kalau saya baru tau caranya seperti ini, hehehe.. Maka saya pun mulai bereksperimen dengan menambahkan beberapa kode javascript dan styles.

File HTML

<html>
<head>
<title>Styled Text Area by CSS-Tricks</title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<form action="#" method="post">
<div id="page-wrap">
<textarea name="styled-textarea" id="styled" onfocus="if (this.value == 'Ketik komentar anda disini') {this.value = '';};" onblur="if (this.value == '') {this.value = 'Ketik komentar anda disini';};">Ketik komentar anda disini</textarea>
<br />
<input type="image" value="Submit" src="submit-4.gif" class="kanan" />
</div>
</form>
</body>
</html>

File CSS

#page-wrap {
margin: 20px auto;
width: 616px;
}

textarea#styled {
width: 600px;
height: 60px;
border: 2px inset #cccccc;
padding: 3px;
font-family: Tahoma, sans-serif;
background-image: url(bg.gif);
background-position: bottom right;
background-repeat: no-repeat;
}

.kanan {
float: right;
margin-bottom: 25px;
margin-right: 17px;
}

Gambar

Dibawah ini adalah gambar-gambar yang digunakan dalam latihan kali ini. Silakan anda gunakan.








Ada yang mau menambahkan eksperimen yang saya lakukan? Silakan dicoba.
[...]

Categories:
Comments

Bagi pemula seperti kita, regular expression (regexp) tampaknya akan sulit untuk dipelajari dan digunakan. Tapi kalau mengingat pentingnya memahami dan menggunakan regexp maka kita akan selalu semangat dalam mempelajarinya. Sebelum kita menyelam jauh ke dalam regexp, mari kita lihat sintak dasar regexp:

Regular expressions syntax

Regular Expression Hasil
foo The string "foo"
^foo mendeteksi "foo" di awal sebuah string
foo$ mendeteksi "foo" di akhir sebuah string
^foo$ mendeteksi kata "foo"
[abc] mendeteksi a, b, atau c
[a-z] mendeteksi setiap yang dicetak lowercase
[^A-Z] mendeteksi setiap karakter yang tidak dicetak uppercase
(gif|jpg) Mencocokkan format gambar "gif" atau "jpeg"
[a-z]+ mendeteksi satu atau lebih karakter yang dicetak lowercase
[0-9.-] mendeteksi angka, titik (dot), atau tanda minus
^[a-zA-Z0-9_]{1,}$ mendeteksi teks baik huruf, angka atau tanda underscore (_) minimal satu buah
([wx])([yz]) mendeteksi wy, wz, xy, atau xz
[^A-Za-z0-9] mendeteksi simbol apapun yang bukan huruf atau angka
([A-Z]{3}|[0-9]{4}) membandingkan tiga buah huruf atau empat buah angka

Fungsi-fungsi PHP regular expression

Fungsi Penjelasan

preg_match()

fungsi preg_match() akan mencari data yang sesuai dengan pola yang telah ditentukan (misalnya [^A-Za-z0-9]), jika sesuai akan mengembalikan nilai true dan jika tidak sesuai makan akan mengembalikan nilai false

preg_match_all()

fungsi preg_match_all() akan mencari data secara keseluruhan yang sesuai dengan pola, misalnya digunakan dalam memvalidasi URL

preg_replace()

preg_replace() mempunyai fungsi yang sama dengan ereg_replace(), tapi pada regular expressions dapat digunakan sebagai pola dan dapat digunakan untuk memanipuasi data. Misalnya kita ingin menandai setiap kata PHP dengan warna merah.

preg_split()

preg_split() mempunyai fungsi yang sama dengan split(), tapi pada regular expressions dapat digunakan sebagai as input parameters untuk pola.

preg_grep()

fungsi preg_grep() mencari semua elemen dari input_array, dan mencocokkan semua elemen dengan pola regexp.


preg_ quote()

Menambahkan tanda kutip dua (") pada karakter regular expression

Validasi pada URL

Memverifikasi apakah URL yang dimasukkan sudah benar atau belum.

$url = "http://duniacopypaste.blogspot.com/";
if (preg_match('/^(http|https|ftp)://([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*)+):?(d+)?/?/i', $url)) {
echo "URL ok.";
} else {
echo "Wrong URL.";
}

Memberikan warna latar belakang pada kata tertentu yang berada dalam kalimat

Regexp ini sangat berguna untuk digunakan pada hasil pencarian.

$text = "Walaupun Regexp cukup sulit dipelajari oleh kita sebagai pemula, tapi Regexp sangat bermanfaat dalam memproteksi sistem dari data yang salah atau kode porgram yang jahat.";
$text = preg_replace("/b(Regexp)b/i", '1', $text);
echo $text;
}

Contoh implementasinya dapat di lihat pada artikel Validasi Form dengan Regular Expression
[...]

Categories: ,
Comments

Untuk pada programmer Windows, membaca ADOdb mungkin pikirannya langsung tertuju pada ADODB pada VB. ADOdb yang ini tidak ada hubungannya dengan VB boz, kerabatnya juga bukan. ADOdb adalah pustaka yang diciptakan oleh John Lim - sekarang sudah rilis versi 4 - untuk memudahkan para programmer dalam memanipulasi database. Saat ini ADOdb telah mendukung MySQL, Oracle, Microsoft SQL Server, Sybase, Sybase SQL Anywhere, Informix, PostgreSQL, FrontBase, Interbase (Firebird dan Borland variants), Foxpro, Access, ADO dan ODBC. Jadi para programmer PHP tidak akan kesulitan bila ingin bermigrasi dari sebuah DBMS ke DBMS lainnya. Karena drivernya telah tersedia, ADOdb.

Biasanya programmer PHP pemula seperti kita, saat membuat sebuah website atau sistem, akan menggunakan MySQL sebagai DBMS-nya dan menggunakan fungsi built-in dalam melakukan koneksi dan manipulasi database. Misalnya mysql_connect, mysql_query dan masih banyak lagi. Bayangkan kalau misalnya kita sudah mempunyai banyak file dan menggunakan fungsi-fungsi bawaan tersebut dalam melakukan koneksi dan manipulasi data, kemudian suatu saat kita ingin mengganti DBMS kita dari MySQL ke Oracle misalnya. Wah, artinya kita harus lembur tuh boz. Kenapa? Kita kan harus mengganti fungsi-fungsi bawaan ntuh boz.

Fungsi-fungsi built-in bukannya tidak bagus boz, justru praktis dan powerfull. Dengan catatan kalau kita memang hanya akan menggunakan MySQL. Tapi kalau dari awal akan menggunakan DBMS selain MySQL, gunakanlah ADOdb sebagai drivernya. Apa sih keuntungan menggunakan ADOdb?
  1. Bagi programmer Windows akan lebih mudah dalam penggunaannya karena dengan Microsoft ADO.
  2. ADOdb memberikan dukungan dalam menangani manipulasi database dan dapat diadaptasi ke banyak database.
  3. Mempunyai sistem metatype built-in sehingga kita dapat mengetahui jenis data seperti Char, String dan walaupun dalam database berbeda.
  4. ADOdb juga mendukung session.


Cara menginstall ADOdb

Pastikan kalau boz sudah mengupgrade versi PHP ke versi 4.0.5 atau lebih tinggi. Download library ADOdb kemudian simpan ke dalam direktori pada web server.

Cara menginstall ADOdb

Untuk pengembang yang ingin melakukan instalasi minimal, cukup Copy Paste filefile berikut ini dan simpan pada web server:
  • adodb.inc.php
  • adodb-lib.inc.php
  • adodb-time.inc.php
  • drivers/adodb-$database.inc.php
  • license.txt
  • adodb-php4.inc.php
  • adodb-iterator.inc.php

Sekarang saatnya menguji koneksi. Kita buat sebuah database dengan nama dbcoba dan sebuah tabel dengan nama tblcoba. Kalau saat membaca artikel ini boz juga mempraktekkannya, isilah tblcoba dengan beberapa record data untuk kita jadikan indikator keberhasilan koneksi nantinya. Buat sebuah file yang berisi kode program seperti ini:

<?php
// Sesuaikan path-nya
include('adodb/adodb.inc.php');

// Menentukan DSN
$db = ADONewConnection("mysql");

// Fungsi debug akan menampilkan sintak SQL di layar, bisa digunakan untuk memeriksa sintak SQL.
// isi dengan false atau 0 jika sintak SQL tidak ingin muncul di layar
$db->debug = true;

// Format koneksi ->$server, $user, $password, $database
$db->Connect("localhost", "root", "", "dbcoba");
$rs = $db->Execute('select * from tblcoba');
print "<pre>";
print_r($rs->GetRows());
print "</pre>";
?>

Jika tidak ada kesalahan koneksi dan fungsi debug tetap berisi true (bisa juga diisi dengan angka 1) maka di layar akan muncul sintak SQL beserta data yang ada pada tblcoba.

Sederhanakan Koneksi Agar Mudah Mengelolanya

Pada contoh di atas, proses koneksi dan SQL berada dalam satu file. Coba bayangkan (lagi), kita mempunyai banyak file dimana pada masing-masing file terdapat baris koneksi dan sintak SQL seperti contoh di atas. Kemudian kita akan mengganti lagi DBMS-nya. Sudah pasti lembur lagi nih boz, karena harus membuka file satu persatu dan mengganti DSN-nya ($db = ADONewConnection($DSN)). Kok masih repot yah walaupun sudah memakai ADOdb? Tenang. Pisahkan saja baris koneksi menjadi file tersendiri, nanti file koneksi tersebut dapat dipanggil oleh file-file lainnya. Misalnya seperti ini:

<?php
// Sesuaikan path-nya
include('adodb/adodb.inc.php');

// Menentukan DSN
$db = ADONewConnection("mysql");

// Format koneksi ->$server, $user, $password, $database
$db->Connect("localhost", "root", "", "dbcoba");
?>

Simpan kode di atas dengan nama koneksi.php misalnya. File manapun yang membutuhkan koneksi ke database tinggal memanggil file koneksi.php. Praktis yah. Sekarang kembali ke anda sendiri boz, apa masih mau menggunakan fungsi-fungsi built-in PHP-MySQL atau menggunakan ADOdb. Yang mana yang terbaik kan relatif, tergantung kasusnya. Pilihan di tangan anda boz.
[...]

Categories: