salju

Selasa, 23 Juni 2009

Membuat Web Service dengan PHP

php
Dalam tutorial kali ini, saya akan menjelaskan cara membuat server dan client web service dengan PHP. Web service yang akan kita buat adalah web service yang menyediakan layanan operasi-operasi dasar matematika.
Kebutuhan
Paket SOAP untuk PEAR
Yap.. itu saja :D
Membuat Server
Untuk membuat server yang menyediakan web service, kita harus membuat sebuah kelas yang berisi method-method yang akan kita jadikan web service.
class OperasiMatematika {

function tambah($a, $b) {
return $a + $b;
}

function kurang($a, $b) {
return $a - $b;
}

function kali($a, $b) {
return $a * $b;
}

function bagi($a, $b) {
if ($b == 0) {
/* error */
}
else {
return $a / $b;
}
}

function mod($a, $b) {
return $a % $b;
}

}
Kelas tersebut akan menjadi dasar web service yang akan kita buat. Setelah itu, kita harus membuat daftar method-method yang akan dijadikan web service. Agar pendefinisian kelas dan pendefinisian daftar method untuk web service tidak dicampur, kita akan membuat daftar method-method tersebut dalam kelas turunannya saja.
class OperasiMatematikaService extends OperasiMatematika {

var $__dispatch_map;

function OperasiMatematikaService() {

$this->__dispatch_map['tambah'] = array(
'in' => array('a' => 'int', 'b' => 'int'),
'out' => array('hasil' => 'int')
);

$this->__dispatch_map['kurang'] = array(
'in' => array('a' => 'int', 'b' => 'int'),
'out' => array('hasil' => 'int')
);

$this->__dispatch_map['kali'] = array(
'in' => array('a' => 'int', 'b' => 'int'),
'out' => array('hasil' => 'int')
);

$this->__dispatch_map['bagi'] = array(
'in' => array('a' => 'int', 'b' => 'int'),
'out' => array('hasil' => 'float')
);

$this->__dispatch_map['mod'] = array(
'in' => array('a' => 'int', 'b' => 'int'),
'out' => array('hasil' => 'int')
);

}

function __dispatch($method_name) {

if (isset($this->__dispatch_map[$method_name])) {
return $this->__dispatch_map[$method_name];
}
else {
return NULL;
}
}

}
Perhatikan potongan source code di bawah ini.
$this->__dispatch_map['mod'] = array(
'in' => array('a' => 'int', 'b' => 'int'),
'out' => array('hasil' => 'int')
);
Bagian tersebut berisi penjelasan method yang didaftarkan untuk menjadi web service. Nilai dari key dari variabel $this->__dispatch_map, dalam hal ini adalah mod, adalah nama method yang akan dijadikan web service. Method ini harus ada di dalam kelas.
Nilai dari variabel tadi menjelaskan mengenai method yang bersangkutan. Dalam contoh di atas, method mod adalah method yang memiliki tipe operasi Request-response, yaitu method yang menerima request dan akan mengeluarkan response.
Jika kita lihat pada potongan source code di atas, method mod akan menerima input berupa dua buah variabel, yaitu a dan b yang masing-masing memiliki tipe int. Method tersebut akan mengeluarkan output berupa sebuah variabel hasil dengan tipe int.
Dalam contoh kelas OperasiMatematika, pada method bagi, ada bagian yang baru saya beri tanda /* error */. Bagian tersebut akan berisi potongan source code yang dapat mengeluarkan informasi error kepada client dari web service. Potongan source code yang akan kita isikan pada bagian tersebut adalah sebagai berikut.
return new SOAP_Fault('Anda melakukan pembagian dengan nol');
Method bagi dalam kelas OperasiMatematika akan menjadi sebagai berikut.
function bagi($a, $b) {
if ($b == 0) {
return new SOAP_Fault('Anda melakukan pembagian dengan nol');
}
else {
return $a / $b;
}
}
Sampai saat ini, Anda telah membuat sebuah deskripsi dari web service yang akan dibuat. Agar kelas-kelas tadi dapat digunakan sebagai web service, kita akan menggunakan fasilitas dari paket SOAP dari PEAR.

include_once('SOAP/Server.php');
include_once('SOAP/Disco.php');

class OperasiMatematika {
...
}

class OperasiMatematikaService extends OperasiMatematika {
...
}

$soap = new SOAP_Server();
$soap->_auto_translation = true;

