Anda di halaman 1dari 89

PHP Advance

LP3T NurulFikri, 2010 Sirojul Munir

Program Reguler & Inhouse

PHP Advance

DAFTAR ISI
DAFTAR ISI.....................................................................................................................................i Kata Pengantar................................................................................................................................iv Bab 1. Merancang Website..............................................................................................................1 1.1.Tujuan:..................................................................................................................................1 1.2.Tahapan merancang website.................................................................................................1 1.2.1 Struktur website.............................................................................................................1 1.2.2 Sequence........................................................................................................................1 1.2.3 Hierarchies.....................................................................................................................2 1.3.Diagram Website...................................................................................................................2 1.3.1 Struktur file dan direktori website.................................................................................3 1.3.2 Merancang Menu Website.............................................................................................3 1.4.Template website...................................................................................................................5 1.4.1 Jenis tampilan template.................................................................................................5 1.5.Membuat template sederhana................................................................................................7 1.5.1 Mock up aplikasi...........................................................................................................7 1.6.Menu interaktif....................................................................................................................10 1.6.1 Membuat Menu...........................................................................................................10 Bab 2. Variable dan Fungsi............................................................................................................12 2.1.Tujuan .................................................................................................................................12 2.2.Variabel...............................................................................................................................12 2.2.1 Mendefinisikan Variabel..............................................................................................12 2.2.2 Indirect References Variabel........................................................................................13 2.2.3 Mengatur Variabel ......................................................................................................13 2.2.4 Superglobal..................................................................................................................14 2.3.Fungsi..................................................................................................................................15 2.3.1 Fungsi yang didefinisikan user....................................................................................15 2.4.Skup variabel dan Fungsi....................................................................................................16 2.4.1 Return By Value..........................................................................................................17 2.4.2 Return By References..................................................................................................17 2.5.Parameter Fungsi.................................................................................................................18 2.5.1 Parameter By Value.....................................................................................................18 2.5.2 Parameter By References............................................................................................18 2.6.Default Parameter ..............................................................................................................18 Bab 3. Object Oriented Programming ..........................................................................................20 3.1.Tujuan:................................................................................................................................20 3.2.Pengertian OOP...................................................................................................................20 3.3. Mendefinisikan Class.........................................................................................................21 3.4.Keyword new dan Constructor class...................................................................................21 3.5.Destructor............................................................................................................................22 3.6.Akses Method dan Properties dengan keyword $this.........................................................23 3.7.Public, protected dan private properties..............................................................................23 3.8.public, protected dan private Method..................................................................................24 3.9.Static Properties ( Variabel Static ).....................................................................................25 3.10.Static Method....................................................................................................................27 3.11.Konstanta Pada Class........................................................................................................27 LP3T NurulFikri i

Program Reguler & Inhouse

PHP Advance

3.12.Polymorphism...................................................................................................................28 3.13.parent:: dan self::...............................................................................................................32 3.14.Operator instanceof...........................................................................................................33 3.15.Method Abstract dan Class...............................................................................................34 3.16.Interfaces...........................................................................................................................36 3.17.final Method......................................................................................................................38 3.18.final Class..........................................................................................................................38 3.19.Method __toString( ).........................................................................................................39 Bab 4. Pustaka Database PDO.......................................................................................................40 4.1.Tujuan:................................................................................................................................40 4.2.Lapisan Abstraksi Database................................................................................................40 4.3.PDO : Portable Data Objects..............................................................................................41 4.4.Koneksi ke database ...........................................................................................................41 4.4.1 Koneksi ke database MySQL......................................................................................41 4.4.2 Koneksi ke database PostgreSQL................................................................................42 4.4.3 Koneksi melalui ODBC...............................................................................................42 4.4.4 Menangkap eksepsi kesalahan ....................................................................................42 4.5.Fungsi-Fungsi pada PDO....................................................................................................43 4.5.1 Fungsi exec( ) .............................................................................................................43 4.5.2 Fungsi query() ............................................................................................................44 4.5.3 Fungsi execute() .........................................................................................................44 4.5.4 Fungsi fectch() ...........................................................................................................45 4.5.5 Fungsi fectchAll() ......................................................................................................45 4.5.6 Fungsi rowCount()......................................................................................................46 4.5.7 Tips Error Buffered Query...........................................................................................46 Bab 5. Transaksi Database.............................................................................................................47 5.1.Tujuan:................................................................................................................................47 5.2.Apa itu transaksi database ?................................................................................................47 5.3.Transaksi pada database MySQL........................................................................................48 5.3.1 Database dengan format table InnoDB.......................................................................48 5.3.2 Contoh kasus transaksi................................................................................................48 5.3.3 Transaksi dengan menggunakan library PDO.............................................................49 Bab 6. MySQL Store Procedure & Trigger...................................................................................50 6.1.Tujuan:................................................................................................................................50 6.2.Store Procedure...................................................................................................................50 6.2.1 Perintah Create Procedure dan Function.....................................................................50 6.2.2 Contoh Kasus Sederhana.............................................................................................51 6.2.3 Memanggil Store Procedure........................................................................................51 6.2.4 Menghapus Prosedure Hitung Pegawai.......................................................................51 6.3.Contoh Kasus Store Procedure Pembelian Produk.............................................................51 6.3.1 Procedure pembelian_produk......................................................................................51 6.3.2 Memanggil procedure .................................................................................................52 6.3.3 Menjalankan store procedure dalam PHP ..................................................................52 6.4.Trigger ................................................................................................................................53 6.4.1 Perintah Trigger ..........................................................................................................53 6.4.2 Contoh Trigger pada kasus pembelian produk............................................................53 Bab 7. Input Output File.............................................................................................................54 7.1.Tujuan:................................................................................................................................54 7.2.Operasi File.........................................................................................................................54 LP3T NurulFikri ii

Program Reguler & Inhouse

PHP Advance

7.2.1 fopen() ........................................................................................................................54 7.2.2 fclose() ........................................................................................................................55 7.2.3 feof() ...........................................................................................................................55 7.2.4 file_exists() .................................................................................................................55 7.2.5 fgets() ..........................................................................................................................55 7.2.6 fputs() .........................................................................................................................56 7.2.7 file() ............................................................................................................................56 7.2.8 filesize() ......................................................................................................................57 7.3.Upload file...........................................................................................................................57 7.3.1 Form upload file..........................................................................................................57 7.3.2 Skrip upload file..........................................................................................................57 7.3.3 Membatasi ukuran file dan tipe file upload.................................................................58 7.3.4 Simpan file upload.......................................................................................................58 Bab 8. Menggunakan External Library..........................................................................................59 8.1.Tujuan:................................................................................................................................59 8.2.Mengapa menggunakan eksternal library...........................................................................60 8.3.Paket PEAR::HTML_QUICKFORM.................................................................................60 8.3.1 Download dan Install paket HTML_QuickForm........................................................60 8.3.2 Membuat object Form.................................................................................................60 8.3.3 Menambahkan Elemen Form.....................................................................................60 8.3.4 Menambahkan Rule pada elemen Form......................................................................61 8.3.5 Validasi Form...............................................................................................................61 8.3.6 Menangkap request Form............................................................................................62 8.3.7 Proses Form ke database ............................................................................................62 Bab 9. Paging.................................................................................................................................64 9.1.Tujuan:................................................................................................................................64 9.2.Kebutuhan paging...............................................................................................................64 9.3.Query Limit dan Offset.......................................................................................................64 9.4.Paging database MySQL.....................................................................................................65 Bab 10. Session Role Permission..................................................................................................67 10.1.Tujuan:..............................................................................................................................67 10.2.Apa itu Session..................................................................................................................67 10.3.Fungsi-Fungsi Session......................................................................................................67 10.4.User Apliksi.......................................................................................................................68 10.5.Role Permission................................................................................................................69 10.6.Login Aplikasi...................................................................................................................70 10.7.Logout ..............................................................................................................................71 Bab 11. Error Handling..................................................................................................................72 11.1. Level Error.......................................................................................................................72 11.2.Konfigurasi Error pada php.ini..........................................................................................74 11.3.Tabel Error Handling.........................................................................................................74 11.4.Custom Error.....................................................................................................................76 11.5.Trigger Error......................................................................................................................78 11.6.Log Error...........................................................................................................................81 11.7.Exception ..........................................................................................................................82 11.7.1 Apa itu Exception ?...................................................................................................82 11.7.2 Try Catch ..................................................................................................................83 11.7.3 Extends Exception.....................................................................................................83

LP3T NurulFikri

iii

Program Reguler & Inhouse

PHP Advance

Kata Pengantar

Assalamualaikum Wr.Wb Alhamdulillah, puji syukur kami haturkan kehadirat Allah SWT semata. Atas berkat rahmat dan hidayahnya Buku Panduan Mata Kuliah Java Fundamental bisa terwujud, buku panduan yang sekarang ada di tangan anda ini, Insya Allah akan membantu dalam proses belajar pemrograman Java. Materi kuliah Java Fundamental yang ada pada buku ini untuk dirancang untuk 4 SKS, diharapkan dengan mengikuti kuliah Java Fundamental ini mahasiswa dapat mengenal dan memahami bahasa pemrograman Java, serta dapat mengembangkan dan menggunakan Java sebagai bahasa alternatif untuk pengembangan teknologi informasi. Sebagaimana teknologi informasi yang terus semakin berkembang, Buku materi kuliah Java Fundamental diharapkan akan tetap relevan dengan teknologi yang ada saat ini. Kritik dan saran dari para pembaca dan pengguna buku ini sangat kami harapkan untuk membantu dalam perbaikan buku ini. Akhir kata, kami ucapkan banyak terima kasih kepada semua pihak yang telah membantu penulisan buku ini, Mudah-mudahan apa yang telah kita hasilkan ini menjadi amal baik dan ilmu yang ada dalam buku ini dapat bermanfaat bagi Mahasiswa dan tentu saja bagi perkembangan pemrograman Java di Indonesia. Wassalamualaikum Wr.Wb Jakarta, 11 Februari 2010

Sirojul Munir

LP3T NurulFikri

iv

Program Reguler & Inhouse

PHP Advance

Bab 1.
1.1. Tujuan:

Merancang Website

Memahami dan mengerti perbedaan static web page dengan dynamic web page. Memahami dan mengerti apa itu web scripting atau web programming. Memahami apa itu php dan mengapa menggunakannya.

1.2. Tahapan merancang website


Dasar dari merancang / meng-organisasikan suatu web site adalah design atau rancangan yang sesuai dengan keinginan user. Tanyakan kepada user apa yang user inginkan, dan fokuskan web site yang anda ingin buat atas dasar apa yang diinginkan user. Banyak organisasi ataupun perusahaan membuat kesalahan pada web site mereka yang hanya menampilkan struktur organisasi sebagai hal yang utama dibandingkan dengan produk dan jasa yang ditawarkan atau informasi yang banyak dicari pengunjung website. Kebanyakan pengunjung website tidak akan peduli akan informasi bagaimana perusahaan anda dijalankan, tidak peduli akan informasi struktur organisasi dan manajemen perusahaan. Carilah informasi apa yang diinginkan oleh audience dengan berbicara atau wawancara dengan user atau audience web site anda. Demikian pula ketika akan membuat aplikasi, vendor (software maker) tentu akan membuat sesuai dengan keinginan client mereka. Melalui proses requirement akan didapatkan apa yang diinginkan oleh user / client. Satu hal lagi yang terpenting adalah bagaimana website anda tidak membosankan bagi user atau audience website. Buatlah seolah-olah ada hal baru yang dapat membuat audience website berlama-lama mengunjungi website anda. Pilihlah design dan warna web site yang mencitrakan audience anda. 1.2.1 Struktur website

Sebuah website dibangun untuk memberikan atau menyediakan informasi kepada audience. Informasi yang diberikan oleh suatu website haruslah terorganisasi dengan baik, sehingga audience dapat menerima atau mengolah informasi yang didapat dengan baik. Ada beberapa struktur website dalam memberikan informasi kepada audiencenya: Sequences, hierarchies 1.2.2 Sequence

Cara paling mudah mengorganisasikan informasi adalah dengan menempatkan informasi secara berurutan (sequences). Informasi diberikan secara kronologis kejadian informasi, informasi diberikan dari yang general ke spesifik, atau dengan secara alphabetic seperti dalam index, glossary, encyclopedia. Sebagai contoh user harus mengisi form pendaftaran terlebih dahulu baru bisa mengisi form transaksi.

www.nurulfikri.com 7874223 / 24

Program Reguler & Inhouse

PHP Advance

Gambar 1.1 Sequence Informations Website yang komplek bisa juga diorganisasikan dengan menggunakan struktur sequences, dimana setiap halaman akan mempunyai link dari halaman utama (parenthetical informations), bisa saja link menuju website yang berbeda.

Gambar 1.2 Complex Sequence Informations 1.2.3 Hierarchies

Informasi yang diberikan secara hirarki bagus digunakan untuk website yang mempunyai informasi yang komplek. Biasanya website diorganisasikan dalam satu home page, skema hirarki ini sangat cocok untuk mengorganisasikan website. Diagram pada skema hirarki biasanya digunakan pada website organisasi atau perusahaan, sehingga individu dalam organisasi itu bisa menemukan posisi masing-masing dengan cepat dan mudah dimengerti. Skema Hirarki mengharuskan kedisiplinan pada isi (content) dari web, karena skema hirarki akan bisa berjalan dengan baik pada suatu organisasi yang telah tersusun dengan baik dan benar.

Gambar 1.3 Struktur Hierarchies

1.3. Diagram Website


Diagram website adalah diagram yang menggambarkan organisasi dan struktur dari sebuah website, diagram website teridiri dari content (isi halaman web), navigasi, fungsi-fungsi
www.nurulfikri.com 7874223 / 24

Program Reguler & Inhouse interaktif website (link,form dll).

PHP Advance

Membangun website oleh sebuah tim akan mudah jika pekerjaan dibagi-bagi secara terstruktur dan diagram dari rencana pembuatan website dipahami oleh masing-masing individu dalam tim, sehingga individu dapat saling bekerja sama. 1.3.1 Struktur file dan direktori website

Pola dari direktori dan sub direktori harus menggambarkan isi utama dari masing-masing divisi yang bisa terlihat dalam diagram website :

Gambar 1.4 Konsep diagram website Diagram website akan diterjemahkan pada proses pembuatan website di server yang berupa file dan direktori. 1.3.2 Merancang Menu Website

Menu adalah alat navigasi bagi audience ketika mengunjugi suatu website, Ketika informasi yang diberikan oleh sebuah website semakin komplek, maka relasi antar halaman website harus didefinisikan dengan baik, sehingga audience tidak dibingungkan oleh link-link yang tak jelas.

Gambar 1.5 Relasi yang tak jelas antar halaman web

www.nurulfikri.com 7874223 / 24

Program Reguler & Inhouse

PHP Advance

Website yang efisien adalah website yang memberikan relasi antar halaman web dalam bentuk menu yang jelas, menu dirancang secara hirarki dan user yang mengunjungi halaman web tidak akan bingung manakala berada dalam halaman web, user mengerti halaman selanjutnya yang akan dikunjungi.

Gambar 1.6 Hirarki Menu Struktur menu dalam suatu website bisa terlihat berjenjang, Informasi diberikan oleh lapisan menu. Namun demikian Menu yang berjenjang sebaiknya jangan terlalu dalam, karena akan membuat frustasi user.

Gambar 1.7 Hirarki Menu yang berjenjang Content dari sebuah website dapat juga diorganisasikan lewat link dengan tambahan informasi naratif dibawah link yang akan dipilih.

www.nurulfikri.com 7874223 / 24

Program Reguler & Inhouse

PHP Advance

Gambar 1.8 Menu Link yang informatif

1.4. Template website


Sebelum website dibuat, web designer telah merancang tampilan website secara keseluruhan, paling tidak halaman depan. 1.4.1 Jenis tampilan template Ada beberapa macam template yang sering digunakan: 1. Template dengan menu kiri

Gambar 1.9 : Template menu di kiri

www.nurulfikri.com 7874223 / 24

Program Reguler & Inhouse 2. Template dengan menu kanan

PHP Advance

Gambar 1.10 : Template menu di kanan 3. Template dengan 3 kolom

Gambar 1.11 : Template 3 kolom

1.5. Membuat template sederhana


Dari beberapa jenis template yang disebutkan tadi, kita dapat membuat template sederhana dengan menggunakan table HTML.
1 2 3 4 5 6 7 8 9 <table width="100%" cellspacing="0" cellpadding="0" border="1"> <tr> <td colspan="2"><h1 align="center">Welcome to MyWeb</h1></td> </tr> <tr> <td width="20%" valign="top"> Menu Kiri </td> <td height="400" valign="top">

www.nurulfikri.com 7874223 / 24

Program Reguler & Inhouse


10 11 12 13 14 15 16 17 18 19 20 21

PHP Advance

