9 Modul PHP Advance
9 Modul PHP Advance
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
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
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
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
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.
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
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.
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.
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.
www.nurulfikri.com 7874223 / 24
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
PHP Advance
www.nurulfikri.com 7874223 / 24
PHP Advance
www.nurulfikri.com 7874223 / 24
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>
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.
www.nurulfikri.com 7874223 / 24
PHP Advance
www.nurulfikri.com 7874223 / 24
PHP Advance
www.nurulfikri.com 7874223 / 24
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 ?>
www.nurulfikri.com 7874223 / 24
10
PHP Advance
Bab 2.
2.1. Tujuan
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
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
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];
2.2.2
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
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 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.
www.nurulfikri.com 7874223 / 24
14
PHP Advance
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
PHP Advance
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;
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;
www.nurulfikri.com 7874223 / 24
16
PHP Advance
Dilakukan perubahan pada variabel $val sebelum dicetak mengakibatkan perubahan pada variabel $val dan juga memberi juga perubahan pada variabel $num.
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.
www.nurulfikri.com 7874223 / 24
17
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
PHP Advance
Bab 3.
3.1. Tujuan:
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.
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
PHP Advance
www.nurulfikri.com 7874223 / 24
20
PHP Advance
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;
21
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.
public ; member object dengan akses public dapat diakses dari dalam maupun luar object, dengan menggunakan perintah
$nama_obj->member_public:
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
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.
23
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 ?>
www.nurulfikri.com 7874223 / 24
24
PHP Advance
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
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.
www.nurulfikri.com 7874223 / 24
26
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 ?>
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
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
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 }
www.nurulfikri.com 7874223 / 24
29
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
PHP Advance
3.13.
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
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
PHP Advance
3.15.
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
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
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
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
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
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 ?>
www.nurulfikri.com 7874223 / 24
38
PHP Advance
Bab 4.
4.1. Tujuan:
Mengerti penggunaan pustaka PDO Mampu membuat program yang terkoneksi ke database MySQL
www.nurulfikri.com 7874223 / 24
39
PHP Advance
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
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.
4.4.3
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
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
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);
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
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
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
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
PHP Advance
Bab 5.
5.1. Tujuan:
Transaksi Database
Mengerti konsep transaksi dalam database Mampu membuat program yang menggunakan transaksi pada database MySQL
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
PHP Advance
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 | | +----------+-------------+------+-----+---------+----------------+
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 :
www.nurulfikri.com 7874223 / 24
47
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 | +--------------+------+-----------+--------+------------+------------+------------+
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
PHP Advance
Bab 6.
6.1. Tujuan:
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
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
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
mysql> DROP PROCEDURE IF EXISTS prosedure_hitung_pegawai; Query OK, 0 rows affected (0.09 sec)
www.nurulfikri.com 7874223 / 24
50
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)
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
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
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
PHP Advance
Bab 7.
7.1. Tujuan:
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
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
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
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).
www.nurulfikri.com 7874223 / 24
54
PHP Advance
7.2.6
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
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 ?>
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
www.nurulfikri.com 7874223 / 24
56
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
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
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
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:
www.nurulfikri.com 7874223 / 24
58
PHP Advance
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
Menampilkan Form
8.3.3
Menambahkan Elemen Form Berikut kode program untuk menambahkan elemen-elemen form
www.nurulfikri.com 7874223 / 24
59
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 ?>
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 : ', ' '); 5 6 $buttons[]=&HTML_QuickForm::createElement('submit', 'proses', 'Simpan'); 7 $buttons[]=&HTML_QuickForm::createElement('submit', 'proses', 'Batal'); 8 $form->addGroup($buttons, null, null, ' '); 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
60
PHP Advance
8.3.6
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 ?>
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
PHP Advance
www.nurulfikri.com 7874223 / 24
62
PHP Advance
Bab 9.
9.1. Tujuan:
Paging
Mengerti penggunaan paging data
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
PHP Advance
www.nurulfikri.com 7874223 / 24
64
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
PHP Advance
Bab 10.
10.1.
Tujuan:
10.2.
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
www.nurulfikri.com 7874223 / 24
66
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 ?>
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
PHP Advance
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.
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
10.6.
Login Aplikasi
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
www.nurulfikri.com 7874223 / 24
70
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
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 ?>
www.nurulfikri.com 7874223 / 24
72
PHP Advance
11.2.
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
11.3.
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
www.nurulfikri.com 7874223 / 24
74
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
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
PHP Advance
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
PHP Advance
Jika skrip diatas dijalankan akan tampil pesan error sesuai dengan yang didefinisikan oleh user.
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
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
PHP Advance
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
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 ?>
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
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
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