$matematika = new OperasiMatematikaService();
$soap->addObjectMap($matematika, 'http://schemas.xmlsoap.org/wsdl/');

if (isset($_SERVER['REQUEST_METHOD']) && ($_SERVER['REQUEST_METHOD'] == 'POST')) {
$soap->service($HTTP_RAW_POST_DATA);
}
else {
header('Content-type: text/xml');
$disco = new SOAP_DISCO_Server($soap, 'OperasiMatematikaService');

if (isset($_SERVER['QUERY_STRING']) && (strcasecmp($_SERVER['QUERY_STRING'], 'wsdl') == 0)) {
print($disco->getWSDL());
}
else {
print($disco->getDISCO());
}
}

?>
Lengkapi isi dari kelas OperasiMatematika dan OperasiMatematikaService pada potongan source code di atas agar menjadi source code utuh yang dapat digunakan.
File PHP yang kita buat di atas berisi pendefinisian kelas yang akan menjadi web service, sebuah fasilitas untuk memproses request yang datang, dan fasilitas untuk melihat WSDL atau deskripsi dari web service yang kita buat.
Setelah semua ini dibuat, web service yang Anda buat sudah siap untuk digunakan. Anda dapat menggunakan fasilitas dari Microsoft .NET, Apache AXIS, atau client web service lainnya (seperti yang akan kita buat juga) untuk mengakses web service ini.
Source code
Demo server
WSDL
Membuat Client
Pembuatan client web service jauh lebih mudah daripada pembuatan server. Yang harus Anda lakukan pertama kali adalah menentukan alamat web service yang akan di akses. Saya akan menggunakan web service yang terletak pada http://arsip.fajran.web.id/web/tutorial/web-service-dengan-php/server.php?wsdl sebagai bahan uji coba pembuatan client web service.
Pertama-tama, Anda harus membuat proxy (client stub) sebagai perantara antara aplikasi client dan web service yang ingin Anda akses.
$soap = new SOAP_WSDL('http://arsip.fajran.web.id/web/tutorial/web-service-dengan-php/server.php?wsdl');
$proxy = $soap->getProxy();
Setelah proxy berhasil dibuat, Anda dapat menggunakan object $proxy tadi untuk mengakses method-method yang dijadikan web service seolah-olah method-method tersebut adalah method lokal.
$a = 2;
$b = 2;