Content Web </td> </tr> <tr> <td colspan="2"> <center> <span style="color:blue;font-family:arial;font-weight:bold"> Develop By siswa@lp3tnf.or.id </span> </center> </tr> </table>

Gambar 1.11 : Template web sederhana 1.5.1 Mock up aplikasi

Mock up aplikasi adalah tampilan statis (HTML) dari suatu aplikasi, mock up dirancang oleh web designer dari informasi yang didapatkan dari client melalui seorang project manager. Mock up hanya menggambarkan User Interface yang akan dihadapi oleh client untuk suatu proses bisnis. Mock up akan diimplementasikan oleh programmer menjadi suatu aplikasi yang dinamis (misalnya : terhubung ke database, validasi form). Sehingga jelas pembagian kerja antara programmer dan web designer, programmer tidak mengurusi masalah tampilan, tampilan adalah area kerja untuk web designer.

1. Contoh Form Mock up Buku Tamu :

www.nurulfikri.com 7874223 / 24

Program Reguler & Inhouse

PHP Advance

Gambar 1.12 : Mockup buku tamu Nama File : gesbuk.html


1 <center> 2 <h3>.::Buku Tamu::.</h1> 3 <form> 4 <table width="600" cellspacing="1" cellpadding="1" border="1"> 5 <tr> 6 <td>Nama</td><th width=10>:</th><td><input type="text" name="nama" value="" size=""></td> 7 </tr> 8 <tr> 9 <td>Email</td><th width=10>:</th><td><input type="text" name="email" value="" size=""></td> 10 </tr> 11 <tr> 12 <td>Pesan</td><th width=10>:</th><td><textarea cols="30" rows="3" name="pesan">Pesan Anda</textarea></td> 13 </tr> 14 <tr> 15 <td>Emotional Icons</td><th width=10>:</th> 16 <td> 17 <input type="radio" name="ei" value="1"><img src="1.gif"> 18 <input type="radio" name="ei" value="2"><img src="2.gif"> 19 <input type="radio" name="ei" value="3"><img src="3.gif"> 20 <input type="radio" name="ei" value="4"><img src="4.gif"> 21 </td> 22 </tr> 23 <tr> 24 <th colspan="3"> 25 <input type="submit" value="Kirim" name="proses"> 26 <input type="submit" value="Batal" name="proses"> 27 </th> 28 </tr> 29 </table> 30 </form> 31 </center>

www.nurulfikri.com 7874223 / 24

Program Reguler & Inhouse 2. Mockup List Gesbuk :

PHP Advance

Gambar 1.13 : Mockup List Gesbuk Nama File : list_gestbuk.html


1 <h2 align="center">List Gesbuk</h2> 2 <table width="100%" cellspacing="2" cellpadding="2" border="1"> 3 <tr> 4 <th>No</th><th>Nama</th><th>Email</th><th>Pesan</th><th>EI</t h> 5 </tr> 6 <tr><td>1</td><td>Rosalie Naurah</td><td>rosalie_naurah@yahoo.com</td> <td>Assalamualaikum Adek ...</td><td><img src="1.gif"></td> 7 </tr> 8 <tr><td>2</td><td>Alissa Shafwah</td><td>alissa_shafwah@yahoo.com</td> <td>Walaikum salam Kakak Oca</td><td><img src="3.gif"></td> 9 </tr> 10 <tr><td>3</td><td>Rahmi Arsy</td><td>rahmi_arsy@yahoo.com</td><td>Apa kabar Kaka Oca</td><td><img src="2.gif"></td> 11 </tr> 12 <tr><td>4</td><td>Defghi Arsy</td><td>defghi_arsy@yahoo.com</td><td>Ih Kaka Oca Lucu dech</td><td><img src="2.gif"></td> 13 </tr> 14 </table>

1.6. Menu interaktif


Sebelum membuat menu, anda terlebih dahulu harus mendefinisikan menu apa yang ingin anda buat. Ada baiknya menu tidak terlalu banyak, kelompokan menu kedalam sub menu sehingga menu anda bisa menjadi lebih ramping. Dalam websitenya Jacob Nielsen (Seorang Pakar Usibility dan Web Design: www.useit.com) menyebutkan jumlah menu yang baik adalah tak lebih dari 7 menu. Berikut contoh menu : Home Product Schedule Events Guestbook Contact Us About Us

www.nurulfikri.com 7874223 / 24

Program Reguler & Inhouse 1.6.1 Membuat Menu

PHP Advance

Langkah pertama setelah anda mendefinisikan menu adalah buat file tujuan ketika link menu di pilih oleh user, misal (home.php untuk link Home, guest.php untuk link Menu Guestbook). Berikut kode program untuk membuat dan menampilkan link interaktif :
1 <?php 2 $link_top = array (1=>"Home","Products","Schedule","Events","Guestbook", 3 "Contact Us","About Us"); 4 $link_file = array (1=>"home.php","produk.php","schedule.php","event.php", 5 "guest.php","contact.php","about.php"); 6 // tampilkan link 7 foreach ($link_top as $id_link => $nama_link) 8 { 9 echo "<a href=\"index.php?idmenu=$id_link\">$nama_link</a> | "; 10 } 11 ?>

dan kode program untuk menampilkan halaman pilihan user :


1 <?php 2 $idmenu = $_REQUEST['idmenu']; 3 if (!empty($idmenu)) 4 { 5 if (!empty($link_file[$idmenu])) include $link_file[$idmenu]; 6 } 7 ?>

Gambar 1.14 : Menu interaktif

www.nurulfikri.com 7874223 / 24

10

Program Reguler & Inhouse

PHP Advance

Bab 2.
2.1. Tujuan

Variable dan Fungsi

Memahami dan mengerti perbedaan static web page dengan dynamic web page. Memahami dan mengerti apa itu web scripting atau web programming. Memahami apa itu php dan mengapa menggunakannya.

2.2. Variabel
2.2.1 Mendefinisikan Variabel

Variabel dalam PHP sangat berbeda dengan bahasa pemrograman (Compiler) C dan Java. Karena dalam PHP, anda tidak perlu mendeklarasikan variabel sebelum anda menggunakannya, anda tidak perlu menentukan jenis tipe data dari variabel, karenanya tipe data dari variabel dapat berubah sesuka hati anda. Variabel dalam PHP diawali dengan tanda $, kemudian diawali dengan karakter [A-Za-z] atau _ (underscore) dan bisa mengandung karakter/numerik dan underscore. Contoh pemberian nama variabel yang benar :
$nama $_Obj $B29

Contoh pemberian nama variabel yang salah :


$123 $*abc

Sebagaimana disebutkan sebelumnya, anda tidak perlu mendeklarasikan variabel sebelum menggunakannya. Berikut contohnya :
$PI = 3.14 $jari_jari = 5; $keliling = $PI * 2 * $jari_jari;

Dapat diperhatikan bahwa tidak ada variabel yang dideklarasikan sebelum digunakan, faktanya adalah $PI bilangan pecahan (floating point) dan $jari_jari adalah integer, variabel-variabel ini belum dideklarasikan sebagai tipe data tertentu sebelum variabel ini di inisialisasi. PHP tidak mensupport global variabel seperti bahasa pemrograman lainnya (Kecuali untuk beberapa kasus khusus pre-defined variabel, yang akan didiskusikan selanjutnya). Skup sebuah variabel adalah lokal. Jika didefinisikan dalam sebuah fungsi, maka ruang hidup variabel itu hanya dalam fungsi itu saja. Variabel yang dibuat dalam skrip utama (bukan didalam fungsi) bukanlah global variabel,
www.nurulfikri.com 7874223 / 24

11

Program Reguler & Inhouse

PHP Advance

karena variabel ini tidak dikenal didalam fungsi, tapi variabel ini bisa diakses dengan menggunakan array spesial $GLOBALS[ ] . Berikut contoh penulisannya :
$PI = 3.14 $jari_jari = 5; $keliling = $GLOBALS[PI] * 2 * $GLOBALS[jari_jari];

Dapat diperhatikan penggunaan $GLOBALS[ ] digunakan dalam skrip utama.

2.2.2

Indirect References Variabel

PHP menyediakan fitur dimana anda bisa meng-akses variabel dengan menggunakan indirect references. Berikut contoh penggunaan indirect references :
$nama = Rosa; $$nama = Admin database; echo $Rosa ; // output yang keluar adalah

Admin database

Anda dapat menggunakan indirect references hingga beberapa level, dengan hanya menambahkan $ pada nama variabel. 2.2.3 Mengatur Variabel

Ada tiga statement (keyword) yang dapat digunakan untuk mengetahui apakah suatu variabel ada (exist), menghapus (remove) variabel, dan mencek apakah variabel benar mempunyai nilai. 1. isset() isset()digunakan untuk melihat apakah suatu variabel telah didefinisikan oleh PHP. Bernilai balik boolean true jika variabel telah di set, dan sebaliknya bernilai false jika variabel belum di set atau variabel di set NULL .
1 if (isset ($proses)) 2 { 3 echo Lakukan Proses $proses; 4 }

isset() juga dapat digunakan untuk cek elemen dari suatu array atau property dari suatu object .
1 2 3 4 5 6 7 8 9 if (isset($ar['nama'])) { echo Nama : . $ar['nama']; } if (isset($obj->property)) { echo Nilai Properti .$obj->property; }

www.nurulfikri.com 7874223 / 24

12

Program Reguler & Inhouse

PHP Advance

Pada baris kode diatas, kita tidak perlu mencek apakah array atau object telah di set atau belum, jika array atau object belum diset, isset() akan mengembalikan nilai false. isset( var1, var2, var3 , ... ); isset() akan mengembalikan nilai true jika semua variabel telah didefinisikan dan sebaliknya akan bernilai false jika salah satu tidak didefinisikan. 2. Unset() unset() digunakan untuk meniadakan deklarasi suatu variabel (undeclared) yang telah di deklarasikan dan mengosongkan memory yang telah digunakan untuk menyimpan nilai.
1 $nama = Rosalie Naurah; 2 unset($nama); 3 if (isset($nama)) 4 { 5 echo Nama : $nama; 6 }

Skrip diatas tidak menghasilkan output, karena variabel $nama telah di unset(). unset() juga bisa digunakan untuk undeclared variabel array. 3. Empty() empty() bisa digunakan untuk menguji apakah variabel belum dideklarasikan atau bernilai false. empty() adalah Kontruksi bahasa PHP (language construct) digunakan untuk melihat apakah variabel yang dikirim melalui form mengandung data.
1 if (empty($name)) 2 { 3 echo Anda lupa isi nama ...; 4 }

2.2.4

Superglobal

PHP tidak men-support variabel super global (variabel yang bisa diakses secara otomatis dari berbagai skup), namun demikian PHP menyediakan variabel internal yang bisa digunakan sebagai variabel global. Variabel ini didefinisikan oleh PHP, berikut beberapa contoh variabel superglobal : $_GET[ ] : Array dari variabel GET yang diterima oleh PHP yang dikirim oleh browser oleh client. $_POST[ ] : Array dari variabel POST yang diterima oleh PHP yang dikirim oleh browser oleh client. $_COOKIE[ ] : Array dari variabel COOKIE yang diterima oleh PHP yang dikirim oleh browser oleh client.
www.nurulfikri.com 7874223 / 24

13

Program Reguler & Inhouse $_SESSION[ ] : Array dari variabel SESSION $_ENV[ ] : Array dari variabel environtment $_SERVER[ ] : Array dari variabel dari Web Server

PHP Advance

2.3. Fungsi
Fungsi dalam PHP dapat didefinisikan oleh user (programmer) atau fungsi yang sudah ada dalam PHP (built-in). Secara umum fungsi dapat dipanggil dengan perintah berikut :
nama_fungsi (arg1,arg2, ...);

Jumlah argumen pada suatu fungsi berbeda-beda, argumen dapat ekspresi yang valid.

berupa sembarang

Berikut contoh fungsi yang telah didefinisikan oleh PHP (predefine function)
$panjang_string = strlen(Rosalie);

Fungsi strlen()adalah fungsi untuk yang mengembalikan nilai panjang dari suatu string, output yang dihasilkan dari baris kode diatas adalah : 7 .
$panjang_string = strlen(strlen(Rosalie));

Pada baris diatas strlen(Rosalie) akan menghasilkan 7 ketika di eksekusi


$panjang_string = strlen(7);

Pada baris diatas bilangan integer 7 akan di konversi ke dalam string menjadi 7, dan variabel $panjang_string adalah 1. 2.3.1 Fungsi yang didefinisikan user Bentuk umum dari fungsi yang didefinisikan user adalah :
1 function nama_fungsi (arg1, arg2, arg3, ... ) 2 { 3 blok statement 4 }

Jika suatu fungsi mengembalikan nilai (return value) maka anda harus menambahkan ekpresi return dalam fungsi.

1 function tambah ($a, $b) 2 { 3 return $a + $b ;

www.nurulfikri.com 7874223 / 24

14

Program Reguler & Inhouse


4 }

PHP Advance

Berikut contoh penggunaannya :


echo Hasil dari 6 + 7 = .tambah(6,7);

2.4. Skup variabel dan Fungsi


Setiap fungsi memiliki kumpulan variabel, secara default setiap variabel yang didefinisikan diluar fungsi tidak bisa diakses dari dalam fungsi. Ketika anda mendefinisikan sebuah variabel dalam fungsi maka variabel itu hanya dikenal didalam fungsi, ketika fungsi itu dipanggil dalam skrip utama, maka nilai variabel dalam fungsi akan tetap (tidak berubah).
1 2 3 4 5 6 7 function fungsiku ( ) { $var = 2; } $var = 1; fungsiku(); echo $var;

Ketika fungsi fungsiku() dipanggil, variabel $var diberi nilai 2, skup variabel $var hanya dikenal didalam fungsi dan tidak mempengaruhi variabel $var yang diinisialisasi diluar fungsi. Output yang dihasilkan dari skrip diatas adalah 1. Bagaimana jika anda ingin benar-benar mengakses / mengubah variabel diluar fungsi, sebagaimana dijelaskan sebelumnya, anda bisa menggunakan variabel array $GLOBALS[ ] yang telah disediakan PHP. Ketika baris kode ditulis ulang seperti ini.
1 2 3 4 5 6 7 function fungsiku ( ) { $GLOBALS[var] = 2; } $var = 1; fungsiku(); echo $var;

Output yang dihasilkan adalah 2. Keyword global juga bisa digunakan untuk mengakses variabel global yang telah didefinisikan diluar fungsi.
1 2 3 4 5 6 7 8 function fungsiku ( ) { global $var; $var= 2; } $var = 1; fungsiku(); echo $var;

www.nurulfikri.com 7874223 / 24

15

Program Reguler & Inhouse

PHP Advance

Output yang dihasilkan sama, yaitu 2. 2.4.1 Return By Value

Nilai kembalian dari suatu fungsi adalah By Value artinya, copy dari suatu nilai diciptakan (alamat dalam memory komputer juga diciptakan) dan dikembalikan oleh fungsi.
1 2 3 4 5 6 7 8 9 10 function fungsi_by_value($name) { return $GLOBALS[$name]; } $num $val echo $val echo = 10; = fungsi_by_value ( "num" ); "VAL : ".$val."<br>"; = 20; "NUM : ".$num;

Output dari barisan kode diatas adalah :


VAL : 10 NUM : 10

Dilakukan perubahan pada variabel $val sebelum dicetak, hanya mengakibatkan perubahan pada variabel $val dan tidak memberi perubahan pada variabel $num. 2.4.2 Return By References

PHP juga mensupport return By References, artinya fungsi tidak mengembalikan copy dari suatu variabel (variabel baru tidak diciptakan), tetapi mengembalikan alamat dari variabel yang tersimpan dalam memory, sehingga fungsi dapat melakukan perubahan terhadap variabel tersebut. Untuk mendefinisikan fungsi dengan nilai kembalian By References gunakan keyword & didepan nama fungsi, demikian juga ketika memanggil fungsi.
1 function &fungsi_by_reference($name) 2 { 3 return $GLOBALS[$name]; 4 } 5 6 $num = 10; 7 $val =& fungsi_by_reference ( "num" ); 8 echo "VAL : ".$val."<br>"; 9 $val = 20; 10 echo "NUM : ".$num;

Output dari barisan kode diatas adalah :


VAL : 10 NUM : 20

www.nurulfikri.com 7874223 / 24

16

Program Reguler & Inhouse

PHP Advance

Dilakukan perubahan pada variabel $val sebelum dicetak mengakibatkan perubahan pada variabel $val dan juga memberi juga perubahan pada variabel $num.

2.5. Parameter Fungsi


Anda bisa memberi sejumlah argumen pada sebuah fungsi. Ada dua cara memberikan nilai (argumen) pada fungsi, yang sering digunakan adalah passing by value, dan yang kedua adalah passing by references 2.5.1 Parameter By Value