$hasil = $proxy->tambah($a, $b);
print("

$a + $b = $hasil

");

$hasil = $proxy->kurang($a, $b);
print("

$a - $b = $hasil

");

$hasil = $proxy->kali($a, $b);
print("

$a * $b = $hasil

");

$hasil = $proxy->bagi($a, $b);
print("

$a / $b = $hasil

");

$hasil = $proxy->mod($a, $b);
print("

$a % $b = $hasil

");
Jika script di atas dijalankan, maka hasil yang akan Anda dapatkan adalah sebagai berikut.
2 + 2 = 4

2 - 2 = 0

2 * 2 = 4

2 / 2 = 1

2 % 2 = 0

struktur kontrol php

MODUL 5
STRUKTUR KONTROL PROGRAM

5.1 Struktur Berurutan
Struktur ini merupakan struktur yang paling sederhana. Program akan dijalankan secara urut dari awal program ke akhir program .
Contoh :
echo "Statemen 1";
echo "Statemen 2";
echo "Statemen 3";
?>
Disini dikenal istilah blok program , yaitu sebuah potongan program yang diapit oleh tanda { }.
Contoh :
If(true) { // awal blok
kata = "test";
echo "Ini tercetak\n";
echo "Jika kondisi bernilai true";
} // akhir blok
Catatan
Variable yang dideklarasikan pada suatu blok bersifat lokal di dalam blok tersebut. Blok biasanya digunakan untuk menyatakan bagian pada struktur kontrol lainnya.

5.2 Struktur Seleksi
Struktur ini digunakan untuk mengatur aliran program berdasarkan kondisi tertentu yang ditetapkan. Struktur ini terdiri dari struktur if … else dan switch. Struktur if … else digunakan untuk masalah percabangan proses.
Sintak :
If(syarat/kondisi){
Operasi yang dijalankan;
} else {
Operasi yang dijalankan;
}
Nilai dari syarat / kondisi adalah true atau false. True jika syarat terpenuhi dan false jika syarat tidak terpenuhi.
Contoh :
$nilai = 60;
if($nilai >= 50)
echo "Anda Lulus";
else
echo "Anda tidak lulus";
?>
Karena $nilai >= 50 maka kalimat "Anda Lulus" yang akan dicetak.

Untuk seleksi dengan alternatif banyak digunakan struktur switch.
Sintak :
switch(variable) {
case nilai 1 : perintah yang dijalankan ; break;
case nilai 2 : perintah yang dijalankan ; break;
...
default : perintah yang dijalankan ; break;
}
Contoh :
$bulan = 2;
Switch ($bulan) {
Case 1 : echo "Januari"; break;
Case 2 : echo "Februari"; break;
Case 3 : echo "Maret"; break;
Case 4 : echo "April"; break;
Case 5 : echo "Mei"; break;
Case 6 : echo "Juni"; break;
Case 7 : echo "Juli"; break;
Case 8 : echo "Agustus"; break;
Case 9 : echo "September"; break;
Case 10 : echo "Oktober"; break;
Case 11 : echo "November"; break;
Case 12 : echo "Desember"; break;
}
?>
Output :
Februari
 Selain switch dapat juga digunakan struktur if … elseif … else :
Sintak :
If ($syarat 1) {
proses 1
}
elseif ($syarat 2) {
proses 2
}
else {
proses 3
}
Contoh :
$hari = 3;
if($hari == 1) echo "Senin";
elseif($hari == 2) echo "Selasa";
elseif($hari == 3) echo "Rabu";
elseif($hari == 4) echo "Kamis";
elseif($hari == 5) echo "Jumat";
elseif($hari == 6) echo "Sabtu";
elseif($hari == 7) echo "Minggu";
else echo "Salah kode hari";
Output :





5.3 Struktur Pengulangan
Perulangan adalah sebuah proses eksekusi operasi program secara berulang-ulang sampai ditemui kondisi untuk mengakhiri eksekusi tersebut.

5.3.1 While loop
Bentuk while loop sebenarnya mengambil bentuk aliran logika seperti yang ditunjukkan oleh Gambar 5.1. Ada bagian operasi program yang akan diulang selama kondisi yang diuji masih bernilai true. Tentu saja agar tidak terjadi invinite loop, maka kondisi yang diuji harus berubah paa setiap iterasi.

Sintak :
while(syarat) {
operasi program ;
}
Operasi program akan dieksekusi terus-menerus selama syarat bernilai true. Bagian blok while mungkin dapat tidak dieksekusi jika pada awal looping syarat telah bernilai false.
Contoh :
$a = 0 ;
while($a < 5){
echo $a ;
$a++ ;
}
Output :
01234

 
5.3.2 Do - While loop
Bentuk do-while loop sebenarnya juga mengambil bentuk aliran logika seperti yang ditunjukkan oleh Gambar 5.2. Ada bagian operasi program yang akan diulang selama kondisi yang diuji masih bernilai true. Tentu saja agar tidak terjadi invinite loop, maka kondisi yang diuji juga harus berubah paa setiap iterasi.

Sintak :
do {
proses program ;
}while($syarat);
Proses program minimal dijalankan sekali karena pengujjian syarat dilakukan diakhir struktur. Blok do-while akan dieksekusi lagi jika syarat bernilai true;
Contoh :
$a = 0;
do {
echo $a;
$a++;
} while ($a < 5);
Output :
01234 
 



5.3.3 For loop
Bentuk for loop sebenarnya juga mengambil bentuk aliran logika seperti yang ditunjukkan oleh Gambar 5.1. Ada bagian operasi program yang akan diulang selama kondisi yang diuji masih bernilai true. Tentu saja agar tidak terjadi invinite loop, maka kondisi yang diuji juga harus berubah paa setiap iterasi. Inisialisai kondisi diberikan pada parameter pertama sintaks for (lihat sintaks for). Pengujian dilakukan pada parameter kedua sintaks for. Perubahan kondisi dilakukan pada parameter ketiga sintaks for.

Sintak :
for( nilai awal loop, syarat , penambahan ) {
operasi program ;
}
Contoh :
for ( $a = 0 ; $a < 5 ; $a++ ) {
echo $a ;
}
Output :
01234

Catatan Untuk menghentikan perulangan dari suatu loop digunakan kata kunci break. Break diikuti dengan numeric argumen menunjukkan berapa tingkatan loop yang dihentikan perulangannya.
Contoh :
$i = 0 ;
while(true) {
switch($i) {
case 0 : echo "Break pertama"; break 1 ;
case 1 : echo "Break kedua"; break 2 ;
default : break ;
}
$i++ ;
}
?>

5.4 Menghentikan Sebuah Loop
Ada kala kita ingin menghentikan atau keluar dari loop secara tiba-tiba. Meskipun tidak dianjurkan, PHP menyediakan perintah untuk hal ini, yakni perintah break dan exit. Perhatikan contoh di bawah ini.
Contoh Menghentikan sebuah Loop untuk menghindari Loop:


$counter = -3;

for (; $counter < 10; $counter++){
    // Check for division by zero
    if ($counter == 0){
        echo "Stopping to avoid zero.";
        break;
    }

    echo "100/$counter
";
}

?>

Script di atas menghasilkan:

100/-3
100/-2
100/-1
Stopping to avoid division by zero.

Dia akan loop sampai fungsi if dan karena ada script break, maka proses akan berhenti.

5.5 Statement continue
Penghentian loop dapat dilanjutkan dengan statement continue. Perhatikan contoh berikut:


$counter =- 3;

for (; $counter < 10; $counter++){
    // Check for division by zero
    if ($counter == 0){
        echo "Skipping to avoid zero.
";
        continue;
    }

    echo "100/$counter
";
}

?>

Script di atas akan menghasilkan:

100/-3
100/-2
100/-1
Skipping to avoid zero.
100/1
100/2
100/3
100/4
100/5
100/6
100/7
100/8
100/9

Dia akan loop sampai fungsi if dan karena ada script continue, maka proses akan berhenti mengganti angka 0 menjadi
Skipping to avoid zero
lalu looping akan di lanjutkan kembali

Selasa, 16 Juni 2009

MATERI PHP 2

MySQL adalah konsep penanganan database, terutama seleksi dan pemasukan data, sehingga pengolahan data bisa dikerjakan dengan mudah dan cepat. Kemampuan suatu sistem database (DBMS) dapat dikatakan baik dengan melihat dari cara kerja optimizer-nya dalam menjalankan proses perintah-perintah SQL, yang dibuat oleh pengguna maupun program-program aplikasinya. Sebagai database server, MySQL secara nyata lebih unggul dibanding database server lainnya dalam penanganan data. Ini dibuktikan dengan melihat yang dilakukan oleh single user, kecepatan query MySQL jauh lebih cepat dari PostgreSQL dan juga lima kali lebih cepat dibandingkan Interbase.


Koneksi Database Dengan menggunakan PHP


Koneksi Antara database dan PHP sangat penting dalam pembuatan web yang berguna untuk pemanggilan Data seperti yang digunakan dalam pembuatan Register,Membuat polling dan Pembuatan Cuplikan artikel.PHP paling sering di manfaatkan Oleh para web developer karena kemampuanya melakukan koneksi ke DATABASE dengan mudah dan cepat. Sehingga memudahkan kita untuk melakukan koneksi antara PHP dan database. Dalam pembahasan kali ini kita akan menggunakan MYSQL karena perangkat lunak databases satu ini sangat popular dan bersifat open source dan yang paling penting PHP memiliki fungsi-fungsi yang mendukung Penggunaan perangkat lunak yang satu ini.

Pembahasan kali ini saya terapkan setelah membaca PCplus dan saya telah mencoba setelah melakukan beberapa modifikasi dan berhasil dengan baik, kali ini saya terapkan dengan cara dan bahasa saya yg mudah dimengerti.

Pada dasarnya aplikasi MySQL terdiri dari dua bagian, yaitu MySQL server yang berjalan sebagai service atau daemon, beberapa perintah yang dijalankan dari command prompt atau shell yang digunakan untuk administrasi server, dan MySQL client yang menyediakan antarmuka untuk melakukan administrasi database di MySQL server.

Untuk keperluan contoh dan latihan, kita akan membuat sebuah database dengan MySQL. Buatlah sebuah database dengan nama perpustakaan sebagai berikut:

mysql> create database perpustakaan;

Pilihlah database tersebut sebagai database aktif.

mysql> use perpustakaan;

Buatlah sebuah tabel baru dengan nama table1 sebagai berikut:

mysql> create table table1(

-> nama_buku varchar(50),

-> jenis_buku varchar(30),

-> deskripsi varchar(50),

-> penulis varchar(30),

-> penerbit varchar(30);

Tabel ini adalah contoh suatu tabel daftar nama. Isikan tabel tersebut dengan data-data yang terdapat pada tabel A sebagai berikut:

Tabel A. Record-record untuk table1
nama_buku jenis_buku deskripsi penulis penerbit
Web dan PHP Pemrograman Cara cepat belajar PHP anton Tiga Serangkai
Cara mendidik anak keluarga Cara praktis mendidik anak andi Tiga Serangkai
Malin kundang Cerita rakyat Menceritakan tentang anak yang durhaka dayat Gava Media
Hidup sehat dengan olahraga Tips Cara hidup sehat Gale Gava Media
Instalasi komputer Komputer Cara Instalasi komputer Rasyid Tiga Serangkai

Ini trik untuk mempermudah proses “pengisian” data ini. Buatlah sebuah file teks yang berisi teks sebagai berikut:

Insert into table1 values (’web dan php’,'Pemrograman’,'cara cepat belajar php’,'anton’,'Tiga serangkai’);

Simpanlah file teks tersebut dengan nama misalnya table1.sql. Lalu jalankan perintah mysql dari prompt/shell sebagai berikut:

# mysql pcplus < table1.sql

atau

c:\mysql\bin> mysql pcplus < table1.sql

Bila perlu sertakan path lengkap dari file table1.sql tersebut.

Untuk memeriksa apakah pengisian data tersebut berhasil, maka buatlah query sebagai berikut:

myqsl> use perpustakaan;

mysql> select * from table1;

Hasil yang diberikan seharusnya sama persis dengan yang terlihat pada tabel A.

Nah, sekarang kita masuk ke aplikasi PHP yang akan mengakses database tersebut. Latihan pertama yang diberikan adalah mengakses atau melakukan koneksi ke server MySQL, mengambil query, dan menampilkan query tersebut ke halaman web.

Untuk melakukan koneksi ke database MySQL digunakan fungsi mysql_connect(). Fungsi ini merupakan jembatan antara aplikasi PHP dengan database MySQL. Sintaksnya adalah sebagai berikut:

mysql_connect(server, user, password)

Server adalah nama server yang merupakan host dari MySQL server, sedangkan user dan password adalah user dan password MySQL. Contoh:

$conn = mysql_connect(’localhost’,'root’,'rahasia’)

Setelah jembatan itu terbentuk, berikutnya adalah memilih database mana yang akan digunakan dalam aplikasi PHP. Fungsi yang digunakan adalah mysql_select_db(). Sintaksnya adalah sebagai berikut:

mysql_select_db(namadatabase[,koneksi])

Parameter koneksi adalah variabel yang menyimpan koneksi ke MySQL server yang dilakukan oleh fungsi mysql_connect(). Contoh:

mysql_select_db(’perpustakaan’,$conn)

Berikutnya adalah mengambil query dari database yang telah terkoneksi tersebut. Fungsi yang digunakan adalah mysql_query(). Sintaksnya adalah sebagai berikut:

mysql_query(perintahsql[,koneksi])

Contoh:

$qry = mysql_query(’select * from table1′,$conn)

Yang terakhir adalah menampilkan hasil query tersebut ke halaman web. Fungsi yang digunakan adalah mysql_fetch_array(). Fungsi ini digunakan untuk memasukkan hasil query ke dalam array assosiatif dan/atau array numeris. Dalam bentuk variabel array, tentunya record-record tersebut kini bisa ditampilkan. Sintaks dari fungsi mysql_fetch_array() adalah sebagai berikut:

mysql_fetch_array(query)

Query adalah hasil query yang didapatkan dari fungsi mysql_query(). Contoh:

$row = mysql_fetch_array($qry)

Berikut ini adalah contoh skrip lengkap bagaimana mengakses tabel table1 dari database yang telah kita buat di awal artikel ini.





Koneksi Ke Database






$host = “localhost”;

$user = “root”;

$pwd = “rahasia”;

$db = “perpustakaan”;

$sql = “select * from table1″;

$conn = mysql_connect($host,$user,$pwd);

mysql_select_db($db);

$qry = mysql_query($sql);

?>


















while ($row = mysql_fetch_array($qry)) {

?>
















}

?>


 
Nama Buku Jenis_buku Deskripsi Penulis Penerbit