Pada passing by value argumen dapat berupa ekpressi, variabel atau nilai. Pada contoh dibawah ini fungsi hitung() dipanggil dengan argumen $x diberi nilai 8 dan $y diberi nilai $a.
1 2 3 4 5 6 7 function hitung ($x, $y) { return $x + $y ; } $a = 5; $_hasil = hitung(2*4, $a);

2.5.2

Parameter By References

Pada passing by References argumen harus berupa variabel. Nilai dari argumen jika terjadi proses perubahan pada fungsi akan dikenal di luar dari fungsi (dikenal diluar skup fungsi).
1 2 3 4 5 6 7 function pangkat(&$n) { $n = $n * $n; } $bil = 4; pangkat($bil); echo $bil;

Tanda & memberitahukan PHP bahwa argumen yang diberikan pada fungsi adalah passing by references, nilai variabel $bil, akan berubah menjadi 16, perubahan dilakukan di dalam fungsi.

2.6. Default Parameter


PHP memungkinkan untuk memberi nilai awal dari suatu parameter pada fungsi (default parameter), nilai ini akan dianggap sebagai nilai awal dari argumen jika argumen tidak diberikan pada fungsi.
1 function naikkan (&$bil , $step = 1) 2 { 3 $bil = $bil + $step;

www.nurulfikri.com 7874223 / 24

17

Program Reguler & Inhouse


4 5 6 7 8 9 } $bilangan = 4; naikkan ( $bilangan); naikkan ($bilangan, 3 ); echo $bilangan;

PHP Advance

Nilai dari variabel $bilangan dinaikkan menjadi 8. Pertama variabel $bilangan dinaikkan 1 pada pemanggilan pertama fungsi naikkan, pada pemanggilan kedua variabel $bilangan dinaikan 3, sekarang nilai variabel $bilangan adalah 8.

www.nurulfikri.com 7874223 / 24

18

Program Reguler & Inhouse

PHP Advance

Bab 3.
3.1. Tujuan:

Object Oriented Programming

Memahami dan mengerti perbedaan static web page dengan dynamic web page. Memahami dan mengerti apa itu web scripting atau web programming. Memahami apa itu php dan mengapa menggunakannya.

3.2. Pengertian OOP


Dalam Pemrograman Berorientasi Object (OOP) data dan kode program di bundle dalam satu entitas, yang dikenal sebagai Object. Pada aplikasi berorientasi object terdapat beberapa object yang saling berinteraksi satu dengan yang lainnya. Object adalah suatu entitas dari masalah (problem), dimana didalamnya terdapat kumpulan properti dan method. Properti adalah object data, berupa variabel yang dimiliki object. Method adalah fungsi yang mendukung kinerja object. Class adalah template (cetak biru) dari sebuah object, didalamnya menjelaskan properti dan method yang dimiliki oleh object. Berikut contoh dari class Lingkaran. Class Lingkaran mempunyai tiga method dan satu variabel.
Class : Lingkaran Method : getLuas() getKeliling() setJari($jari) Properties : jari

Diagram class Lingkaran Berikut kode dari class Lingkaran, dan dua instance dari class Lingkaran.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 class Lingkaran { private $jari; function setJari( $r ) { $this->jari = $r; } function getLuas () { return 3.14 * $this->jari * $this->jari ; } function getKeliling()

www.nurulfikri.com 7874223 / 24

19

Program Reguler & Inhouse


15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 { return 2 * 3.14 * $this->jari; } }; $lingkar1 = new Lingkaran(); $lingkar1->setJari( 10 ); $lingkar2 = new Lingkaran(); $lingkar2->setJari( 4 ); echo "Luas Lingkaran I ".$lingkar1->getLuas(); echo "<br>Luas Lingkaran II ".$lingkar2->getLuas();

PHP Advance

echo "Keliling Lingkaran I ".$lingkar1->getKeliling(); echo "<br>Keliling Lingkaran II ".$lingkar2->getKeliling();

3.3. Mendefinisikan Class


Gunakan keyword class untuk mendefinisikan sebuah class didepan nama class, definisikan variabel (properties) dan fungsi (method) dalam class.
1 class MyClass { 2 // List dari Method 3 . . . 4 // List dari Properties 5 . . . 6 }

3.4. Keyword new dan Constructor class


Suatu instance dari class (Object) diciptakan dengan menggunakan keyword new. Pada contoh sebelumnya kita telah membuat class Lingkaran, $lingkar1 = new Lingkaran();. Yang terjadi ketika keyword new digunakan adalah sebuah object dialokasikan beserta dengan variabel dan method yang didefinisikan didalam class, kemudian constructor dari class dipanggil jika telah ada constructor class. Constructor adalah method dengan nama __construct() (diawali dengan dua karakterk garis bawah), method ini secara otomatis dipanggil ketika menggunakan keyword new setelah membuat sebuah object, anda bisa juga menggunakan nama constructor sama dengan nama class, namun dalam PHP5 disarankan menggunakan __construct() sesuai konvensi penamaan constructor. Dalam constructor anda bisa definisikan inisialisasi dari class seperti inisialisasi variabel. Constructor dapat juga menerima argumen namun tidak boleh ada nilai balik (return value). Kita dapat menulis ulang class Lingkaran, namun kali ini telah menggunakan constructor.
1 class Lingkaran {

www.nurulfikri.com 7874223 / 24

20

Program Reguler & Inhouse


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 private $jari; function __construct( $r ) { $this->jari = $r; } function getLuas () { return 3.14 * $this->jari * $this->jari ; } function getKeliling() { return 2 * 3.14 * $this->jari; } }; $lingkar1 = new Lingkaran( 10 ); $lingkar2 = new Lingkaran( 4 ); echo "Luas Lingkaran I ".$lingkar1->getLuas(); echo "<br>Luas Lingkaran II ".$lingkar2->getLuas();

PHP Advance

echo "Keliling Lingkaran I ".$lingkar1->getKeliling(); echo "<br>Keliling Lingkaran II ".$lingkar2->getKeliling();

3.5. Destructor
Fungsi destructor adalah kebalikan dari constructor. Destructor dipanggil saat anda ingin menghapus sebuah object (misalnya saat tidak ada yang harus merefer ke sebuah object ). Saat yang tepat memanggil Destructor : Dalam proses eksekusi skrip, dimana diperlukan untuk menghapus sebuah object. Diakhir request. Untuk mendefinisikan fungsi Destructor, gunakan method __destruct() pada class.
1 2 3 4 5 6 7 8 9 class MyClass { function __destruct() { echo "Object ini telah di hancurkan"; } } $obj = new MyClass(); $obj = NULL;

Output yang dihasilkan : Object ini telah di hancurkan


www.nurulfikri.com 7874223 / 24

21

Program Reguler & Inhouse

PHP Advance

Pada contoh, ketika object $obj = NULL, yang terjadi adalah fungsi destructor dipanggil dan object di hancurkan. Walaupun pada akhirnya object tidak di null-kan (destroy), sesungguhnya object-object akan dihancurkan pada saat akhir request.

3.6. Akses Method dan Properties dengan keyword $this


Selama proses eksekusi method-method dari object, PHP secara otomatis membuat variabel $this, variabel ini menunjuk ke object itu sendiri, dengan menggunakan variabel ini dan notasi ->, properties dan method pada object bisa diasosiakan. Sebagai contoh anda bisa mengakses variabel (properties) $jari pada object Lingkaran dengan menggunakan $this->jari, hal yang sama berlaku untuk method pada object, $this->getLuas(),jika ingin diakses dari dirinya sendiri (dalam object intu sendiri) bisa mengabaikan $this, cukup dengan getLuas() saja.

3.7. Public, protected dan private properties


Hampir semua bahasa pemrograman Object Oriented mengenal tiga keyword akses pembatasan : public, protected dan private. Ketika mendefinisikan member (method, properties) dari class, programmer harus menentukan tipe akses apa yang akan diberikan, pada PHP3 dan PHP4 semua member variabel dari class didefinisikan dengan keyword var. Pada PHP5 tidak digunakan lagi (deprecated), anda harus menggunakan keyword baru.
1 class MyClass 2 { 3 public $publicMember = "Public member"; 4 protected $protectedMember = "Protected member"; 5 private $privateMember = "Private member"; 6 7 function myMethod(){ 8 // ... 9 } 10 } 11 $obj = new MyClass();

public ; member object dengan akses public dapat diakses dari dalam maupun luar object, dengan menggunakan perintah
$nama_obj->member_public:

misalnya, dari luar object :


$linkar1->getLuas()

dari dalam object: $this->getLuas() Jika suatu class adalah turunan dari class yang mempunyai member public, aturannya tetap sama bahwa member publik dapat diakses baik dari luar object maupun dari dalam object (dapat
www.nurulfikri.com 7874223 / 24

22

Program Reguler & Inhouse diakses oleh class turunannya).

PHP Advance

protected ; member object dengan akses protected hanya dapat diakses dari dalam object. Jika suatu class adalah turunan dari class yang mempunyai member protected, aturannya tetap sama bahwa member protected hanya dapat diakses dari dalam object (dapat diakses oleh class turunannya dengan keyword $this ). private ; member object dengan akses private sama dengan member protected, yaitu hanya bisa diakses dari dalam object. Namun variabel private tidak dapat diakses oleh class turunannya. Jika dalam class turunan di deklarasikan member private dengan nama yang sama dengan parentnya, maka member private itu hanya dikenal di masingmasing class saja (tidak terhubung).
1 class DBKoneksi { 2 public $hasil_query ; 3 protected $dsn = array ("localhost",root,,latihan); 4 private $koneksi ; 5 6 // ... 7 } 8 9 class NFDbConnection extends MyDbConnection { 10 protected $dsn = array ("nurulfikri.com,admin,4dm1n,lp3t); 11 }

Pada contoh diatas, dapat disimpulkan : Penanganan koneksi ( variabel $koneksi) database adalah member private, karena digunakan hanya untuk internal class, dan tidak dapat diakses oleh pengguna class ini. Database Source Name ( variabel $dsn ) tidak bisa diakses oleh pengguna class. Database hostname dapat diubah dengan membuat class turunannya dengan meng-override (mendefinisikan ulang ) variabel $dsn Hasil dari query (variabel $hasil_query) harus bisa diakses oleh user, karenanya $hasil_query adalah member public.

3.8. public, protected dan private Method


Akses method object mempunyai aturan yang sama dengan akses variabel object (properties object). public ; method public dapat dipanggil dalam sembarang skup. protected ; method protected hanya bisa diakses dalam internal class dan class turunannya. private ; method private hanya bisa diakses dalam internal class, dan tidak dapat diakses oleh class turunannya. Sama seperti variabel object, class turunan dapat mendefinisikan ulang method private dari parent classnya.
www.nurulfikri.com 7874223 / 24

23

Program Reguler & Inhouse Berikut contoh class DBKoneksi

PHP Advance

1 <?php 2 class DBKoneksi { 3 4 protected $dsn = array("localhost","root","","latihan"); 5 public $hasil_query ; 6 private $koneksi; 7 8 public function getKoneksi() 9 { 10 $conn = $this->buatKoneksi(); 11 $this->setKoneksi ($conn); 12 $this->selectdb(); 13 return $this->koneksi; 14 } 15 16 protected function selectdb() 17 { 18 $db = mysql_select_db ($this->dsn[3],$this->koneksi) or die (mysql_error()); 19 } 20 21 protected function buatKoneksi() 22 { 23 $dbcon = mysql_connect ($this->dsn[0],$this->dsn[1], $this->dsn[2]); 24 if (!$dbcon) 25 { 26 echo mysql_error(); 27 } 28 return $dbcon; 29 } 30 31 private function setKoneksi($koneksi) 32 { 33 $this->koneksi = $koneksi; 34 } 35 } 36 ?>

3.9. Static Properties ( Variabel Static )


Properties ( variabel ) dideklarasikan dalam class. Setiap instance dari class (object) mempunyai copy dari properties-properties ini. Class juga dapat mempunyai properties static (static variables ), tidak seperti properties lainnya, static properties adalah milik dari class dan bukan milik dari instance dari class (object itu sendiri), karenanya properties ini sering disebut sebagai class properties, lawan dari instance properties (object properties). Properties static didefinisikan dengan keyword static.

www.nurulfikri.com 7874223 / 24

24

Program Reguler & Inhouse


1 class MyClass { 2 static $static_variabel; 3 static $counter = 0; 4 }

PHP Advance

Berikut contoh untuk mengakses variabel static :


MyClass::$counter++; print MyClass::$counter;

Contoh diatas akan mencetak angka 1. Jika variabel static diakses didalam class yang mendeklarasikan variabel static gunakan keyword self sebagai yang mewakili nama class.
1 <?php 2 class MyClass 3 { 4 static $counter = 0; 5 6 function cetakCounter() 7 { 8 print self::$counter; 9 } 10 } 11 MyClass::$counter++; 12 $obj = new MyClass(); 13 $obj->cetakCounter(); 14 ?>

Akan dicetak angka 1. Berikut contoh program bagaimana mencetak unik id, ketika suatu instance class (object) diciptakan.
15 <?php 16 class Gesbuk 17 { 18 static $idCounter = 0 ; 19 public $unik_id ; 20 private $nama ; 21 private $pesan; 22 23 function __construct($nama,$pesan) 24 { 25 self::$idCounter++; 26 $this->unik_id = self::$idCounter; 27 $this->nama = $nama; 28 $this->pesan = $pesan; 29 } 1 function cetakPesan() 2 {
www.nurulfikri.com 7874223 / 24

25

Program Reguler & Inhouse

PHP Advance

3 print $this->unik_id.")".$this->nama." : ".$this->pesan; 4 } 5 6 } 7 8 $g1 = new Gesbuk("Rosalie","Ayah Oca nih "); 9 $g2 = new Gesbuk("Alissa","Kakak Nakal yah.."); 10 echo "<h3>Sudah Ada ".Gesbuk::$idCounter." Gesbuk </h3>"; 11 $g1->cetakPesan(); 12 echo "<br>"; 13 $g2->cetakPesan(); 14 ?>

Akan dicetak : Sudah Ada 2 Gesbuk 1)Rosalie : Ayah Oca nih 2)Alissa : Kakak Nakal yah.

3.10.

Static Method

Sama seperti properties, PHP juga men-support method static. Method static adalah milik dari class, bukan milik dari instance class, karenanya keyword $this tidak bisa digunakan untuk mengakses method static dalam class, gunakan keyword self untuk mengakses method static, self::method(). Gunakan nama_class::method() untuk mengakses method static dari luar class.
1 <?php 2 class Cetak 3 { 4 static function say ($kata) 5 { 6 print $kata; 7 self::barisBaru(); 8 } 9 10 static function barisBaru() 11 { 12 print "\n"; 13 } 14 } 15 16 Cetak::say("Welcome To LP3T Nurul Fikri"); 17 Cetak::say("Tempat Anda Menempa Ilmu ..."); 18 ?>

3.11.

Konstanta Pada Class

www.nurulfikri.com 7874223 / 24

26

Program Reguler & Inhouse

PHP Advance

Pada PHP3 dan PHP4 ketika mendefinisikan suatu konstanta haruslah menggunakan keyword define(), dan anda tidak bisa mendefinisikan konstanta dalam class. Pada PHP5 dimungkinkan untuk mendeklarasikan konstanta di dalam class. Gunakan keyword self untuk mengakses konstanta dari dalam class, dan gunakan nama class kemudian nama konstanta class ketika mengakses konstanta dari luar class (nama_class::konstanta).
1 <?php 2 class Profesi 3 { 4 const PPST = "Program Profesi Satu Tahun"; 5 const PPDT = "Program Profesi Dua Tahun"; 6 const PILP = "Program Intesif Linux Profesional"; 7 8 function printPPDT() 9 { 10 print self::PPDT; 11 } 12 } 13 14 echo "Saya Bukan Siswa ".Profesi::PPST."<br> Tetapi Saya Siswa "; 15 $prof = new Profesi(); 16 $prof->printPPDT(); 17 ?>

Tips : Selalu gunakan hurup besar untuk konstanta .

3.12.

Polymorphism

Dengan menggunakan class dan konsep turunan dalam OOP akan memudahkan untuk memodelkan masalah dunia nyata menjadi sebuah kumpulan fungsionalitas data yang saling berhubungan. OOP juga memudahkan dalam pembagunan aplikasi yang besar, dengan memanfaatkan kode program yang sudah dibuat melalui konsep turunan (inheritance). Perhatikan kode program dibawah ini :
1 <?php 2 class Segitiga 3 { 4 private $alas; 5 private $tinggi; 6 7 function __construct($_alas, $_tinggi) 8 { 9 $this->alas = $_alas; 10 $this->tinggi = $_tinggi; 11 } 12 function luasSegiTiga() 13 {
www.nurulfikri.com 7874223 / 24

27

Program Reguler & Inhouse

PHP Advance

14 return 0.5 * $this->alas * $this->tinggi; 15 } 16 17 function info() 18 { 19 echo "SEGI TIGA : Alas ".$this->alas.",Tinggi: ".$this>tinggi; 20 } 21 } 22 23 class BujurSangkar 24 { 25 private $sisi; 26 27 function __construct($sisi) 28 { 29 $this->sisi = $sisi; 30 } 31 32 function luasBujurSangkar() 33 { 34 return $this->sisi * $this->sisi; 35 } 36 37 function info() 38 { 39 echo "BUJUR SANGKAR : Panjang Sisi ".$this->sisi; 40 } 41 42 } 43 44 function hitungLuas ($obj) 45 { 46 if ($obj instanceof Segitiga) 47 { 48 echo $obj->info()." ,Luas : ".$obj->luasSegiTiga(); 49 } 50 else if ($obj instanceof BujurSangkar) 51 { 52 echo $obj->info()." ,Luas : ".$obj->luasBujurSangkar(); 53 } 54 } 55 56 hitungLuas (new Segitiga(4,7)); 57 echo "<br>"; 58 hitungLuas (new BujurSangkar(4)); 59 ?>

Output yang dihasilkan adalah : SEGI TIGA : Alas 4, Tinggi : 7 ,Luas : 14 BUJUR SANGKAR : Panjang Sisi 4 ,Luas : 16 Dapat diperhatikan bahwa kode program diatas akan berkembang terus, jika kita ingin
www.nurulfikri.com 7874223 / 24

28

Program Reguler & Inhouse

PHP Advance

menambah beberapa jenis bidangmenyebabkan penambahan blok if pada fungsi hitungLuas() dan tiap kali harus mengecek apakah object adalah instance dari bentuk bidang yang ditambahkan. Masalah diatas bisa diatasi dengan konsep polymorphism yang memanfaatkan turunan (inheritance). Dengan inheritance method dan properties yang dimiliki parent akan bisa diakses oleh child-nya. Dari contoh diatas kita bisa membuat class parent dari class SegiTiga dan class BujurSangkar yaitu class Bentuk. Gunakan keyword extends untuk membuat suatu class adalah turunan dari parent-nya.
1 class child extends Parent { 2 --3 }

Berikut kode program sebelumnya ditulis ulang :


1 <?php 2 class Bentuk 3 { 4 function getLuas() 5 { 6 // method ini akan diimplementasikan oleh turunannya 7 } 8 9 function info() 10 { 11 // method ini akan diimplementasikan oleh turunannya 12 } 13 } 14 15 class Segitiga extends Bentuk 16 { 17 private $alas; 18 private $tinggi; 19 20 function __construct($_alas, $_tinggi) 21 { 22 $this->alas = $_alas; 23 $this->tinggi = $_tinggi; 24 } 25 26 function getLuas() 27 { 28 return 0.5 * $this->alas * $this->tinggi; 29 } 30 31 function info() 32 { 33 echo "SEGI TIGA : Alas ".$this->alas.",Tinggi:".$this>tinggi; 34 } 35 }

www.nurulfikri.com 7874223 / 24

29

Program Reguler & Inhouse

PHP Advance

36 37 class BujurSangkar extends Bentuk 38 { 39 private $sisi; 40 41 function __construct($sisi) 42 { 43 $this->sisi = $sisi; 44 } 45 46 function getLuas() 47 { 48 return $this->sisi * $this->sisi; 49 } 50 51 function info() 52 { 53 echo "BUJUR SANGKAR : Panjang Sisi ".$this->sisi; 54 } 55 56 } 57 58 function hitungLuas ($obj) 59 { 60 if ($obj instanceof Bentuk) 61 { 62 echo $obj->info()." ,Luas : ".$obj->getLuas(); 63 } 64 } 65 66 hitungLuas (new Segitiga(4,7)); 67 echo "<br>"; 68 hitungLuas (new BujurSangkar(4)); 69 ?>

Output yang dihasilkan sama yaitu : SEGI TIGA : Alas 4, Tinggi : 7 ,Luas : 14 BUJUR SANGKAR : Panjang Sisi 4 ,Luas : 16 Dapat diperhatikan dengan penggunaan konsep OOP yaitu inheritance, berapa banyakpun class bentuk bidang yang dibuat tidak akan mengubah fungsi dari hitungLuas(), karena perintah instanceof akan mengecek pada parent class Bentuk tersebut. Pada class Bentuk terdapat method getLuas() dan info(), yang masih abstract, dan turunan dari class Bentuk ini harus mendefinisikan sendiri method getLuas() dan method info(). Pada PHP tidak mengenal multi-inheritance seperti C++, jadi suatu class hanya bisa diturunkan dari satu parent class.

www.nurulfikri.com 7874223 / 24

30

Program Reguler & Inhouse

PHP Advance

3.13.

parent:: dan self::

PHP mengenal dua keyword untuk me-refer ke sebuah nama class, sehingga memudahkan dalam mengimplementasikan OOP. self:: merefer ke sebuah class saat ini (current class) biasanya untuk mengakses variabel static, method static dan konstanta. parent:: digunakan untuk merefer ke parent class, dan biasanya digunakan untuk memanggil konstruktor dan method dari parent class, dan bisa juga digunakan untuk mengakses member atau konstanta. Berikut contoh program penggunaan parent:: dan self:: .
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 class TextBox { const TIPE = "text"; private $nama; private $val; function __construct($nama,$val) { $this->nama = $nama; $this->val = $val; } function show() { echo '<input type="'.self::TIPE.'" name="'.$this->nama . '" value="'.$this->val.'" size="30">'; } } class TextBoxSize extends TextBox { const TIPE = "text"; private $size ; function __construct($name,$val,$size) { parent::__construct($name,$val); $this->size=$size; } function show() { echo '<input type="'.self::TIPE.'" name="'.$this->nama . '" value="'.$this->val.'" size="'.$this->size.'">'; } } $nama = new TextBox("nama",""); $umur = new TextBoxSize("umur","",8); echo "Nama : "; $nama->show(); echo "<br>Umur : "; $umur->show(); ?>

www.nurulfikri.com 7874223 / 24

31

Program Reguler & Inhouse

PHP Advance

3.14.

Operator instanceof

Operator instanceof digunakan untuk menggantikan fungsi built-in is_a() (sekarang disarankan tidak dipakai lagi / deprecated ). Operator instanceof adalah operator operasi logika binary, yang digunakan untuk menguji apakah suatu variabel (object) adalah instance dari suatu class.
1 <?php 2 class Bentuk2D 3 { 4 public $name = __CLASS__; 5 } 6 7 class BujurSangkar extends Bentuk2D 8 { 9 public $name = __CLASS__; 10 } 11 class Bola 12 { 13 public $name = __CLASS__; 14 } 15 16 function cekBentuk2D ($bentuk) 17 { 18 if ($bentuk instanceof Bentuk2D) 19 { 20 print $bentuk->name; 21 print " Adalah bentuk 2 Dimensi"; 22 } 23 } 24 25 cekBentuk2D (new BujurSangkar()); 26 ?>

Program ini akan menampilkan output : BujurSangkar Adalah bentuk 2 Dimensi __class__ adalah konstanta spesial yang merefer ke nama class. Sebagaimana disebutkan sebelumnya operator instanceof adalah operator logika binary yang dapat dipadukan dengan operator negasi ( ! ).
1 <?php 2 function cekBukanBentuk2D ($bentuk) 3 { 4 if (!($bentuk instanceof Bentuk2D)){ 5 print $bentuk->name; 6 print " Adalah bukan bentuk 2 Dimensi"; 7 } 8 } 9 ?>

www.nurulfikri.com 7874223 / 24

32

Program Reguler & Inhouse

PHP Advance

3.15.

Method Abstract dan Class

Ketika mendesain hirarki suatu class, anda pasti ingin menggunakan method pada parent yang akan diimplementasikan oleh child (turunannya). Gunakan keyword abstract didepan keyword class pada saat deklarasi class, setiap method abstract harus dideklarasikan dengan keyword abstract. Dalam abstract class dapat juga didefinisikan method bukan abstract dan variabel.
1 abstract class nama_class 2 { 3 abstract function nama_method(); 4 5 function nama_method_non_abstract(){ 6 // implemntasi method non abstract; 7 } 8 }

Gambar 3.1 Hirarki object Bentuk Berikut implementasi dari diagram class Bentuk:
1 <?php 2 abstract class Bentuk 3 { 4 abstract function getLuas(); 5 abstract function getKeliling(); 6 } 7 8 class BujurSangkar extends Bentuk 9 { 10 private $sisi ; 11 public $name = __CLASS__;

www.nurulfikri.com 7874223 / 24

33

Program Reguler & Inhouse

PHP Advance

12 13 function __construct($sisi) 14 { 15 $this->sisi = $sisi; 16 } 17 18 function getLuas() 19 { 20 return $this->sisi * $this->sisi; 21 } 22 23 function getKeliling() 24 { 25 return 4 * $this->sisi; 26 } 27 } 28 29 class Lingkaran extends Bentuk 30 { 31 private $jari; 32 public $name = __CLASS__; 33 const PHI = 3.14; 34 35 function __construct($r) 36 { 37 $this->jari = $r; 38 } 39 40 function getLuas() 41 { 42 return self::PHI * $this->jari * $this->jari; 43 } 44 45 function getKeliling() 46 { 47 return 2 * self::PHI * $this->jari; 48 } 49 } 50 51 function infoBentuk($obj) 52 { 53 if ($obj instanceof Bentuk) 54 { 55 echo $obj->name; 56 echo " Luas : ".$obj->getLuas(); 57 echo " Keliling : ".$obj->getKeliling(); 58 } 59 } 60 61 $lingkar1 = new Lingkaran(6);// lingkaran dengan jari-jari 6 62 infoBentuk ($lingkar1); 63 ?>

www.nurulfikri.com 7874223 / 24

34

Program Reguler & Inhouse

PHP Advance

3.16.

Interfaces

Interfaces adalah spesifikasi umum yang dimiliki oleh sebuah object, dengan adanya interfaces programmer bisa menghubungkan antara class (parent class) yang mempunyai ciri khas yang berbeda misalnya, parent class atau parent Bentuk2D : yang akan mempunyai turunan bentuk-bentuk benda dua dimensi. Contoh lain parent class Produk yang akan mempunyai turunan nama produk yang bisa dijual,kedua parent class akan bisa disatukan dengan cara class atau parent class mengimplementasi suatu interfaces yang sama. Interfaces dideklarasikan dengan menggunakan keyword interface diawal nama interface.
1 interface nama_interface 2 { 3 function nama_fungsi(); 4 }

sebuah class akan mengimplementasi suatu interfaces dengan menggunakan keyword implements setelah nama class, kemudian diikuti dengan nama interfaces yang telah didefinisikan .
1 class nama_class implements nama_interface_1, nama_interface_2 . 2 { 3 ... 4 } . .

Seperti bahasa pemrograman Java, PHP hanya mengenal konsep single inheretance, namun melalui interfaces ini PHP bisa menggunakan konsep multiple inheritance milik dari C+ +, artinya suatu class bisa mengimplementasikan banyak interfaces.

1 <?php 2 // class yang akan mengimplemtasi 3 // interface ini akan bisa melakukan log 4 interface Loggable 5 { 6 function logString(); 7 } 8 9 abstract class Bentuk 10 { 11 abstract function getLuas(); 12 abstract function getKeliling(); 13 } 14 15 class BujurSangkar extends Bentuk implements Loggable 16 { 17 private $sisi ; 18 public $name = __CLASS__; 19

www.nurulfikri.com 7874223 / 24

35

Program Reguler & Inhouse

PHP Advance

20 function __construct($sisi) 21 { 22 $this->sisi = $sisi; 23 } 24 25 function getLuas() 26 { 27 return $this->sisi * $this->sisi; 28 } 29 30 function getKeliling() 31 { 32 return 4 * $this->sisi; 33 } 34 35 function logString() 36 { 37 echo $this->name." Luas ".$this->getLuas()." dan Keliling ".$this->getKeliling(); 38 } 39 } 40 41 class Produk implements Loggable 42 { 43 public $name = __CLASS__; 44 private $merk ; 45 private $harga ; 46 private $satuan; 47 48 function __construct($merk,$harga,$satuan) 49 { 50 $this->merk = $merk; 51 $this->harga = $harga; 52 $this->satuan = $satuan; 53 } 54 55 function logString() 56 { 57 echo $this->name." : ".$this->merk." Harga : ".$this>harga." Per-".$this->satuan; 58 } 59 } 60 61 function showObject($obj) 62 { 63 if ($obj instanceof Loggable) 64 { 65 echo $obj->logString(); 66 } 67 } 68 69 $bjr = new BujurSangkar(7); 70 $telor = new Produk("Telor Asin Brebes",7500,"Lusin"); 71

www.nurulfikri.com 7874223 / 24

36

Program Reguler & Inhouse


72 73 74 75 ?> showObject($bjr); echo "<br>"; showObject($telor);

PHP Advance

Output yang dihasilkan : BujurSangkar Luas 49 dan Keliling 28 Produk : Telor Asin Brebes Harga : 7500 Per-Lusin

3.17.

final Method

Suatu method akan tidak bisa di override atau tidak bisa didefinisikan ulang lagi oleh turunannya jika method tersebut adalah method final.
1 <?php 2 class Produk 3 { 4 final function idGenerator() 5 { 6 return $this->id; 7 } 8 protected $id = 0; 9 } 10 11 class Mobil extends Produk 12 { 13 function idGenerator() 14 { 15 return $this->id += 2; 16 } 17 } 18 ?>

Skrip program ini tidak akan berjalan karena method dari idGenerator() adalah final, karenanya class Mobil turunan dari class Produk tidak boleh mendefinisikan ulang method idGenerator().

3.18.

final Class

Sama seperti final method, suatu class jika dideklarasikan sebagai class final maka class tersebut tidak boleh di extends (tidak boleh menjadi parent) oleh class lain.
1 2 3 4 5 6 final class SmartForm { /// } class VerySmartForm extends SmartForm

www.nurulfikri.com 7874223 / 24

37

Program Reguler & Inhouse


7 { 8 9 }

PHP Advance

///

Skrip program ini tidak akan berjalan karena class SmartForm adalah class final, karenanya tidak boleh diextends oleh class VerySmartForm.

3.19.

Method __toString( )

PHP menggunakan method __toString() untuk mengimplementasikan dalam mencetak string informasi yang merepresentasikan sebuah object.
1 <?php 2 class Siswa 3 { 4 private $name ; 5 private $nim; 6 7 function __construct($nim, $nama) 8 { 9 $this->nim = $nim; 10 $this->name = $nama; 11 } 12 13 function __toString() 14 { 15 return $this->nim." : ".$this->name; 16 } 17 } 18 19 $siswa_rosa = new Siswa("08032003","Rosalie Naurah Husna"); 20 echo $siswa_rosa; 21 ?>

Output program ini akan menampilkan : 08032003 : Rosalie Naurah Husna

www.nurulfikri.com 7874223 / 24

38

Program Reguler & Inhouse

PHP Advance

Bab 4.
4.1. Tujuan:

Pustaka Database PDO

Mengerti penggunaan pustaka PDO Mampu membuat program yang terkoneksi ke database MySQL

4.2. Lapisan Abstraksi Database


Pustaka atau Library adalah kumpulan kode program yang berisi kumpulan Class atau Fungsi yang digunakan untuk tujuan spesifik dan dapat membantu dalam proses pengembangan sebuah aplikasi program. Pustaka PHP yang tersedia di internet diantaranya adalah Pustaka untuk mengakses database (DBMS). Pustaka Abstraksi Database digunakan sebagai lapisan yang menjembatani berbagai macam vendor DBMS - MySQL, PostgreSQL, Oracle, SyBase, Informix, SQL Server, SQLLite, Access, FoxPro, ODBC dengan bahasa pemrograman PHP. Dengan adanya lapisan ini diharapkan programmer dapat mengakses banyak vendor database ( berpindah-pindah jenis DBMS) dengan sedikit pengubahan kode program.

Gambar 9.1 : Lapisan Pustaka Abstraksi Database

www.nurulfikri.com 7874223 / 24

39

Program Reguler & Inhouse

PHP Advance

4.3. PDO : Portable Data Objects


PDO atau PHP Data Objects adalah sebuah ekstensi PHP5 berupa Library / Pustaka untuk koneksi ke Database (DBMS). PDO menyediakan lapisan akses database, untuk bermacam-macam database, Anda akan menggunakan fungsi-fungsi yang sama dalam melakukan eksekusi perintah SQL ( query ) atau mengambil data ( fetch data ) . PDO telah men-support beberapa Driver untuk beberapa Database, seperti 1. PDO_DBLIB, support database FreeTDS / Microsoft SQL Server / Sybase 2. PDO_FIREBIRD , Firebird/Interbase 6 3. PDO_IBM , IBM DB2 4. PDO_INFORMIX , IBM Informix Dynamic Server 5. PDO_MYSQL , MySQL 3.x/4.x/5.x 6. PDO_OCI , Oracle Call Interface 7. PDO_ODBC , ODBC v3 (IBM DB2, unixODBC and win32 ODBC) 8. PDO_PGSQL , PostgreSQL 9. PDO_SQLITE , SQLite 3 and SQLite 2

4.4. Koneksi ke database


Dalam koneksi ke database server ada beberapa variabel yang harus didefinisikan : 1. Nama Server database : misal localhost untuk komputer local atau nomor IP server 2. Nama User : nama user pemilik basis data, misal rosa 3. Password User , misal passwordnya juga passrosa 4. Nama Basis Datanya , misal dbkoperasi 4.4.1 Koneksi ke database MySQL Berikut contoh kode program PHP akses database MySQL :
1 <?php 2 $dbh= new PDO('mysql:host=localhost;dbname=dbkoperasi',"rosa","passrosa"); 3 ?>

Object $dbh adalah object koneksi ke database dari Class PDO, dengan argumen : 1. lokasi server database MySQL dan basis data atau ditambah port dari server databasenya 2. nama user pemilik basis data 3. nama password dari user pemilik basis data

www.nurulfikri.com 7874223 / 24

40

Program Reguler & Inhouse 4.4.2 Koneksi ke database PostgreSQL Berikut contoh koneksi kedatabase PostgreSQL

PHP Advance

1 <?php 2 $dbh= new PDO('mysql:host=localhost;dbname=dbkoperasi',"rosa","passrosa"); 3 ?>

Jika server database berjalan pada port yang berbeda dari port default PostgreSQL ( 5432), maka pada argumen pertama ditambah variabel port, berikut contoh koneksi ke server PostgreSQL yang berjalan di port 5555.

1 <?php 2 $dbh= new PDO('pgsql:host=localhost;dbname=dbkoperasi;port=5555',"rosa","passro sa"); 3 ?>

4.4.3

Koneksi melalui ODBC

Berikut contoh koneksi ke database Ms.Access dengan ODBC, File Ms.Access berada dalam direktori C:\dbkoperasi.mdb
1 <?php 2 $dbh= new PDO('odbc:Driver={Microsoft Access Driver(*.mdb)};Dbq=C:\dbkoperasi.mdb;Uid=Admin'); 3 ?>

4.4.4

Menangkap eksepsi kesalahan

Kesalahan bisa terjadi pada saat melakukan koneksi ke database ataupun pada saat eksekusi sebuah query. Pada pustaka PDO, class PDO akan melempar sebuah eksepsi kesalahan bernama PDOException, eksepsi ini harus ditangkap untuk mengetahu jenis kesalahan yang terjadi. Berikut kode lengkapnya untuk menangkap eksepsi dari Class PDOException.

1 <?php 2 3 try // menangkap kesalahan 4 { 5 $dbh = new PDO('mysql:host=localhost;dbname=dbkoperasi','rosa', 'passrosa'); 6 7 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 8 //echo 'Koneksi SUKSES '; // cetak jika sukses koneksi ke database 9 10 }

www.nurulfikri.com 7874223 / 24

41

Program Reguler & Inhouse


11 catch (PDOException $e) 12 { 13 echo $e->getMessage(); // tampilkan pesan kesalahan 14 } 15 16 ?>

PHP Advance

Agar kesalahan dari perintah SQL dapat ditangkap dan hal ini akan membantu dalam proses debugging / pembetulan program, maka dari object $dbh harus di seting atribut jenis mode error yang akan ditampilkan, berikut setingannya:
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

4.5. Fungsi-Fungsi pada PDO


4.5.1 Fungsi exec( )

Fungsi ini digunakan untuk eksekusi perintah SQL, jika perintah SQL sukses dilakukan akan mengembalikan nilai 0. Contoh penggunaan fungsi exec()
1 <?php 2 3 $dbh = new PDO('mysql:host=localhost;dbname=dbkoperasi','rosa', 'passrosa'); 4 5 // ingat heredoc sintaks !! 6 $sqlku=<<<SQL 7 CREATE TABLE produk ( 8 idproduk integer auto_increment primary key, 9 kode varchar(10) unique not null, 10 nama varchar(30) not null, 11 harga double, 12 stok integer 13 ) 14 SQL; 15 16 $dbh->exec( $sqlku ) ; 17 18 $sql_insert=<<<SQL 19 INSERT INTO produk (kode,nama,harga,stok) 20 VALUES ('DVD01','DVD R/W',237000,20) 21 SQL; 22 23 $dbh->exec( $sql_insert ); 24 25 ?>

Eksekusi file ini, maka seharusnya dalam database MySQL pada basis data dbkoperasi telah tercipta table produk dan telah ter-insert satu data produk.
www.nurulfikri.com 7874223 / 24

42

Program Reguler & Inhouse Berikut perintah SQL yang di eksekusi di konsole MySQL :
mysql> select * from produk; +----------+-------+---------+--------+------+ | idproduk | kode | nama | harga | stok | +----------+-------+---------+--------+------+ | 1 | DVD01 | DVD R/W | 237000 | 20 | +----------+-------+---------+--------+------+ 1 row in set (0.00 sec)

PHP Advance

4.5.2

Fungsi query()

Fungsi query digunakan untuk eksekusi SQL dan mengembalikan hasil Query berupa ResultSet ( kumpulan baris data / record ). Berikut contoh penggunaan fungsi query()
1 <?php 2 3 $dbh = new PDO('mysql:host=localhost;dbname=dbkoperasi','rosa', 'passrosa'); 4 5 $sql_select = "SELECT * FROM produk "; 6 7 $rs = $dbh->query($sql_select); 8 9 foreach ( $rs as $row ) 10 { 11 echo $row['kode'].' - '; 12 echo $row['nama'].' - '; 13 echo $row['harga'].' - '; 14 echo $row['stok']; 15 echo '<br/>'; 16 } 17 18 ?>

Gunakan sintaks foreach untuk menampilkan hasil query pada ResultSet. 4.5.3 Fungsi execute()

Fungsi execute() digunakan untuk eksekusi prepared statement ( statement yang telah didefinisikan dengan perintah SQL ). Berikut contoh penggunaannya
1 <?php 2 3 $dbh = new PDO('mysql:host=localhost;dbname=dbkoperasi','rosa', 'passrosa'); 4 5 $sql1 = "INSERT INTO produk VALUES ('','FD01','FlashDisk',450000,12)";

www.nurulfikri.com 7874223 / 24

43

Program Reguler & Inhouse


6 7 // buat object prepared statement 8 $st1 = $dbh->prepare($sql1); 9 // eksekusi prepared statement 10 $st1->execute(); 11 12 // dengan argument data array 13 $sql2 = "INSERT INTO produk VALUES ('',?,?,?,?)"; 14 $st2 = $dbh->prepare($sql2); 15 $st2->execute( array ('CD01','CD Blank',4000,40)); 16 17 $sql3 = "DELETE FROM produk WHERE kode=? "; 18 $st3 = $dbh->prepare( $sql3 ); 19 $st3->execute( array ('CD01')); 20 21 ?>

PHP Advance

4.5.4

Fungsi fectch()

Fungsi fetch() dieksekusi dengan menggunakan prepared statement yang digunakan untuk mengambil satu baris hasil query. Berikut contohnya :
1 <?php 2 $dbh = new PDO('mysql:host=localhost;dbname=dbkoperasi','rosa', 'passrosa'); 3 4 $sql1 = "SELECT * FROM produk WHERE kode=? "; 5 $st1 = $dbh->prepare($sql1); 6 $st1->execute( array('CD01')); 7 8 $row = $st1->fetch(); 9 10 echo $row['kode'].' - '.$row['nama'].' - '.$row['harga'].' - '. $row['stok']; 11 12 ?>

4.5.5

Fungsi fectchAll()

Fungsi fetchAll() dieksekusi dengan menggunakan prepared statement yang digunakan untuk mengambil kumpulan baris record ( ResultSet ). Berikut contohnya :
1 <?php 2 $dbh = new PDO('mysql:host=localhost;dbname=dbkoperasi','rosa', 'passrosa'); 3 4 $sql1 = "SELECT * FROM produk "; 5 $st1 = $dbh->prepare($sql1);

www.nurulfikri.com 7874223 / 24

44

Program Reguler & Inhouse

PHP Advance

6 $st1->execute(); 7 8 $rs = $st1->fetchAll(); 9 10 foreach ($rs as $row) 11 { 12 echo $row['kode'].' - '.$row['nama'].' - '.$row['harga'].' - '. $row['stok']; 13 echo '<br/>'; 14 } 15 ?>

4.5.6

Fungsi rowCount()

Fungsi ini digunakan untuk mendapatkan jumlah baris hasil query ( affected rows) dari perintah SQL INSERT, UPDATE dan DELETE
1 <?php 2 $dbh = new PDO('mysql:host=localhost;dbname=dbkoperasi', 'rosa','passrosa'); 3 4 $del=$dbh->prepare('DELETE FROM produk'); 5 6 $del->execute(); 7 echo 'Jumlah Data Yang di hapus : '; 8 $jml = $del->rowCount(); 9 echo ' ada '. $jml .' Baris '; 10 11 ?>

4.5.7

Tips Error Buffered Query

Ketika menggunakan prepare statement untuk eksekusi beberapa perintah SQL terkadang terjadi kesalahan, dikarenekan buffer query. Agar tidak terjadi kesalahan berikut konfigurasi yang harus di set pada saat membuat object koneksi database dengan PDO
1 <?php 2 3 $konfig = PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true; 4 $dbh = new PDO('mysql:host=localhost;dbname=dbkoperasi', 'rosa','passrosa',$konfig); 5 6 ?>

www.nurulfikri.com 7874223 / 24

45

Program Reguler & Inhouse

PHP Advance

Bab 5.
5.1. Tujuan:

Transaksi Database
Mengerti konsep transaksi dalam database Mampu membuat program yang menggunakan transaksi pada database MySQL

5.2. Apa itu transaksi database ?


Misalkan pada sistem penjualan, terdapat suatu bisnis proses pembelian sebuah produk atau barang, dalam bisnis proses pembelian produk ini dikatakan bahwa setiap pembelian produk akan tercatat penambahan jumlah produk saat ini dan juga akan meng-update harga produk satuannya. Agar lebih jelasnya, perhatikan design Tabel Relationship Diagram (TRD) berikut ini :

Gambar 5.1 :Diagram Relasi Tabel (TRD) Produk dengan Pembelian Terdapat relasi antara tabel produk dan tabel pembelian, dari diskripsi bisnis proses pembelian diiginkan setiap kali terjadi input pada tabel pembelian akan meng-update tabel produk. Lebih jelas lagi jika terjadi pembelian produk dengan id_produk = 2 misalnya, aplikasi program akan secara otomatis mengupdate jumlah dan harga_jual produk yang mempunyai id_produk 2. Terlihat jelas bahwa ada dua proses query yang akan berjalan ; Query INSERT pada tabel Pembelian Query UPDATE pada tabel Produk Agar proses query ini bisa aman ter-eksekusi, dalam arti jika ada kesalahan perintah query maupun entry data pada salah satu tabel, maka kedua perintah tidak akan dijalankan atau jika query pertama sukses dan query kedua gagal, maka query pertama akan dibatalkan dan begitu juga sebaliknya, proses mengembalikan kepada keadaan semula atau proses pembatalan perintah query dinamakan proses rollback. Jika kedua query benar maka proses dijalankan atau disebut commit. Proses ini dinamakan transaksi database.
www.nurulfikri.com 7874223 / 24

46

Program Reguler & Inhouse

PHP Advance

5.3. Transaksi pada database MySQL


Secara default fitur transaksi database tidak di support oleh database MySQL karena secara default MySQL menggunakan format MyISAM, agar fitur transaksi bisa digunakan dalam database MySQL anda harus menggunakan format InnoDB. 5.3.1 Database dengan format table InnoDB

Misalkan dalam database latihan yang telah dibuat, akan dibuat table dengan skema table produk berikut ini :
+----------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+----------------+ | idproduk | int(11) | NO | PRI | NULL | auto_increment | | kode | varchar(8) | YES | | NULL | | | nama | varchar(32) | YES | | NULL | | | jumlah | int(11) | YES | | NULL | | | harga | double | YES | | NULL | | +----------+-------------+------+-----+---------+----------------+

dan table pembelian dengan skema berikut ini :


+-------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+-------------+------+-----+---------+----------------+ | idpembelian | int(11) | NO | PRI | NULL | auto_increment | | kode | varchar(10) | YES | UNI | NULL | | | idproduk | int(11) | YES | | NULL | | | jumlah | int(11) | YES | | NULL | | | harga_beli | double | YES | | NULL | | | harga_jual | double | YES | | NULL | | | tanggal | date | YES | | NULL | | +-------------+-------------+------+-----+---------+----------------+

Berikut perintah buat tabel produk dan pembelian dengan format InnoDB :
mysql> create table produk ( idproduk integer not null auto_increment primary key, kode varchar(8), nama varchar(32), jumlah integer, harga double) type InnoDB; mysql> create table pembelian ( idpembelian integer not null auto_increment primary key, kode varchar(10) unique, idproduk integer references produk(idproduk), jumlah integer, harga_beli double, harga_jual double, tanggal date) type InnoDB;

5.3.2

Contoh kasus transaksi Misalkan terdapat data dalam tabel produk dan pembelian sebagai berikut :

mysql> select * from produk;

www.nurulfikri.com 7874223 / 24

47

Program Reguler & Inhouse


+-----------+------+-----------+--------+-------+ | idproduk | kode | nama | jumlah | harga | +-----------+------+-----------+--------+-------+ | 1 | P001 | CDR-Blank | 10 | 2500 | | 2 | P002 | Pinsil | 5 | 1200 |

PHP Advance

mysql> select * from pembelian; +--------------+------+-----------+--------+------------+------------+------------+ | idpembelian | kode | id_produk | jumlah | harga_beli | harga_jual | tanggal | +--------------+------+-----------+--------+------------+------------+------------+ | 1 | B001 | 1 | 10 | 2000 | 2500 | 2006-09-09 | +--------------+------+-----------+--------+------------+------------+------------+

dan akan dilakukan dua query berikut ini :


mysql> insert into pembelian values ('','B001',2,20,900,1300,now()); ERROR 1062 (23000): Duplicate entry '0' for key 1 mysql> update produk set jumlah=jumlah + 20,harga=1300 where id_produk=2; Query OK, 1 row affected (0.10 sec)

Terlihat perintah pertama terjadi kesalahan, karena menggunakan kode pembelian yang sudah ada 'B001', dan query kedua sukses. Seharusnya jumlah produk dan harga produk tidak ter-update karena proses query pertama gagal. Hal ini terjadi karena MySQL secara default menggunakan autoCommit ( autoCommit bernilai true) untuk setiap proses query yang dilakukan. 5.3.3 Transaksi dengan menggunakan library PDO

Dengan menggunakan library PDO maka masalah transaksi pada database telah dapat diatasi, berikut contoh programnya :
1 <?php 2 try { 3 $dbh = new PDO('mysql:host=localhost;dbname=latihan','rojul','rojul'); 4 echo "Connected\n"; 5 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 6 // memulai transaksi 7 $dbh->beginTransaction(); 8 // query pertama 9 $dbh->exec(" insert into pembelian values ('','B001',2,20,900,1300,now())"); 10 // query kedua 11 $dbh->exec(" update produk set jumlah=jumlah + 20,harga=1300 where idproduk=2"); 12 // commit transaksi 13 $dbh->commit(); 14 15 } catch (Exception $e) { 16 // batalkan transaksi 17 $dbh->rollBack(); 18 echo "Failed: " . $e->getMessage(); 19 } 20 ?>

www.nurulfikri.com 7874223 / 24

48

Program Reguler & Inhouse

PHP Advance

Bab 6.
6.1. Tujuan:

MySQL Store Procedure & Trigger


Mengerti penggunaan Store Procedure di database MySQL Mengerti penggunaan Trigger di database MySQL

6.2. Store Procedure


MySQL pada versi 5 telah mengenalkan fitur store procedure. Store procedure sendiri adalah sebuah procedure (pernyataan program yang berisi logika sql) yang tersimpan dalam database server. Mengapa menggunakan Store Procedure : Karena berada dalam database server, logika pemrograman pada aplikasi tidak diperlukan lagi, yang harus dilakukan adalah memanggil store procedure. Mereduksi trafik pada jaringan yang mengakses database, karena logika pemrograman di laksanakan oleh database server, bukan oleh client. 6.2.1 Perintah Create Procedure dan Function

CREATE [DEFINER = { user | CURRENT_USER }] PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body CREATE [DEFINER = { user | CURRENT_USER }] FUNCTION sp_name ([func_parameter[,...]]) RETURNS type [characteristic ...] routine_body proc_parameter: [ IN | OUT | INOUT ] param_name type func_parameter: param_name type type: Any valid MySQL data type characteristic: LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER } | COMMENT 'string' routine_body: Valid SQL procedure statement

www.nurulfikri.com 7874223 / 24

49

Program Reguler & Inhouse 6.2.2 Contoh Kasus Sederhana

PHP Advance

Misalkan dalam database anda terdapat sebuah tabel pegawai, berikut contoh sederhana membuat procedure untuk menampilkan jumlah data pegawai.
mysql> delimiter // mysql> create procedure prosedure_hitung_pegawai (out param1 INT) -> begin -> select count(*) into param1 from pegawai; -> end; -> // Query OK, 0 rows affected (0.00 sec) mysql> delimiter ;

6.2.3

Memanggil Store Procedure

mysql> call prosedure_hitung_pegawai(@jumlah); Query OK, 0 rows affected (0.00 sec) mysql> select @jumlah; +---------+ | @jumlah | +---------+ | 4 | +---------+ 1 row in set (0.00 sec) mysql> select @jumlah as jumlah ; +--------+ | jumlah | +--------+ | 4 | +--------+ 1 row in set (0.06 sec)

6.2.4

Menghapus Prosedure Hitung Pegawai

mysql> DROP PROCEDURE IF EXISTS prosedure_hitung_pegawai; Query OK, 0 rows affected (0.09 sec)

6.3. Contoh Kasus Store Procedure Pembelian Produk


Berikut contoh kasus pembelian produk pada database latihan ( bab 5) . Terdapat dua table produk dan table pembelian. Dalam kasus ini akan dibuat store procedure yang akan secara otomatis mengupdate stok produk setiap saat terjadi transaksi pembelian produk.

www.nurulfikri.com 7874223 / 24

50

Program Reguler & Inhouse 6.3.1 Procedure pembelian_produk

PHP Advance

Akan dibuat sebuah procedure pembelian_produk yang digunakan untuk mengupdate jumlah stok pada produk, procedure ini dipanggil ketika telah sukses menginput ke tabel pembelian. Pada prosedure pembelian_prod ini diperlukan dua inputan argumen yaitu : idproduk yang akan diinput dan jumlah barang yang datang.
mysql> mysql> -> -> -> mysql> delimiter // create procedure pembelian_produk (in idpro int,in jml int) begin update produk set jumlah=jumlah + jml where idproduk=idpro; end // delimiter ;

6.3.2

Memanggil procedure Berikut isi data table produk sebelum procedure dipanggil

mysql> select * from produk; +----------+------+-----------+--------+-------+ | idproduk | kode | nama | jumlah | harga | +----------+------+-----------+--------+-------+ | 1 | P001 | CDR-Blank | 10 | 2500 | | 2 | P002 | Pensil | 25 | 1300 | +----------+------+-----------+--------+-------+

Diasumsikan telah di input data incoming untuk produk dengan id = 1 dan jumlah = 10
mysql> call pembelian_produk ( 1,30); Query OK, 1 row affected (0.00 sec)

Jika berjalan lancar data produk dengan idproduk 1 telah terupdate.


mysql> select * from produk; +----------+------+-----------+--------+-------+ | idproduk | kode | nama | jumlah | harga | +----------+------+-----------+--------+-------+ | 1 | P001 | CDR-Blank | 40 | 2500 | | 2 | P002 | Pensil | 25 | 1300 | +----------+------+-----------+--------+-------+ 2 rows in set (0.00 sec)

6.3.3

Menjalankan store procedure dalam PHP Berikut kode program PHP yang memanggil store procedure

1 <?php 2 3 try { 4 $dbh = new PDO('mysql:host=localhost;dbname=latihan','rojul','rojul'); 5 echo "Connected\n"; 6 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 7 8 // memulai transaksi

www.nurulfikri.com 7874223 / 24

51

Program Reguler & Inhouse


9 $dbh->beginTransaction(); 10 $dbh->exec(" insert into pembelian values ('','B002',2,20,900,1300,now())"); 11 $dbh->exec("call pembelian_produk(2,20)"); 12 // commit transaksi 13 $dbh->commit(); 14 15 } catch (Exception $e) { 16 // batalkan transaksi 17 $dbh->rollBack(); 18 echo "Failed: " . $e->getMessage(); 19 } 20 21 22 ?>

PHP Advance

6.4. Trigger
6.4.1 Perintah Trigger

Berikut sintak untuk membuat trigger, sintaks ini harus dijalankan oleh user root database MySQL.
CREATE [DEFINER = { user | CURRENT_USER }] TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt

6.4.2

Contoh Trigger pada kasus pembelian produk

Berikut contoh trigger yang digunakan untuk update jumlah stok pada table produk dimana trigger akan dieksekusi setelah terjadi proses insert data ke table pembelian
mysql> delimiter // mysql> CREATE TRIGGER tambah_stok AFTER INSERT ON pembelian -> FOR EACH ROW BEGIN -> UPDATE produk SET jumlah = jumlah + NEW.jumlah WHERE idproduk=NEW.idproduk; -> END; -> // mysql> delimiter ;

www.nurulfikri.com 7874223 / 24

52

Program Reguler & Inhouse

PHP Advance

Bab 7.
7.1. Tujuan:

Input Output File


Mengerti dan memahami proses pengaksesan data dalam media File Mampu menerapkan operasi file dalam script PHP. Mampu membuat program upload file ke server.

7.2. Operasi File


File adalah media penyimpanan data yang sederhana. File juga bisa dikatakan sebagai database namun jauh berbeda dengan database-database relasional saat ini. Penanganan atau operasi file sangat penting dalam pemrograman karena file adalah sarana penting untuk pengolahan data. Tanpa file kita tidak dapat menyimpan data yang akan kita olah. Untuk dapat bekerja dengan File, PHP telah menyediakan beberapa fungsi yang berkaitan dengan operasi File. Diantaranya yaitu: 7.2.1 fopen() berfungsi untuk membuka sebuah file atau URL. Penulisannya,
int fopen(string filename, string mode, int [use_include_path]);

penjelasan: Fungsi ini akan mengembalikan pointer ke file yang diberikan pada argument jika berhasil membuka file, dan akan mengembalikan nilai false jika terdapat kesalahan dalam proses membuka file. 1. 'r' - membuka file untuk proses baca saja. 2. 'r+' - file untuk dibaca dan ditulis. 3. 'w' - membuka file untuk ditulisi saja, jika file sudah ada maka file akan ditimpa dan jika belum ada maka akan dibuat yang baru,pointer pada awal file. 4. 'w+' - buka file untuk baca dan tulis, jika file sudah ada akan ditimpa dan jika belum ada akan dibuat yang baru,pointer pada awal file. 5. 'a' - file dibuka untuk penambahan di akhir file, jadi pointer akan menunjuk pada akhir file. Jika file belum ada akan dibuat yang baru. 6. 'a+' - file dibuka untuk operasi baca dan tulis, dan pointer diletakkan di akhir file. Jika file belum ada akan dibuat yang baru. 7. 'b' - file dibuka sebagai file binary (bukan teks), biasanya ini dipakai pada sistem komputer yang membedakan file tipe binary dan teks. Contoh:
1. <?php
www.nurulfikri.com 7874223 / 24

53

Program Reguler & Inhouse

PHP Advance

$fp = fopen("/home/salmanas/data.txt", "r"); 2. $fp = fopen("http://www.nurulfikri.net/", "r"); 3. $fp = fopen("ftp://salmanas:passwd@192.168.0.20/", "w"); 4. ?>

7.2.2

fclose() berfungsi menutup pointer ke file. Penulisannya, int fclose(int fp);

jika terjadi kesalahan akan memberikan nilai false dan jika sukses akan memberikan nilai true. Argument fp berupa pointer ke file yang valid.

7.2.3

feof() untuk memeriksa apakah akhir file telah dicapai. Penulisannya,

berfungsi int feof(int fp);

Jika telah ditemukan akan mengembalikan nilai true, dan bila sebaliknya akan mengembalikan nilai false. 7.2.4 file_exists()

akan memeriksa apakah file yang diberikan ada dalam media penyimpan. Akan mengembalikan nilai true bila file ada dan false akan dikembalikan jika sebaliknya. int file_exists(string filename); 7.2.5 fgets()

berfungsi mengambil satu baris teks dari sebuah pointer ke file. Penulisannya, string fgets(int fp, int length); fungsi ini akan mengembalikan string sepanjang (length - 1) byte dari file yang ditunjuk oleh fp. Pembacaan teks akan dihentikan jika bertemu salah satu kondisi berikut, length, karakter baris baru, karakter akhir file (EOF).

Jika kesalahan terjadi akan memberikan nilai false. Contoh:


1 <?php 2 $fd = fopen("data.txt", "r"); 3 while (!feof($fd)) {

www.nurulfikri.com 7874223 / 24

54

Program Reguler & Inhouse


4 $buffer = fgets($fd, 4096); 5 echo $buffer; 6 } 7 fclose($fd); 8 ?>

PHP Advance

7.2.6

fputs() Akan menulis string ke file pointer. Penulisannya,

int fputs(int fp, string str, int [length]); mempunyai kembaran fungsi yaitu fwrite(). Proses penulisan akan berhenti jika sudah sepanjang length atau karakter akhir string dicapai, tergantung yang mana lebih dahulu ditemui. Jika parameter length tidak diberikan maka semua string akan dicetak. Contoh:
1 <?php 2 3 $fd = fopen("data.txt", "r+"); 4 while (!feof($fd)) { 5 $buffer = fgets($fd,4096); 6 echo $buffer ."<br>\n"; 7 } 8 echo "<br>Reading process done..<br>\n."; 9 echo "Starting Writing process ...<br>\n"; 10 fputs($fd, "HELLO WORLD\n"); 11 fputs($fd, "HELLO DUNIA\n"); 12 echo "Writing process done...<br>\n"; 13 fclose($fd); 14 15 ?>

7.2.7

file()

akan membaca seluruh file dan dimasukkan ke dalam array. Masing-masing element array akan berisi baris-baris dalam file yang dibaca, dimana karakter baris baru masih dimasukkan. Parameter use_include_path dapat anda isi dengan "1" jika anda ingin mencari file dari variabel lingkungan include_path juga. Penulisannya, array file(string filename, int [use_include_path]);

contoh:
1 2 3 4 <?php $lines = file('http://www.nurulfikri.com/'); foreach ($lines as $line_num => $line) { echo "Line #<b>{$line_num}</b> : " .

www.nurulfikri.com 7874223 / 24

55

Program Reguler & Inhouse


htmlspecialchars($line) . "<br>\n"; 5 } 6 ?>

PHP Advance

7.2.8

filesize()

fungsi ini akan mengembalikan ukuran file dan akan mengembalikan nilai false jika terjadi kesalalahan. int filesize(string filename); Contoh:
1 2 3 4 <?php $filename = index.php; echo Ukuran File $filename ?>

dalam byte : . filesize($filename);

7.3. Upload file


7.3.1 Form upload file

Form untuk upload file sedikit berbeda dengan Form inputan form, form untuk upload file memiliki properti enctype yang digunakan untuk menandakan bahwa form yang digunakan adalah form untuk upload file binary, nilai properti ini adalah multipart/form-data . Komponen form upload menggunakan tag form input dengan tipenya adalah file. Berikut contoh form upload, beri nama file form_upload.php
1 <html> 2 <body> 3 <form action="upload_file.php" method="post" enctype="multipart/form-data"> 4 <label for="file">Filename:</label> 5 <input type="file" name="file" id="file" /> 6 <br /> 7 <input type="submit" name="submit" value="Submit" /> 8 </form> 9 </body> 10 </html>

7.3.2

Skrip upload file Berikut skrip program untuk upload filenya :

1 <?php 2 if ($_FILES["file"]["error"] > 0) 3 { 4 echo "Error: " . $_FILES["file"]["error"] . "<br />";

www.nurulfikri.com 7874223 / 24

56

Program Reguler & Inhouse

PHP Advance

5 } 6 else 7 { 8 echo "Upload: " . $_FILES["file"]["name"] . "<br />"; 9 echo "Type: " . $_FILES["file"]["type"] . "<br />"; 10 echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; 11 echo "Stored in: " . $_FILES["file"]["tmp_name"]; 12 } 13 ?>

7.3.3

Membatasi ukuran file dan tipe file upload

Tipe file images yang akan diupload bisa ditentukan, misalnya file yang hanya bisa diupload adalah file yang mempunyai ektensi jpeg, png dan gif saja, dan ukuran file maksimum 20kb. Berikut skrip programnya :
1 <?php 2 if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/pjpeg")) && ($_FILES["file"]["size"] < 20000)) 3 { 4 if ($_FILES["file"]["error"] > 0) 5 { 6 echo "Error: " . $_FILES["file"]["error"] . "<br />"; 7 } 8 else 9 { 10 echo "Upload: " . $_FILES["file"]["name"] . "<br />"; 11 echo "Type: " . $_FILES["file"]["type"] . "<br />"; 12 echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; 13 echo "Stored in: " . $_FILES["file"]["tmp_name"]; 14 } 15 { 16 else 17 { 18 echo "Invalid file"; 19 } 20 ?>

7.3.4

Simpan file upload

Pada program sebelumnya file upload belum tersimpan ke dalam direktori yang dituju, untuk menyimpan file, file temporary dapat di copy kesebuah direktori yang ditentukan. Pastikan terlebih dahulu direktori lokasi file telah diberi izin akses untuk menulis ( write ). Berikut skrip lengkap untuk upload file yang disimpan kedalam direktori upload.
1 <?php 2 if ((($_FILES["file"]["type"] == "image/gif")
www.nurulfikri.com 7874223 / 24

57

Program Reguler & Inhouse

PHP Advance

|| ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/pjpeg")) && ($_FILES["file"]["size"] < 20000)) 3 { 4 if ($_FILES["file"]["error"] > 0) 5 { 6 echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; 7 } 8 else 9 { 10 echo "Upload: " . $_FILES["file"]["name"] . "<br />"; 11 echo "Type: " . $_FILES["file"]["type"] . "<br />"; 12 echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; 13 echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />"; 14 if (file_exists("upload/" . $_FILES["file"]["name"])) 15 { 16 echo $_FILES["file"]["name"] . " already exists. "; 17 } 18 else 19 { 20 move_uploaded_file($_FILES["file"]["tmp_name"], 21 "upload/" . $_FILES["file"]["name"]); 22 echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; 23 } 24 } 25 } 26 else 27 { 28 echo "Invalid file"; 29 } 30 ?>

Bab 8.
8.1. Tujuan:

Menggunakan External Library


Mengerti penggunaan ekternal library Mampu menggunakan library HTML_QuickForm

www.nurulfikri.com 7874223 / 24

58

Program Reguler & Inhouse

PHP Advance

8.2. Mengapa menggunakan eksternal library


PHP adalah bahasa pemrograman yang open source, banyak kode program yang mempunyai fungsionalitas dibuat oleh programmer atau kelompok programmer yang kemudian di publish di internet. Beberapa website seperti, http://apache.org dan http://pear.php.net menyediakan library PHP yang dapat digunakan dalam pengembangan aplikasi. Ketika membuat aplikasi dengan menggunakan PHP, baiknya kita menggunakan library eksternal library karena programnya telah teruji dan digunakan oleh beberapa programmer dalam membangun sebuah framework.

8.3. Paket PEAR::HTML_QUICKFORM


Paket HTML_QUICKFORM adalah library yang menggunakan paket PEAR dan digunakan untuk pembuatan form. Class HTML_QUICKFORM berisi fungsi-fungsi untuk menambahkan elemen-elemen form seperti text,submit,radio,password,select dan element form lainnya. Output yang dihasilkan telah dilayout didalam tabel. 8.3.1 Download dan Install paket HTML_QuickForm

Sebelum mendowload Library HTML_QuickForm pastikan PHP anda sudah support untuk library PHP-PEAR, dapat dilihat dihalaman file info.php. dapat didownload di situs: http://pear.php.net/package/HTML_QuickForm/download Anda tidak perlu download paket ini jika menggunakan aplikasi XAMPP versi 1.6.x. 8.3.2 Membuat object Form Langkah-langkah pembuatan Form dengan HTML_QUICKFORM : Membuat object Form

1 <?php 2 require_once "HTML/QuickForm.php"; 3 $form = new HTML_QuickForm('proses_nilai.php', 'POST'); 4 ?>

Menampilkan Form

1 <?php 2 $form->display(); 3 ?>

8.3.3

Menambahkan Elemen Form Berikut kode program untuk menambahkan elemen-elemen form

www.nurulfikri.com 7874223 / 24

59

Program Reguler & Inhouse

PHP Advance

1 <?php 2 $mata_kuliah = array("1"=>"PHP Lanjutan", 3 "2"=>"Linux Fundamental", 4 "3"=>"Basis Data", 5 "4"=>"Shell Programming", 6 "5"=>"Sistem Informasi"); 7 $form->addElement('header', 'MyHeader', 'Nilai Ujian'); 8 $form->addElement('select', 'mk', 'Mata Kuliah :', $mata_kuliah); 9 $form->addElement('text', 'nama_siswa', 'Nama Siswa:'); 10 $form->addElement('text', 'nilai', 'Nilai:'); 11 $atribut_keterangan = array("class"=>"error", 12 "rows"=>"4", 13 "cols"=>"50"); 14 $form->addElement('textarea', 'keterangan', 'Keterangan:', $attrs); 15 ?>

Mengelompokan elemen Form

1 <?php 2 $genders[] = &HTML_QuickForm::createElement('radio', 'gender',null,"Pria","Pria"); 3 $genders[] = &HTML_QuickForm::createElement('radio', 'gender',null,"Wanita","Wanita"); 4 form->addGroup($genders, null, 'Gender : ', '&nbsp;'); 5 6 $buttons[]=&HTML_QuickForm::createElement('submit', 'proses', 'Simpan'); 7 $buttons[]=&HTML_QuickForm::createElement('submit', 'proses', 'Batal'); 8 $form->addGroup($buttons, null, null, '&nbsp;'); 9 ?>

8.3.4

Menambahkan Rule pada elemen Form Gunakan fungsi addRule() untuk membuat sebuah elemen form wajib diisi oleh user.

1 <?php 2 $form->addRule('nama_siswa', 'Nama siswa harus diisi !!', 'required'); 3 $form->addRule('nilai', 'Nilai harus diisi !!', 'required'); 4 ?>

8.3.5

Validasi Form

1 <?php 2 if ($form->validate()) { 3 // Jika Form Sukses tampilkan data 4 $form->freeze();


www.nurulfikri.com 7874223 / 24

60

Program Reguler & Inhouse


5 6 7 ?> echo "\n<HR>\n"; }

PHP Advance

8.3.6

Menangkap request Form


$nama = $form->getElementValue('nama_siswa'); $nilai = $form->getElementValue('nilai'); $kode_mk = $form->getElementValue('mk');

1 <php 2 3 4 5 ?>

8.3.7

Proses Form ke database Buat fungsi yang akan memproses inputan form, misalnya simpan_data()

1 <?php 2 3 function simpan_data( $vals ) 4 { 5 6 // cetak data request form 7 foreach ($vals as $k => $v ) 8 { 9 echo $k.'------>'.$v; 10 echo '<br/>'; 11 } 12 13 // simpan request form sebagai variable 14 $nama = $vals['nama_siswa']; 15 $nilai = $vals['nilai']; 16 $mata_kuliah = $vals['mk']; 17 18 // proses simpan database dapat dilakukan disini 19 } 20 ?>

Panggil fungsi simpan_data() pada saat form telah lulus validasi

1 <?php 2 if ($form->validate()) { 3 // panggil fungsi simpan_data 4 $form->process('simpan_data') 5 $form->freeze(); 6 echo "\n<HR>\n"; 7 } 8 ?>

www.nurulfikri.com 7874223 / 24

61

Program Reguler & Inhouse

PHP Advance

www.nurulfikri.com 7874223 / 24

62

Program Reguler & Inhouse

PHP Advance

Bab 9.
9.1. Tujuan:

Paging
Mengerti penggunaan paging data

9.2. Kebutuhan paging


Keterbatasan halaman dalam menampilkan data menjadi kendala sendiri untuk menampilkan kumpulan data dari hasil query database, biasanya terjadi kala menampilkan sebuah laporan pada halaman web. Sebuah halaman web paling maksimum bisa menampilkan data sekitar 30 baris data, jika lebih maka user harus menggulung halaman web untuk menampilkan data berikutnya. Salah satu solusi terbaik adalah dengan menampilkan data per-halaman, dengan membatasi setiap halamannya dengan jumlah baris data tertentu. Misal terdapat 200 baris data hasil query, jadi jika ingin menampilkan setiap 20 baris data setiap halamannya, maka terdapat 10 halaman, yang harus dilakukan user adalah pindah halaman.
Gambar 9.1 : Halaman paging produk

9.3. Query Limit dan Offset


Perintah query untuk menampilkan 3 record data pertama adalah :
mysql> select * from produk limit 3 offset 0; +-----------+------+-----------------+--------+--------+ | id_produk | kode | nama | jumlah | harga | +-----------+------+-----------------+--------+--------+ | 1 | P001 | CDR-Blank | 10 | 2500 | | 2 | P002 | Pinsil | 25 | 1300 | | 3 | P003 | Flash Disk 128M | 20 | 130000 | +-----------+------+-----------------+--------+--------+

Perintah query untuk menampilkan 3 record data dimulai dari record ke 3 adalah :
mysql> select * from produk limit 3 offset 3; +-----------+------+-----------------+--------+--------+ | id_produk | kode | nama | jumlah | harga |

www.nurulfikri.com 7874223 / 24

63

Program Reguler & Inhouse


+-----------+------+-----------------+--------+--------+ | 4 | P004 | Flash Disk 256M | 20 | 150000 | | 6 | P005 | Flash Disk 1G | 20 | 200000 | | 7 | P006 | Disket | 50 | 3000 | +-----------+------+-----------------+--------+--------+

PHP Advance

9.4. Paging database MySQL


Nama File : paging_mysql.php
1 <center> 2 <h3> Daftar Produk</h3> 3 <hr/> 4 5 <?php 6 $dbh= new PDO('mysql:host=localhost;dbname=koperasi','rojul','rojul'); 7 8 $heads = array ("No","Kode","Nama","Harga","Jumlah"); 9 10 //Dapatkan jumlah record dari hasil query 11 $sql = "select count(*) from produk"; 12 $result = $dbh->query($sql); 13 $total_record = $result->fetchColumn(); 14 15 //Tentukan jumlah record yang akan ditampilkan per-halaman 16 $record_show = 3; 17 18 //Dapatkan jumlah halaman : total record / jumlah record perhalaman 19 $jumlah_halaman = ceil($total_record/ $record_show); 20 21 //Halaman berapa yang diiginkan user untuk ditampilkan 22 $page = $_REQUEST['page']; 23 if (empty($page) || $page == 1) 24 { 25 $page = 1; 26 $begin_record = 0; // offset dimulai dari 0 27 } 28 else 29 { 30 $begin_record = $record_show * ($page - 1); // offset 31 } 32 //tentukan halaman sebelumnya 33 if ($page == 1 ) $prev_page = 1; 34 else $prev_page = $page - 1; 35 36 //tentukan halaman sesudahnya 37 if ($page == $jumlah_halaman) $next_page = $page; 38 else $next_page = $page + 1; 39 40 ?> 41 <table width="500" cellspacing="2" cellpadding="1" border="1"> 42 <tr> 43 <?php

www.nurulfikri.com 7874223 / 24

64

Program Reguler & Inhouse

PHP Advance

44 foreach ($heads as $head) 45 { 46 echo "<th>$head</th>"; 47 } 48 ?> 49 </tr> 50 <?php 51 //query paging 52 $sql_paging = "select * from produk limit $record_show offset $begin_record"; 53 $rs_paging = $dbh->query($sql_paging); 54 55 $counter = $begin_record + 1; 56 foreach ($rs_paging as $row) 57 { 58 echo "<tr><td>$counter</td><td>".$row['kode']."</td><td>". $row['nama']."</td><td>".$row['harga']."</td><td>". $row['jumlah']."</td></tr>"; 59 $counter++; 60 } 61 62 ?> 63 </table> 64 <a href="paging_mysql.php?page=1">First</a> 65 <a href="paging_mysql.php?page=<?php echo $prev_page;?>">Prev</a> 66 <a href="paging_mysql.php?page=<?php echo $next_page;?>">Next</a> 67 <a href="paging_mysql.php?page=<?php echo $jumlah_halaman;? >">Last</a> 68 <br> 69 <?php 70 echo "Halaman ke ".$page." dari ".$jumlah_halaman." Halaman"; 71 ?> 72 </center>

www.nurulfikri.com 7874223 / 24

65

Program Reguler & Inhouse

PHP Advance

Bab 10.
10.1.

Session Role Permission


Mengerti konsep Session Mampu membuat program dengan menggunakan Session

Tujuan:

10.2.

Apa itu Session

HTTP adalah protokol stateless yang tidak dapat menyimpan sebuah informasi tentang sebuah koneksi yang terjadi ke server, artinya dengan hanya menggunakan HTTP, aplikasi tidak tahu tentang user yang terhubung ke aplikasi web, karenanya ketika suatu halaman web diakses maka akan dianggap sebagai suatu koneksi yang baru. Apache / PHP menyediakan solusi ini dengan memperkenalkan fitur session. Konsep session sebenarnya sangat sederhana, ketika seorang user (Browser) melakukan koneksi ke server, maka user didaftarkan pada sebuah nomor identitas yang unik (unique ID / Session ID). Web server akan memaintain informasi session ini dalam sebuah file dengan menyimpan ID session ini. User juga dapat memaintain session ID ini, tiap kali koneksi ke server. Hal ini dilakukan dengan menyimpan ID dalam sebuah cookie, dimana dikirim ke server sebagai bagian dari Request-Response web. Jika user tidak mengizinkan cookies, ID session dapat dikirim ke server tiap kali sebuah halaman web diakses (request) dengan menyimpan dalam bagian dari URL. Session akan kadaluarsa (expired) manakala user memutuskan koneksi ke server, dan session untuk user di nonaktifkan.

10.3.

Fungsi-Fungsi Session
Fungsi Diskripsi
Inisialisasi session / aktifkan Session Mendaftarkan variabel sebagai variabel Session Melihat apakah variabel telah terdaftar dalam variabel Global Session Menghapus semua variabel yang terdapat dalam Session Menghapus sebuah variabel yang terdapat dalam Session

session_start() session_register() session_is_registered() session_destroy() session_unregister()

Berikut contoh penggunaan fungsi-fungsi Session. Nama File : proses_login.php


1 <?php 2 session_start(); 3 $proses = $_POST['proses'];

www.nurulfikri.com 7874223 / 24

66

Program Reguler & Inhouse

PHP Advance

4 5 if (!empty($proses) && $proses == "Login")// jika pilih login 6 { 7 $login_name = $_POST['user_name']; 8 $passwd = $_POST['password']; 9 10 if ($login_name == "admin" && $passwd=="4dm1n")// cek user name dan password 11 { 12 $_SESSION['USER_ID']="admin"; // register variabel session 13 echo "<h1>Welcome To System </h1>"; 14 } 15 else 16 { 17 header('Location:login.php?st=f'); 18 } 19 } 20 else 21 { 22 header('Location:login.php'); 23 } 24 25 ?>

Berikut contoh program logout.php


1 <?php 2 3 session_start(); 4 // hapus variabel session 5 session_destroy(); 6 // kembalikan ke halaman depan 7 header('Location:index.php'); 8 ?>

10.4.

User Apliksi

Dalam sebuah aplikasi kebutuhan otentifikasi (login kedalam sistem aplikasi) adalah suatu keharusan, user pengguna aplikasi harus login ke dalam sistem. Informasi tentang user dapat di simpan dalam database.

www.nurulfikri.com 7874223 / 24

67

Program Reguler & Inhouse

PHP Advance

Gambar 10.1 : Table Members ( User Aplikasi )

Dalam tabel members ini disimpan juga informasi lain, seperti tgl_daftar, lastlogin, idsession dan nomor IP ketika user mengakses aplikasi. Data password ketika disimpan sebaiknya terinkripsi dengan baik, bisa menggunakan fungsi md5 untuk mengekripsi password. Berikut contoh isi data members dengan data password telah terinkripsi.
latihan=> select login,password,idrole,user_name from members; login | password | idrole | user_name -------+----------------------------------+--------+---------------rojul | f113cc6fa1bf89e07e151d6d774af95f | 1 | Sirojul Munir rosa | dd5372514ff5a47c50453495b05da20b | 2 | Rosalie Naurah

10.5.

Role Permission

Seorang user aplikasi dibatasi oleh peran (role) yang dimainkan, seperti untuk user admin tentu beda dengan user publik, atau user direktur mempunyai hak akses yang lebih dibandingkan user staff dalam hirarki user sistem aplikasi. Berikut design table user dengan role nya yang menggunakan jenis single role permission, artinya satu user hanya mempunyai satu role (peran) dalam aplikasi.

Gambar 10.2 : Single Role Permission

Namun demikian bisa saja sebuah sistem aplikasi menerapkan bahwa role (peran) seorang
www.nurulfikri.com 7874223 / 24

68

Program Reguler & Inhouse user bisa lebih dari satu. Seorang manager adalah operator juga,

PHP Advance

Gambar 10.3 : Multi Role Permission

10.6.

Login Aplikasi

Berikut skrip untuk login kedalam aplikasi (login.php) :


1 <center> 2 <div style="border:1px solid khaki;backgroundcolor:beige;width:300px"> 3 .::LOGIN USER::.<form method="POST" action="proses_login.php"> 4 Login Name : <input type="text" name="user_name" value="" size="15"> 5 <br> 6 Password: <input type="password" name="password" value="" size="15"> 7 <br> 8 <input type="submit" value="Login" name="proses"> 9 <input type="submit" value="Cancel" name="proses"> 10 </form> 11 </div> 12 </center>

Gambar 10.4 : Login Form

www.nurulfikri.com 7874223 / 24

69

Program Reguler & Inhouse Berikut program otentifikasi login user (proses_login.php)
1 <?php 2 session_start(); 3 $dbh =new PDO('mysql:host=localhost;dbname=koperasi','rojul','rojul'); 4 5 $proses = $_POST['proses']; 6 7 if (!empty($proses) && $proses == "Login") 8 { 9 $login_name = $_POST['user_name']; 10 $passwd = $_POST['password']; 11 $user_app = array($login_name,$passwd); 12 13 $sql2 = "SELECT a.*,b.nama as role from members a, role_permission b where a.login=? and a.pass=md5(?) and a.idrole=b.idrole"; 14 15 $sth = $dbh->prepare($sql2); 16 17 $sth->execute($user_app); 18 19 $rs = $sth->fetchAll(); 20 21 if (count($rs) > 0 ) 22 { 23 $row = $sth->fetch(); 24 $_SESSION['USERID']=$row['login']; 25 $_SESSION['ROLEID']=$row['idrole']; 26 $_SESSION['USER_NAME']=$row['user_name']; 27 $_SESSION['USER_ROLE']=$row['role']; 28 // header('Location:index.php'); 29 // arahkan ke halaman aplikasi 30 } 31 else 32 { 33 echo 'Kombinasi User dan Password salah '; 34 } 35 } 36 ?>

PHP Advance

10.7.

Logout

Berikut program untuk logout aplikasi (logout.php)


1 <?php 2 session_start(); 3 $_SESSION = array(); //clear session 4 session_destroy(); // matikan session 5 ?>

www.nurulfikri.com 7874223 / 24

70

Program Reguler & Inhouse

PHP Advance

Bab 11.

Error Handling

Tidak ada programmer / developer, walau sepandai apapun dia pasti pernah membuat kesalahan pada pembuatan kode program (error program). Karenanya hampir setiap bahasa pemrograman termasuk PHP mempunyai kemampuan untuk menangkap kesalahan (catch error) dan kemudian melakukan penanganan kesalahan program (error handling). Penanganan ini berupa hal yang sederhana seperti menampilkan pesan kesalahan. PHP mempunyai API (Application Program Interface) penanganan kesalahan yang lengkap. PHP melalui API tidak hanya menyediakan jenis atau tipe error yang akan ditampilkan ke user, tetapi juga memperbolehkan programmer / developer untuk akses langsung kode progam yang dibuat (fungsi-fungsi), sehingga programmer dapat lebih kreatif dalam membuat kode program.

11.1.

Level Error

Pada program PHP ketika terjadi kesalahan program (error), biasanya akan menampilkan pesan kesalahan yang berisi informasi penyebab kesalahan dan mungkin saja skrip program akan berhenti, hal ini bergantung pada tipe kesalahan yang terjadi. Ada beberapa level error dalam PHP : 1. E_ERROR, adalah error sangat kritis diantaranya error kehabisan memory (out-of memory), exception yang tidak ditangkap (uncaught exception) atau error masalah deklarasi sebuah class, contohnya ketika membuat sebuah instance dari object dari class yang tidak ada. Error ini akan menyebabkan skrip program akan terhenti, dan akan ditampilkan pesan kesalahan kepada user. 2. E_WARNING, Tipe error relatif lebih serius dan biasa sering terjadi karena penggunaan sintak yang tidak berjalan dengan semestinya, seperti salah menggunakan fungsi (kurang argumen), koneksi yang gagal ke database atau pembagian dengan 0, contohnya seperti menggunakan fungsi include() dimana file yang di-include tidak ada. Error ini tidak akan menghentikan skrip program. 3. E_PARSE, error ini terjadi saat kompilasi, yang memaksa PHP untuk mengabaikan sebelum eksekusi dijalankan. Artinya jika sebuah file PHP terjadi error jenis ini maka file tidak akan dieksekusi. 4. E_STRICT, error level ini adalah satu-satunya yang tidak termasuk dalam konstanta E_ALL. Error ini digunakan untuk proses transisi dari PHP 4 ke PHP 5. 5. E_NOTICE, level error ini tidak termasuk error yang kritis dalam PHP, contoh error seperti ini diantaranya : akses variabel yang belum didefinisikan. Secara default error ini tidak ditampilkan ke user. 6. E_CORE_ERROR, error ini adalah error internal PHP yang terjadi karena sebuah ekstensi dari PHP gagal diaktifkan dan ekstensi ini diabaikan oleh PHP. 7. E_COMPILE_ERROR, error yang terjadi pada saat kompilasi, error ini adalah variasi dari E_PARSE, error yang terjadi akan di abaikan oleh PHP. 8. E_USER_ERROR, error yang didefinisikan oleh user ini akan menyebabkan PHP untuk mengabaikan proses eksekusi. 71

www.nurulfikri.com 7874223 / 24

Program Reguler & Inhouse

PHP Advance

9. E_USER_WARNING, error yang didefinisikan oleh user ini tidak akan menyebabkan keluar dari PHP, level ini menyatakan error yang terjadi masih dalam kategori error level E_WARNING 10. E_USER_NOTICE, error yang didefinisikan oleh user sebagai error level E_NOTICE. Error yang sering terjadi seperti lupa memberi titik koma diakhir statement program termasuk jenis fatal error, karena eksekusi program akan terhenti pada baris program. pesan kesalah. Berikut contoh-contoh error yang perlu dipahami oleh seorang programmer .
1 <?php 2 // string 3 $str = "One and One I Love My Mother"; 4 5 // Gunakan method join() pada string 6 // akan menampilkan tipe error E_WARNING 7 // karena argumen ke dua haruslah berupa array 8 join ('',$str); 9 10 echo "Two and Two I Love My Father"; 11 ?>

Kode program diatas jika di eksekusi akan menampilkan error level Warning.
Warning: join() [function.join]: Bad arguments. in /home/rojul/public_html/modul_php/error1.php on line 8 Two and Two I Love My Father

Error ini tidak akan menghentikan program, baris program berikutnya tetap dieksekusi. Berikut contoh program yang menampilkan E_ERROR

1 <?php 2 // string 3 echo "Mulaiiii"; 4 5 // panggil fungsi yang belum pernah didefinisikan 6 // akan menampilkan E_ERROR 7 fungsiTiada(); 8 echo "Selesaiiiii"; 9 ?>

Skrip program ini jika dieksekusi akan menampilkan pesan error :


Mulaiiii Fatal error: Call to undefined function fungsiTiada() in /home/rojul/public_html/modul_php/error2.php on line 7

www.nurulfikri.com 7874223 / 24

72

Program Reguler & Inhouse

PHP Advance

11.2.

Konfigurasi Error pada php.ini

Dalam file konfigurasi file php.ini dapat ditentukan jenis error yang akan dilaporkan, berikut beberapa properti jenis error yang akan dilaporkan. 1. error_reporting (Integer) Properti ini untuk set pelaporan error untuk setiap skrip PHP, dengan nilai parameter diantaranya E_ALL yang akan menampilkan semua jenis error, atau E_ALL & ~E_NOTICE yang akan menampilkan semua error kecual error notice. 2. display_errors (Boolean) Properti ini akan mengontrol apakah error akan ditampilkan sebagai bagian dari ouput program. Default nilai properti ini adalah on 3. display_startup_errors (Boolean) Properti ini akan mengontrol apakah error akan ditampilkan pada saat startup PHP. Default nilai properti ini adalah off 4. html_errors(Boolean) Properti ini untuk mengontrol apakah format HTML akan digunakan pada pesan error. 5. log_errors (Boolean) Properti ini untuk mengontrol apakah error harus di log atau tidak. Secara default error log akan di tampilkan dalam system error web server. Berikut contoh konfigurasi pelaporan error pada file php.ini :
error_reporting = E_ALL display_errors = on html_errors = on log_errors = off

Jika error notice tidak ingin ditampilkan, bisa diubah dengan :


error_reporting = E_ALL & ~E_NOTICE

11.3.

Tabel Error Handling

PHP memungkinkan programmer dapat mengontrol jenis error yang akan di laporkan jika terjadi kesalahan program, dengan menggunakan fungsi error_reporting(),Fungsi ini memerlukan argumen berupa bilangan integer atau nama konstanta yang akan mengatur skrip program untuk menampilkan tipe error yang diiginkan. Namun sebagai catatan penggunaan metode ini tidak disarankan, jika terjadi error programmer harus memecahkan masalah program, dengan menangkap kesalahan yang
www.nurulfikri.com 7874223 / 24

73

Program Reguler & Inhouse terjadi dan kemudian memberikan logika solusi.

PHP Advance

Gambar 11.1 : Tabel Error Handling

www.nurulfikri.com 7874223 / 24

74

Program Reguler & Inhouse

PHP Advance

11.4.

Custom Error

Secara default error handler (penanganan error) telah di tangani oleh PHP error handler. Dimana error handler akan menampilkan informasi : Tipe Error Pesan Error Nama File Error dan pada baris ke berapa terjadi error. Berikut contoh error :

Namun demikian anda dapat mendefinisikan error sendiri yaitu dengan menggunakan fungsi set_error_handler(). Fungsi ini menerima satu argumen berupa nama fungsi yang akan dipanggil manakala error terjadi. Berikut contoh meng-custom error :
1 <?php 2 // fungsi custom error handler 3 function errorku ($tipe, $pesan, $file, $baris) 4 { 5 echo "<h1>Ada Error !!</h1>"; 6 echo "Error terjadi ketika mengeksekusi skrip program. Silahkan hubungi : <a href=mailto:webmaster@yourdomain.com>Webmaster</a> untuk melaporkan error ini ."; 7 echo "<p>"; 8 echo "Berikut informasi yang dilaporkan : "; 9 echo "<hr><pre>"; 10 echo "Tipe Error : $tipe<br>"; 11 echo "Pesan Error : $pesan</br>"; 12 echo "Nama Filer dan baris Error : <b>$file: $baris</b><br>"; 13 echo "</pre></hr>"; 14 } 15 // difinisikan custom error handler 16 set_error_handler("errorku"); 17 18 $str = "One and One I Love My Mother "; 19 20 join('',$str); 21 ?>

www.nurulfikri.com 7874223 / 24

75

Program Reguler & Inhouse Jika skrip program diatas dieksekusi akan menampilkan pesan error :

PHP Advance

Gambar 11.2 : Menggunakan Custom Error

Dengan teknik yang berbeda pesan error bisa juga kita custom, sehingga tampilan pesan kesalahan dapat di alih bahasakan sesuai dengan keinginan programmer. Berikut contoh skrip
1 <?php 2 // fungsi custom error handler 3 function errorku ($tipe, $pesan, $file, $baris) 4 { 5 switch ($tipe) 6 { 7 //notice 8 case E_NOTICE: 9 //do nothing 10 break; 11 //warning 12 case E_WARNING: 13 echo "<h1>Ada Error !!</h1><hr>"; 14 echo "Error pada file $file <br>dan baris ke $baris, Alhamdulillah error tidak fatal"; 15 echo "<br> Pesan Errornya : $pesan"; 16 break; 17 //fatal_error 18 case E_ERROR: 19 echo "<h1>Ada Error !!</h1><hr>"; 20 echo "Error, Kesalahan fatal terjadi pada file $file <br>dan baris ke $baris"; 21 echo "<br> Pesan Errornya : $pesan"; 22 break; 23 } 24 } 25

www.nurulfikri.com 7874223 / 24

76

Program Reguler & Inhouse


26 27 28 29 30 31 32 33 ?> // difinisikan custom error handler set_error_handler("errorku"); $str = "One and One I Love My Mother "; join('',$str);

PHP Advance

Gambar 11.3 : Menggunakan Custom Error

11.5.

Trigger Error

PHP telah menyediakan fungsi built-in yang bisa digunakan untuk mendefinisikan error program. Dengan fungsi trigger_error() programmer bisa menentukan pesan error yang diinginkan dari suatu logika pemrograman.
1 <?php 2 3 function cekPassword($pass) 4 { 5 if (trim($pass) == "") 6 { 7 trigger_error("Anda Lupa isi Password ",E_USER_WARNING); 8 } 9 10 if (strlen($pass) < 6 ) 11 { 12 trigger_error("Password Kependekan .. ",E_USER_WARNING); 13 } 14 15 if (is_numeric($pass))
www.nurulfikri.com 7874223 / 24

77

Program Reguler & Inhouse


16 { 17 trigger_error("Password Tidak Boleh Angka ..",E_USER_WARNING); 18 } 19 } 20 echo "<h2>Validasi Password</h2>"; 21 echo "<br>Password string kosong <br>"; 22 cekPassword(""); 23 echo "<br>Password angka 12345 <br>"; 24 cekPassword(123456); 25 echo "<br>Password kurang 6 digit : ocha <br>"; 26 cekPassword("ocha"); 27 ?>

PHP Advance

Jika skrip diatas dijalankan akan tampil pesan error sesuai dengan yang didefinisikan oleh user.

Gambar 11.4 : Validasi password menggunakan trigger_error()

Akan lebih baik lagi trigger_error() dikombinasikan dengan custom error, sehingga tampilan pesan error bisa lebih ramah bagi user.
1 <?php 2 function cekPassword($pass) 3 { 4 if (trim($pass) == "") 5 { 6 trigger_error("Anda Lupa isi Password ",E_USER_WARNING); 7 } 8 9 if (strlen($pass) < 6 )

www.nurulfikri.com 7874223 / 24

78

Program Reguler & Inhouse

PHP Advance

10 { 11 trigger_error("Password Kependekan .. ",E_USER_WARNING); 12 } 13 14 if (is_numeric($pass)) 15 { 16 trigger_error("Password Tidak Boleh Angka ..",E_USER_WARNING); 17 } 18 } 19 20 function errorku ($tipe, $pesan, $file, $baris) 21 { 22 $pesanku = "<h1>Ada Error !!</h1> Error terjadi ketika mengeksekusi skrip program. Silahkan hubungi : <a href=mailto:webmaster@yourdomain.com>Webmaster</a> untuk melaporkan error ini .<p>Berikut informasi yang dilaporkan :<hr>"; 23 switch ($tipe) 24 { 25 //notice 26 case E_NOTICE: 27 //do nothing 28 break; 29 //warning 30 case E_WARNING: 31 echo "$pesanku<pre>"; 32 echo "Error pada file $file <br>dan baris ke $baris, Alhamdulillah error tidak fatal"; 33 echo "<br> Pesan Errornya : $pesan</pre>"; 34 break; 35 case E_USER_WARNING: 36 echo "$pesanku<pre>"; 37 echo "Error pada file $file <br>dan baris ke $baris "; 38 echo "<br> Pesan Errornya : $pesan</pre>"; 39 break; 40 //fatal_error 41 case E_ERROR: 42 echo "$pesanku<pre>"; 43 echo "Error, Kesalahan fatal terjadi pada file $file <br>dan baris ke $baris"; 44 echo "<br> Pesan Errornya : $pesan</pre>"; 45 break; 46 } 47 } 48 // difinisikan custom error handler 49 set_error_handler("errorku"); 50 51 echo "<h2>Validasi Password</h2>"; 52 echo "Password angka <br>"; 53 cekPassword(123457); 54 ?>

www.nurulfikri.com 7874223 / 24

79

Program Reguler & Inhouse

PHP Advance

Gambar 11.5 : Validasi password menggunakan trigger_error() dan custom error

11.6.

Log Error

PHP juga telah menyediakan log error, yang berfungsi untuk menampilkan pesan dalam baris kode program. Misalnya pada aplikasi penilain siswa, jika nilai siswa kurang dari 55 akan menampilkan pesan (log) siswa dinyatakan tidak lulus. Fungsi error_log() minimum memerlukan dua argumen, pertama pesan yang ingin disampaikan, kedua bilangan integer yang mengindikasikan kemana log error dikirim. 0 Kirim pesan error ke file log system ( Untuk dapat bekerja kita harus meng-edit konfigurasi file PHP dengan meng-enable properti logging) 1 Kirim pesan error ke email 3 Kirim pesan error ke file
1 <?php 2 3 $nama_siswa = "Bedu B"; 4 $nilai_siswa = 54; 5 6 if ($nilai_siswa < 55 ) 7 { 8 error_log ($nama_siswa." dengan nilai ".$nilai_siswa." : Tidak Lulus",0); 9 } 10 ?>

Pesan error akan muncul pada log file system apache web server :
[Tue Sep 12 17:42:06 2006] [error] [client 127.0.0.1] Bedu B dengan nilai 54 : Tidak Lulus

www.nurulfikri.com 7874223 / 24

80

Program Reguler & Inhouse

PHP Advance

11.7.

Exception

11.7.1 Apa itu Exception ? Exception adalah fitur terbaru yang dimiliki PHP 5, yang mengadopsi dari bahasa pemrograman Java. Exception sendiri adalah sebuah object yang dapat melempar throw sebuah error. Jika sesuatu kesalahan (Exception) telah di tangkap catch, maka kesalahan selanjutnya dapat ditangani. Jika sebuah skrip PHP tidak menangkap exception yang dibuat, PHP akan menampilkan pesan error. Misalkan dibuat fungsi untuk membaca file dari sistem, dan jika file tidak ada ataupun terjadi kesalahan ketika mengakses file maka akan di lempar atau throw sebuah object exception.
1 <?php 2 3 function tampilkanBerita($filename) 4 { 5 $fp = @fopen($filename, "r"); 6 if (!is_resource($fp)) 7 { 8 throw new Exception("Tidak Bisa Baca File '$filename'"); 9 } 10 fclose($fp); 11 } 12 13 $file = "/tmp/data.txt"; 14 tampilkanBerita ($file); 15 ?>

Jika skrip dijalankan akan tampil error seperti ini :

Gambar 11.6 : Exception yang tidak ditangkap

Terlihat pada Gambar 11.6, akan menampilkan pesan error karena skrip pada fungsi tampilBerita() akan melempar exception ketika terjadi kesalahan dalam membaca file.

www.nurulfikri.com 7874223 / 24

81

Program Reguler & Inhouse 11.7.2 Try Catch Sebuah exception bisa ditangkap dengan perintah sebagai berikut :
1 2 3 4 5 6 7 try { // blok statement }catch (ObjectExcepiton e) { // lakukan sesuatu jika error }

PHP Advance

Pada skrip sebelumnya kita bisa tampilkan pesan error yang sederhana dengan menangkap exception yang terjadi :
1 <?php 2 3 function tampilkanBerita($filename) 4 { 5 $fp = @fopen($filename, "r"); 6 if (!is_resource($fp)) 7 { 8 throw new Exception("Tidak Bisa Baca File '$filename'"); 9 } 10 fclose($fp); 11 } 12 13 $file = "/tmp/data.txt"; 14 try 15 { 16 tampilkanBerita ($file); 17 }catch (Exception $e) 18 { 19 print "Ada masalah dalam tampilkan berita"; 20 } 21 ?>

11.7.3 Extends Exception Programmer juga dapat mendefinisikan exception agar dalam program yang dibuat bisa dideteksi jenis exception yang terjadi.
1 <?php 2 3 class FileNotFoundException extends Exception{} 4 class UnReadFileException extends Exception{} 5 6 function tampilkanBerita($filename) 7 { 8 $fp = @fopen($filename, "r"); 9 // check apakah file ada 10 if (!file_exists($fp))

www.nurulfikri.com 7874223 / 24

82

Program Reguler & Inhouse

PHP Advance

11 { 12 throw new FileNotFoundException("File Tidak Ada"); 13 } 14 // check apakah file bisa dibaca 15 if (!is_readable($fp)) 16 { 17 throw new UnReadFileException("File Tidak Bisa Dibaca"); 18 } 19 20 fclose($fp); 21 } 22 23 $file = "/tmp/data.txt"; 24 try 25 { 26 tampilkanBerita ($file); 27 }catch (FileNotFoundException $e) 28 { 29 echo "Kesalahan Tampilkan Berita : ".$e->getMessage(); 30 }catch (UnReadFileException $e) 31 { 32 echo "Kesalahan Tampilkan Berita : ".$e->getMessage(); 33 } 34 ?>

www.nurulfikri.com 7874223 / 24

83

Program Reguler & Inhouse

PHP Advance

Daftar Pustaka
Andi Gutmans, Stig Saether Bakken, Derick Rethans. PHP 5 Power Programming. Indianapolis. PRENTICE HALL, 2004 http://php.net http://php.pear.net
http://www.webstyleguide.com

www.nurulfikri.com 7874223 / 24

84

Anda mungkin juga menyukai