Perkenalan Nama : Emilia Khonato Khouw Perusahaan : Intellisys Jabatan : Software Development Trainer Tugas : Trainer programming, khususnya .NET dan SQL Server. Apa pengalaman Anda dalam: HTML PHP Object Oriented Programming Bahasa lainnya Apa yang Anda harapkan dari course PHP ini? Fasilitas Class hours Building hours Restrooms Coffee breaks and Meals Phones Smoking Recycling Tujuan Workshop ini Tujuan Workshop ini sangat sederhana: mengajarkan Anda dasar-dasar penggunaan PHP termasuk cara instalasi dan konfigurasi, serta mengapa PHP sangat populer dalam pengembangan aplikasi Web saat ini. Saya tidak akan membuat asumsi apapun tentang pengetahuan Anda dalam PHP, selain bahwa Anda mengerti dasar-dasar HTML, dan juga memiliki selera humor yang baik. Workshop ini akan membahas baik PHP 4 maupun PHP 5, dengan highlight pada fitur-fitur baru PHP 5. Secara umum, metode yang digunakan pada PHP 4 dapat dijalankan seluruhnya pada PHP 5. Questions? Feel free to interrupt me! Apa itu PHP? PHP: Hypertext Preprocessor. Lokasi PHP engine terletak pada web server, biasanya sebagai Apache module, atau pun IIS. Biasa disebut LAMP (Linux Apache mySQL, PHP) atau WAMP (Windows Apache mySQL PHP) Adalah bahasa script yang menempel pada HTML. PHP (dan Apache + mySQL) adalah software opensource (gratis)! PHP memungkinkan Anda menambahkan logika pada HTML yang bodoh dan static! Mengapa PHP? Open Source. Tersedia gratis, tidak dipungut biaya sama sekali. Terbuka (dapat dimodifikasi).
Cross-platform. Bekerja di Linux, UNIX, Windows, dan Mac.
Server-independent. Dapat bekerja di Apache, MS IIS, dan web server lain.
Mendukung OOP dan procedural programming. Ok, tapi apakah PHP bisa diandalkan? Perusahaan berikut adalah partner Zend Technology, Inc. IBM Oracle SAP Sun Adobe MySQL Bila cukup baik bagi mereka Masalah Konfigurasi Dengan berbagai alasan, konfigurasi PHP secara manual dapat memusingkan Anda Oleh sebab itu tersedia banyak paket software yang dapat membantu Anda melakukan instalasi dan konfigurasi Apache + PHP + MySQL, baik untuk platform Windows maupun Linux. Contoh: [Easy]PHP - http://www.easyphp.org/ XXAMP - http://www.apachefriends.org/en/xampp- windows.html
Instalasi PHP dengan IIS (1 of 2) Tersedia installer CGI, namun biasanya sangat terbatas dan kurang flexible. Cara manual: Copy source PHP ke C:\PHP Copy php5ts.dll atau php4ts.dll ke C:\Windows Copy php.ini-dist ke C:\Windows dan rename menjadi php.ini Ubah beberapa baris berikut pada php.ini: doc_root = "c:\inetpub\wwwroot" extension_dir = "c:\php\ext" extension=php_mysql.dll Copy libmysql.dll ke C:\Windows (optional, lakukan bila terjadi masalah pada saat loading php_mysql.dll di IIS) Instalasi PHP dengan IIS (2 of 2) Buka Internet Information Service. Expand Web Sites sampai menemukan Default Web Site, klik kanan, pilih Properties. Pada tab ISAPI Filter, pilih Add:
Pada tab Home Directory, pilih Configuration, pilih Add:
Pada tab Documents, pilih Add:
Instalasi MySQL Instalasi dengan installer dapat dilakukan dengan mudah, cukup download installer dari official website MySQL. Setelah selesai instalasi, Configuration Wizard otomatis akan dijalankan. Tidak perlu melakukan perubahan pada pilihan konfigurasi yang ada. Cukup tambahkan password untuk root yang dapat Anda ingat. Jangan melupakan password root ini, karena Anda akan kehilangan akses ke MySQL apabila Anda melupakannya. Nice to have: mysql-administrator (Free) PHPMyAdmin (Free) Text Editor Walaupun sebenarnya Anda dapat melakukan coding PHP hanya dengan menggunakan Notepad, namun tidak ada salahnya Anda mencoba beberapa Text Editor berikut untuk memudahkan hidup Anda bersama PHP: ConTEXT (Free) PHPEdit (Free) RapidPHP (Not Free) EditPlus (Not Free) Macromedia Dreamweaver (Not Free) Microsoft FrontPage (Not Free) Mari kita mulai PHP menempel pada HTML PHP script dimulai dengan <?php dan diakhiri ?> File HTML yang ditempeli PHP diakhiri dengan .php (bukan .html) PHP code diproses oleh web server; hasilnya berupa HTML. HTML asli beserta HTML yang dibuat oleh PHP kemudian dikombinasikan dan dikirim oleh web server ke browser user. Lab: Installing PHP Install PHP & MySQL. Konfigurasi IIS supaya semua bekerja dengan baik. Install Text Editor favorit Anda. Lab: PHP pertama Anda Buatlah PHP pertama Anda. Buka text editor favorit Anda, dan ketiklah code berikut.
<html> <head><title>Exercise 1</title></head> <body> This is the plain HTML text<br /> <br /> <?php phpinfo(); ?> </body> </html> Statement dan Akhir Baris Statement dalam PHP adalah baris code yang dapat dieksekusi, yang biasanya berisi fungsi dan argumen. Perhatikan bahwa statement PHP yang terdapat di lab sebelumnya () diakhiri dengan titik koma (;). Semua statement dalam PHP diakhiri dengan ;
Output ke Browser Beberapa cara: print(); adalah fungsi yang akan mencetak isi dari argumen ke dalam layar. Ex. print("An argument isn't just contradiction."); Ex. print("<p>It can be.</p>"); echo bukanlah sebuah fungsi, melainkan berupa construct, jadi echo tidak membutuhkan tanda kurung (). Ex. echo "<p>No it can't. An argument is a connected series of statements intended to establish a proposition.</p>";
Lab: Output ke browser Code: <html> <head><title>PHP Lecture Ex. 1</title></head> <body> This is the plain HTML text<br /> <br /> <?php $today = date("M d, Y"); print("Today is $today.<br />\n"); ?> </body> </html> Final Output: <html> <head><title>PHP Lecture Ex. 1</title></head> <body> This is the plain HTML text<br /> <br /> Today is May 6, 2005<br /> </body> </html> Memberikan komentar pada Code Komentar berupa satu baris diawali dengan // Komentar berupa blok teks diawali dengan /* dan diakhiri dengan */
Contoh:
// This is a single line comment
/* This text block is a comment which includes this line. And this line too! */
Variable Apakah variable itu? Penampung data. Dapat berisi satu atau lebih karakter (baik huruf maupun angka). Variable harus diawali dengan tanda $ Dapat dimulai dengan huruf atau underscore ("_") tapi tidak dapat dimulai dengan angka. Nama variable tidak boleh mengandung spasi dan bersifat case sensitive! Variable memiliki scope lokal (akan dibahas pada topik selanjutnya) Hanya dapat diakses pada tingkat di mana mereka dibuat. Variable di dalam fungsi tidak tersedia di luar fungsi. Variable yang dibuat diluar fungsi tidak tersedia di dalam fungsi. Variable yang dibuat dalam fungsi tidak tersedia di dalam fungsi lainnya.
PHP Predefined Variable PHP memiliki sejumlah variable yang telah tersedia (predefined variables). Variable semacam ini selalu berupa huruf besar. $GLOBALS berisi nama dan nilai dari semua variable semacam ini. Buatlah sebuah file PHP bernama predefined.php dan isi dengan: <?php echo "<pre>"; print_r ($GLOBALS); echo "</pre>"; ?> Upload ke server dan lihat hasilnya di browser. Output dari print_r ($GLOBALS); Array ( [LC_PAPER] => en_US [LESSKEY] => /etc/.less [LC_ADDRESS] => en_US [KDE_MULTIHEAD] => false [HOSTNAME] => cob.uccs.edu [LC_MONETARY] => en_US [SHELL] => /bin/bash [XDM_MANAGED] => /var/run/xdmctl/xdmctl-:0,rsvd [HISTSIZE] => 1000 [LC_SOURCED] => 1
These "keys" can be accessed one at a time using the following command: echo $GLOBALS[HOSTNAME]; where "HOSTNAME" is the key name you want to access. Tipe Variable: Numeric Numeric Integer dan floating-point (double precision) Integer berupa bilangan bulat; dapat positif ataupun negatif, tapi bukan pecahan. Floating point numbers dapat mengekspresikan nilai pecahan (seperti desimal) Tidak seperti bahasa lainnya, Anda tidak perlu melakukan type cast terhadap variable numeric.
Tipe Variable: String String adalah variable yang berisi karakter (segala jenis kombinasi). Penugasan variable dilakukan dengan tanda kutip dua atau kutip satu. $name = 'Joe Blow'; $today = "6.22.05"; $year = "2005";
Tanda kutip di dalam kutip harus diberi backslash:
$greeting = "We'd like to say \"Welcome\"."; Tipe Variable: String (cont.) Tanda kutip dua dan kutip satu memiliki arti yang berbeda. Variable yang dibungkus kutip dua akan ditulis sebagai nilai variable tersebut; Variable dalam kutip satu tidak. <?php $him = "Joe Blow"; $her = "Jane Doe"; echo "Welcome $him and $her"; echo "<br>"; echo 'Welcome $him and $her'; ?>
PHP juga memungkinkan Anda untuk menambahkan string dengan operator string concatenation, yang dilambangkan dengan titik (.) Lab: Numeric Buat script dengan nama numbers.php, upload, dan lihat: <?php
// this... $a = 5; $a = $a + 10; // ... is the same as this $a = 5; $a += 10;
?> Perhatikan bahwa $total telah di-cast ke float secara otomatis karena nilainya 16.8 Lab: String <?php $identity = 'James Bond'; $car = 'BMW'; // this would contain the string "James Bond drives a BMW" $sentence = "$identity drives a $car"; echo $sentence;
// set up some string variables $a = 'the'; $b = 'games'; $c = 'begin'; $d = 'now'; // combine them using the concatenation operator // this returns 'the games begin now<br />' $statement = $a.' '.$b.' '.$c.' '.$d.'<br />'; print $statement;
// and this returns 'begin the games now!' $command = $c.' '.$a.' '.$b.' '.$d.'!'; print $command; ?> Form Kita akan menggunakan form sebagai user interface utama. Sejak dulu, form selalu merupakan cara yang tercepat dan terbaik untuk menambahkan interaksi pada Web site Anda. Form memungkinkan Anda untuk menanyakan customer tentang pendapat mereka terhadap produk ataupun Web site Anda. Ketika user menekan tombol submit, data dalam form dikirim ke URL yang terdapat pada atribut action: <form method="POST" action="doSomethingCool.php"> Form Method Atribut method merupakan salah satu hal yang harus benar-benar dipertimbangkan. Ada dua method yang dapat kita gunakan: GET dan POST.
GET akan mengirimkan data dalam form ke server dalam bentuk URL.
POST akan mengirimkan data dalam form ke server secara "invisible"
Lab: Form GET Method <html><head><title>Form using GET</title></head> <body> <?php if (isset($_GET[FieldOne])){ extract($_GET); echo "Got $FieldOne and $FieldTwo"; } ?> <form method="GET" action="getexample.php"> <input type="text" name="FieldOne"> <input type="text" name="FieldTwo"> <input type="submit" name="Submit"> </form>
</body> </html>
Lab: Form POST Method <html><head><title>Form using POST</title></head> <body> <?php if (isset($_POST[FieldOne])){ extract($_POST); echo "Got $FieldOne and $FieldTwo"; } ?> <form method="POST" action="postexample.php"> <input type="text" name="FieldOne"> <input type="text" name="FieldTwo"> <input type="submit" name="Submit"> </form>
</body> </html> Globals Setting register_globals pada php.ini secara default bernilai off, oleh sebab itu pengambilan data harus melalui $_POST ataupun $_GET berdasarkan form method: <input type="text" name="email"> $_POST['email']; atau $_GET['email']; Bila register_globals di set on, maka variable yang dikirimkan oleh form dapat dibaca cukup dengan nama variable tersebut. <input type="text" name="email"> $email; Server lokal di Indonesia kebanyakan memiliki setting register_globals = On, jadi kita dapat memanfaatkan kemudahan dalam mengambil variable form. Salah satu faktor yang harus dipertimbangkan, metode ini mengandung resiko sekuriti karena user dapat mengenali nama variable dengan mudah lewat HTML source code pada form. PHP Operators Operator Description Example Result + Addition x=2, x+2 4 - Subtraction x=2, 5-x 3 * Multiplication x=4, x*5 20 / Division 15/5 5/2 3 2.5 % Modulus (division remainder) 5%2 10%8 10%2 1 2 0 ++ Increment x=5, x++ x=6 -- Decrement x=5, x-- x=4 PHP Comparison & Logic Operator Description Example Result < less-than 9 < 10 true > greater-than 9 > 10 false <= less-than-or-equal-to 9 <= 9 true >= greater-than-or-equal-to 9 >= 10 false == equality operator 9 == 9, "a" = "a" true != or <> not-equal-to 9 != 10, "a" <> "b" true === test both for equality and type '10' == 10 '10' === 10 true false && logical AND returns true if all conditions are true true && true true && false true false || logical OR returns true if any condition is true true || true true || false true true ! logical NOT returns true if the condition is false and vice-versa !true !false false true PHP Conditional Statements - IF if (first condition is true) { do this! } elseif (second condition is true) { do this! } elseif (third condition is true) { do this! } ... and so on ... else { do this! }
PHP Conditional Statements - Switch switch (decision-variable) { case first condition is true: do this! case second condition is true: do this! ... and so on... }
Beberapa keywords: break: digunakan untuk berhenti dan keluar dari switch(), dan kemudian berpindah ke baris selanjutnya setelah switch(). default: digunakan untuk mengeksekusi kumpulan statement apabila syarat switch tidak terpenuhi (seperti "case else"). Kesalahan yang biasa dibuat oleh newbie (pemula) adalah melupakan break pada akhir setiap block case(). Ingatlah bahwa bisa Anda melupakan break, PHP akan terus mengeksekusi code pada block case() selanjutnya.
Lab: IF <html> <head></head> <body> <?php // get form selection $day = $_GET['day']; // check value and select appropriate item if ($day == 1) { $special = 'Chicken in oyster sauce'; } elseif ($day == 2) { $special = 'French onion soup'; } elseif ($day == 3) { $special = 'Pork chops with mashed potatoes and green salad'; } else { $special = 'Fish and chips'; } ?> <h2>Today's special is:</h2> <?php echo $special; ?> </body> </html> Lab: Switch <html> <head></head> <body> <?php $day = $_GET['day']; switch ($day) { case 1: $special = 'Chicken in oyster sauce'; break; case 2: $special = 'French onion soup'; break; case 3: $special = 'Pork chops with mashed potatoes and green salad'; break; default: $special = 'Fish and chips'; break; } ?> <h2>Today's special is:</h2> <?php echo $special ?> </body> </html> PHP Looping Statements - While while (condition is true) { do this! }
Statement akan terus dieksekusi selama kondisi yang dievaluasi bernilai true. Pengecekan kondisi dimulai sejak pertama kali blok dieksekusi. PHP Looping Statements Do While do { do this! } while (condition is true)
Statement akan terus dieksekusi selama kondisi yang dievaluasi bernilai true. Pengecekan kondisi dimulai setelah satu kali blok dieksekusi. Jadi loop model ini akan dieksekusi minimum 1x. PHP Looping Statements - For for (initial value of counter; condition; new value of counter) { do this! } Bila Anda sudah mengetahui berapa kali jumlah eksekusi yang Anda inginkan, gunakanlah For. "counter" adalah variable PHP yang di-inisialisasi dengan nilai numerik, dan mencatat berapa kali loop telah dieksekusi. Sebelum tiap eksekusi, "condition" akan diuji. Bila hasilnya true, maka loop akan dieksekusi sekali lagi dan counter akan bertambah; Bila hasilnya false, loop akan berhenti dan baris berikut setelah blok for() akan dieksekusi. Lab: While <html> <head></head> <body>
<?php
// set variables from form input $upperLimit = $_POST['limit']; $lowerLimit = 1; // keep printing squares until lower limit = upper limit while ($lowerLimit <= $upperLimit) { echo ($lowerLimit * $lowerLimit).' '; $lowerLimit++; } // print end marker echo 'END';
?>
</body> </html>
Lab: Do While <html> <head></head> <body>
<?php
// set variables from form input $upperLimit = $_POST['limit']; $lowerLimit = 1; // keep printing squares until lower limit = upper limit do { echo ($lowerLimit * $lowerLimit).' '; $lowerLimit++; } while ($lowerLimit <= $upperLimit); // print end marker echo ' END';
?>
</body> </html>
Lab: For <html> <head> <basefont face="Arial"> </head> <body>
<?php
// define the number $number = 13; // use a for loop to calculate tables for that number for ($x = 1; $x <= 10; $x++) { echo "$number x $x = ".($number * $x)."<br />"; }
?>
</body> </html> Lab: Conditional & Looping Kombinasikan semua yang telah Anda pelajari untuk membuat script: Variable: firstname, lastname, favnum (favorite number) antara 1-20 Bila favorite number lebih dari 20 maka cetak "My favorite number is greater than 20"; Cetak semua angka dari 0 sampai favorite number Anda. Apa itu Array? Array adalah variable kompleks yang memungkinkan Anda untuk menyimpan beberapa value sekaligus ke dalam satu variable. (yang sangat berguna bila Anda ingin menyimpan dan menampilkan informasi yang saling berhubungan). Dua macam: Indexed dan Associative Indexed keys dimulai dari 0 dan seterusnya. Associative arrays menggunakan string sebagai keys.
$colors = array("red", "green", "blue", "purple", "pink"); Indexed Keys Karena array memiliki keys yang spesifik, kita dapat menggunakan index untuk mengakses nilainya dengan []
// Single colors will just print $color = "red"; print $color;
// Arrays need to be indexed using []'s. Which colors will print? $colors = array("red", "green", "blue", "purple", "pink"); print $colors[0]; print $colors[2];
Associative Arrays Bagaimana bila kita ingin membuat keys kita sendiri? Caranya: key => value
// Prints out all the names and grades foreach($grades as $key => $value){ print $key . " has a score of " . $value . "<br/>"; }
// Same thing as above, notice we can call it whatever we want foreach($grades as $name => $grade){ print $name . " has a score of " . $grade . "<br/>"; }
Array Push dan Pull Anda dapat menambahkan elemen terakhir array dengan fungsi array_push() Dan Anda dapat membuang elemen terakhir array dengan fungsi array_pop() yang memiliki nama cukup aneh.. Bila Anda ingin membuang elemen di awal array (seperti pop), gunakan fungsi array_shift() Dan fungsi array_unshift() akan menangani penambahan elemen di awal array. Fungsi Array lainnya Fungsi explode() memisahkan string menjadi elemen-elemen array berdasarkan pembatas (delimiter) yang didefinisikan user. Sebaliknya, Anda dapat menggunakan fungsi implode(), yang menggabungkan semua elemen array ke dalam sebuah string dengan pembatas (delimiter) yang didefinisikan user. Fungsi sort() dan rsort() dapat digunakan untuk mengurutkan isi array secara alfabet ataupun numerik, secara ascending maupun descending. Fungsi sizeof() mengembalikan ukuran (baca: jumlah elemen dalam) array. Bila Anda menggunakan associative array, fungsi array_keys() dan array_values() akan sangat berguna bagi Anda untuk mendapatkan daftar seluruh keys dan values yang ada di dalam array. Lab: Array (1 of 2) Buatlah lima orang siswa dengan nilai antara 0 sampai 100. Tampilkan siswa yang memiliki nilai lebih dari 80.
Lab: Array (2 of 2) Modifikasi lab sebelumnya untuk mengimplementasikan fungsi berikut: array_push() & array_pop() array_shift() & array_unshift() sort() & rsort() sizeof() array_keys() & array_values() Buatlah array baru untuk mengeksplorasi fungsi berikut: explode() implode() File Operations Di bagian ini, kita akan mempelajari operasi utama pada text file external, yaitu membuka (shock!), membaca isi file (shriek!), dan (horror of horrors!) menulis data ke dalamnya.
Saya akan mulai dengan operasi yang paling sederhana: membuka file dan membaca isinya. Mari berasumsi bahwa Anda memiliki text file bernama baca.txt pada folder php Anda, dan saat ini Anda ingin membaca isi file tersebut ke dalam script PHP.
Untuk itu, ada tiga langkah yang harus dikerjakan: Buka file, dan berikan sebuah file handle. Lewat handle tersebut, ambil isi file ke dalam variable PHP. Tutup file. Mengecek file - file_exists() <?php // check if file exists // display appropriate message if (file_exists($_POST['file'])) { echo 'File exists!'; } else { echo 'File does not exist!'; } } ?>
Salah satu fungsi yang paling sering digunakan untuk mengecek file adalah file_exists(). file_exists() akan mengembalikan true apabila file yang dimaksud ditemukan. Membaca Text File fread() <?php
/* Three different modes are available for use with the fopen() function. Here's the list: 'r' - opens a file in read mode 'w' - opens a file in write mode, destroying existing file contents 'a' - opens a file in append mode, preserving existing file contents */
// set file to read $file = 'baca.txt'; // open file $fh = fopen($file, 'r') or die('Could not open file!'); // read file contents $data = fread($fh, filesize($file)) or die('Could not read file!'); // close file fclose($fh); // print file contents echo $data; ?> Membaca Text File file() <?php // set file to read $file = 'baca.txt'; // read file into array $data = file($file) or die('Could not read file!'); // loop through array and print each line foreach ($data as $line) { echo $line; echo "<br>"; } ?>
Cara lain untuk membaca data dari file adalah dengan fungsi file() yang sangat keren. Fungsi file() membaca seluruh isi file ke dalam array (ingat makhluk yang bernama array?) cukup dengan satu baris code. Masing-masing elemen array berisi satu baris dari isi file. Untuk menampilkan seluruh isi file, lakukan loop foreach() untuk tiap elemen array dan cetak elemen tersebut. Membaca Text File file_get_contents() <?php // new in PHP 4.3.0 and PHP 5.0
// set file to read $file = 'baca.txt'; // read file into string $data = file_get_contents($file) or die('Could not read file!'); // print contents echo $data;
?>
Tidak butuh data dalam bentuk array? Coba lah fungsi file_get_contents(), perintah baru di PHP 4.3.0 dan PHP 5.0, yang membaca seluruh isi file ke dalam sebuah string. Terlalu mudah? Saya biasa menggunakan fungsi ini dibanding harus menulis tiga baris code fopen(), fread(), dan fclose(). Kemalasan mengalahkan segalanya
Menulis Text File fwrite() <?php /* Three different modes are available for use with the fopen() function. Here's the list: 'r' - opens a file in read mode 'w' - opens a file in write mode, destroying existing file contents 'a' - opens a file in append mode, preserving existing file contents */ // set file to write $file = 'tulis.txt'; // open file $fh = fopen($file, 'a') or die('Could not open file!'); // write to file fwrite($fh, "test aja!\t tab berikut") or die('Could not write to file'); // close file fclose($fh); ?> Langkah untuk menulis file sangat mirip dengan langkah untuk membaca file. Hanya ada dua perbedaan: fopen() dengan 'w' atau 'a', dan menggunakan fwrite() bukan fread(). Menulis Text File file_put_contents() <?php
// set file to write $filename = 'tulis.txt'; // write to file file_put_contents($filename, "tulis lagi", FILE_APPEND) or die('Could not write to file');
?>
Bila saya sudah memanjakan Anda dengan menunjukkan fungsi yang membaca dengan cukup satu baris, maka fungsi file_put_contents(), baru di PHP 5.0, dapat mengambil string dan menuliskannya ke file dengan satu baris code. Attribut FILE_APPEND bersifat optional. Ingatlah bahwa direktori dan file yang akan ditulis dari PHP harus sudah ada sebelum penulisan. Melupakan langkah ini seringkali menyebabkan error pada script. Import files include() & require() Perbedaan antara include() dan require() : require() akan mengembalikan fatal error apabila file tidak ditemukan dan proses selanjutnya akan terhenti. include() hanya akan mengembalikan warning dan kemudian terus menjalankan proses script selanjutnya. PHP juga memiliki fungsi require_once() dan include_once(), yang menjamin bahwa file yang telah dibaca tidak dibaca sekali lagi. Ini sangat berguna dalam situasi di mana Anda ingin menghilangkan pembacaan file yang sama berulang- ulang, entah untuk alasan performance, atau pun menghindari bentroknya nilai variable. Lab: File Operations Buatlah sebuah text file dummy untuk menampung beberapa baris text. Buatlah script untuk membaca text file tersebut dalam bentuk array dan tampilkan hasilnya per baris supaya format tetap seperti aslinya. Buatlah form dan script untuk menulis isi ke text file tersebut: Write: hapus isi text sebelumnya Append: tambahkan isi text ke dalam file Function Function adalah sekumpulan statement yang dapat melakukan tugas tertentu, dan dapat dipanggil, atau pun dieksekusi, dari bagian program Anda. Ada tiga alasan mengapa function akan memudahkan hidup Anda: user-defined function memungkinkan Anda untuk memisahkan code ke dalam sub bagian yang mudah diidentifikasi yang berarti lebih mudah dimengerti dan di-debug. Function membuat program Anda bersifat modular, yang berarti Anda dapat menuliskan sepotong code sekali saja dan menggunakan potongan tersebut berkali-kali dalam program Anda. Function menyederhanakan proses update ataupun perubahan, karena perubahan cukup diimplementasikan pada satu tempat (yaitu pada fungsi yang bersangkutan). Oleh sebab itu, function akan menghemat waktu dan uang! Function mengembalikan nilai Ada dua macam procedure, yaitu sub (tidak mengembalikan nilai), dan function (mengembalikan nilai). Namun PHP tidak membedakan keduanya. Bila Anda ingin mengembalikan nilai kepada pemanggil function, gunakanlah keyword return.
<?php // define a function function jumlah($a, $b) { // return value return ($a + $b); } // print the return value after formatting it print "2 + 3 = " . jumlah(2,3); ?> Function tidak mengembalikan nilai <?php
// define a function function changeCase($str, $flag) { /* check the flag variable and branch the code */ switch($flag) { case 'U': print strtoupper($str)."<br />"; break; case 'L': print strtolower($str)."<br />"; break; default: print $str."<br />"; break; } }
// call the function changeCase("The cow jumped over the moon", "U"); changeCase("Hello Sam", "L");
?> Function Default Value Dengan default value, kita dapat melakukan pemanggilan function walaupun parameter function tidak lengkap.
<?php // define a function function introduce($name="John Doe", $place="London") { print "Hello, I am $name from $place"; } // call function introduce("Moonface"); ?> Shrinking Argument List Dengan built-in function berikut, Anda dapat mengekstrak semua argumen yang dilemparkan dari pemanggil function ke function tersebut ke dalam bentuk array dengan mudah. <?php function someFunc() { // get the arguments $args = func_get_args(); $num = func_num_args(); print "total args: " . $num . "<br>"; print "You sent me the following arguments:"; foreach ($args as $arg) { print " $arg "; } print "<br /><br />"; } // call a function with different arguments someFunc("red", "green", "blue"); someFunc(123, "test"); ?> Lab: Functions Buatlah sebuah fungsi untuk mengembalikan nilai penjumlahan lima parameter dengan default value 0 supaya bila user tidak memberikan value, perhitungan tetap dapat dilakukan. Tambahkan func_get_args() untuk menampilkan seluruh argumen yang dilemparkan kepada function tersebut.
Variable Scope <?php
$today = "Monday";
function getDay1() { $today = "Tuesday"; print "It is $today inside the function<br />"; }
function getDay2() { global $today; print "It is $today inside the function<br />"; $today = "Saturday"; }
function getDay3() { print "It is $today inside the function<br />"; }
getDay1(); getDay2(); getDay3();
print "<br><br>"; print "It is $today outside the function";
?> Variable Reference Type Apa perbedaan "passing by reference" dan "passing by value"? Sejauh ini, semua contoh yang telah dibahas adalah jenis "passing by value", tapi PHP juga memungkinkan Anda untuk menggunakan "passing by reference".
<?php $today = "Saturday";
function setDay(&$day) { $day = "Tuesday"; print "It is $day inside the function<br />"; }
setDay($today);
print "It is $today outside the function"; ?> Lab: Variable Scope Buatlah contoh fungsi yang mengakses variable local. Buatlah contoh fungsi yang mengakses variable global dengan memanfaatkan keyword global. Buatlah contoh fungsi yang melakukan passing parameter by reference.
Object Oriented Programming Dalam PHP, sebuah class adalah sekumpulan statement yang melakukan tugas tertentu. Sebuah class umumnya berisi kumpulan variable dan fungsi, dan berperanan sebagai template untuk instance dari class tersebut.
Instance dari class disebut sebagai object. Setiap object memiliki karakteristik masing-masing, yaitu property (variable) dan method (function).
Setelah class didefinisikan, Anda dapat membuat sebanyak mungkin instance dari class yang Anda miliki. Masing-masing instance akan berupa object yang berdiri sendiri, dengan property dan method milik mereka sendiri. Oleh karena itu, object-object tersebut dapat digunakan tanpa harus bergantung pada object lainnya.
Class juga membantu menjaga coding Anda tetap modular Anda dapat mendefinisikan class dalam file yang terpisah, dan kemudian melakukan include file tersebut pada saat Anda ingin menggunakannya dan menyederhanakan perubahan coding, karena Anda hanya perlu mengedit satu file untuk mengubah fungsi atau menambahkan fungsi baru kedalam semua object yang ada. Lab: Class (PHP5) <?php // PHP 5 class Bear { // define properties public $name; public $weight; public $age; public $sex; public $colour; // define methods public function eat() { echo $this->name." is eating...\n"; } public function run() { echo $this->name." is running...\n"; } public function kill() { echo $this->name." is killing prey...\n"; } public function sleep() { echo $this->name." is sleeping...\n"; } } ?> Lab: Class (PHP4) <?php // PHP 4 class Bear { var $name; var $weight; var $age; var $sex; var $colour; function eat() { echo $this->name." is eating...\n"; } function run() { echo $this->name." is running...\n"; } function kill() { echo $this->name." is killing prey...\n"; } function sleep() { echo $this->name." is sleeping...\n"; } } ?> Lab: Object (1 of 2) <?php
// my first bear $daddy = new Bear; // give him a name $daddy->name = "Daddy Bear"; // how old is he $daddy->age = 8; // what sex is he $daddy->sex = "male"; // what colour is his coat $daddy->colour = "black"; // how much does he weigh $daddy->weight = 300;
// give daddy a wife $mommy = new Bear; $mommy->name = "Mommy Bear"; $mommy->age = 7; $mommy->sex = "female"; $mommy->colour = "black"; $mommy->weight = 310;
Lab: Object (2 of 2) // and a baby to complete the family $baby = new Bear; $baby->name = "Baby Bear"; $baby->age = 1; $baby->sex = "male"; $baby->colour = "black"; $baby->weight = 180;
// a nice evening in the Bear family // daddy kills prey and brings it home $daddy->kill();
// mommy eats it $mommy->eat(); // and so does baby $baby->eat();
// mommy sleeps $mommy->sleep(); // and so does daddy $daddy->sleep(); // baby eats some more $baby->eat(); ?> Keyword: This Bila Anda ingin mengakses fungsi atau variable dalam class, tersedia keyword $this pada PHP4 maupun PHP5. Contoh:
<?php // PHP 5 class Bear { public $name; public $weight;
public function eat($units) { echo $this->name." is eating ".$units." units of food...\n"; $this->weight += $units; } } ?>
Dalam kasus ini, $this mengindikasikan bahwa variable yang akan dimodifikasi berada dalam class, atau bila diterjemahkan: tambahkan argumen yang disediakan untuk eat() ke dalam variable $weight dalam object ini. $this menyediakan cara yang mudah untuk mengakses variable dan fungsi yang local dalam class ini. Lab: This <?php // create instance $baby = new Bear; $baby->name = "Baby Bear"; $baby->weight = 1000;
// now create another instance $brother = new Bear; $brother->name = "Brother Bear"; $brother->weight = 1000;
// retrieve new values echo $baby->name." now weighs ".$baby->weight." units\n"; echo $brother->name." now weighs ".$brother->weight." units\n"; ?> Constructor Bila Anda ingin mengeksekusi suatu fungsi pada setiap kali pembuatan object baru dari suatu class, Anda dapat menggunakan constructor yang dalam PHP5 berupa fungsi __construct(). Dalam PHP4, constructor berupa fungsi yang memiliki nama yang sama dengan nama class tersebut. Misalnya, Anda ingin semua beruang yang baru lahir otomatis berwarna coklat dan memiliki berat badan 100, maka Anda dapat menggunakan contructor seperti berikut: Lab: Constructor (PHP5) <?php // PHP 5
// class definition class Bear { // define properties public $name; public $weight; public $age; public $colour;
// constructor public function __construct() { $this->age = 0; $this->weight = 100; $this->colour = "brown"; }
// define methods }
?> Lab: Constructor (PHP4) <?php // PHP 4
// class definition class Bear { // define properties var $name; var $weight; var $age; var $colour;
// create instance $baby = new Bear; $baby->name = "Baby Bear"; echo $baby->name." is ".$baby->colour." and weighs ".$baby->weight." units at birth";
?>
Hasilnya: Baby Bear is brown and weighs 100 units at birth
Destructor Seperti halnya constructor, kita mengenal adanya destructor. Destructor adalah metode yang akan dieksekusi pada saat object dihancurkan dari memory, dan biasanya berhubungan dengan tugas pembersihan seperti menutup koneksi database atau file, menghancurkan session, dan lain-lain. Destructor hanya tersedia di PHP5, dan harus diberi nama __destruct(). Lab: Destructor (PHP5) <?php class Bear { public $name; public $weight; public $age; public $sex; public $colour; public function __construct() { $this->age = 0; $this->weight = 100; $this->colour = "brown"; } public function __destruct() { echo $this->name." is dead. He was ".$this->age." years old and ".$this->weight." units heavy. Rest in peace! \n"; } public function eat($units) { echo $this->name." is eating ".$units." units of food...\n"; $this->weight += $units; } public function run() { echo $this->name." is running...\n"; } public function kill() { echo $this->name." is killing prey...\n"; } } ?> Lab: Destructor (Usage) <?php // create instance of Bear() $daddy = new Bear; $daddy->name = "Daddy Bear"; $daddy->age = 10; $daddy->kill(); $daddy->eat(2000); $daddy->run(); $daddy->eat(100); ?>
Hasilnya: Daddy Bear is killing prey... Daddy Bear is eating 2000 units of food... Daddy Bear is running... Daddy Bear is eating 100 units of food... Daddy Bear is dead. He was 10 years old and 2200 units heavy. Rest in peace! Public, Private, Protected PHP 5 memperkenalkan 3 tingkat visibility: public, private dan protected. PHP 4 tidak mendukung visibility, maka seluruh property dan method dalam class PHP4 bersifat public. Secara default, property dan method dalam class bersifat public; ini memungkinkan script pemanggil untuk masuk ke dalam instance object dan memanipulasi secara langsung. Private berarti property atau method tersebut tidak dapat dimanipulasi ataupun dilihat dari luar class. Ini berguna untuk melindungi proses yang ada dalam class dari manipulasi yang tidak terpantau. Protected berarti property atau method tersebut tidak dapat dimanipulasi ataupun dilihat selain oleh class tersebut dan turunannya (akan dibahas lebih lanjut). Lab: Private <?php // PHP 5 class Bear { public $name; public $age; public $weight; private $_lastUnitsConsumed;
public function __construct() { $this->age = 0; $this->weight = 100; $this->_lastUnitsConsumed = 0; } public function eat($units) { echo $this->name." is eating ".$units." units of food...\n"; $this->weight += $units; $this->_lastUnitsConsumed = $units; } public function getLastMeal() { echo "Units consumed in last meal were ".$this->_lastUnitsConsumed."\n"; } } ?> Lab: Private (Usage) <?php
$bob = new Bear; $bob->name = "Bobby Bear"; $bob->eat(100); $bob->eat(200); echo $bob->getLastMeal(); // the next line will generate a fatal error $bob->_lastUnitsConsumed = 1000;
?> Inheritance atau Extends Dengan penurunan sebuah class (extends), kita dapat membuat class baru berdasarkan class yang sudah ada, dan menambahkan fungsi- fungsi baru ke dalam class baru tersebut tanpa mempengaruhi class yang sudah ada. Class yang sudah ada dapat dianggap sebagai orang tua (parent), dan class hasil extends disebut juga anak (child). Hasil dari extends berupa class, bukan sebuah object. Lab: Extends (PHP5) <?php class Bear { public $name; public $weight; public $age; public $sex; public $colour; public function __construct() { $this->age = 0; $this->weight = 100; } public function eat($units) { echo $this->name." is eating ".$units." units of food...\n"; $this->weight += $units; } public function run() { echo $this->name." is running...\n"; } public function kill() { echo $this->name." is killing prey...\n"; } public function sleep() { echo $this->name." is sleeping...\n"; } }
// extended class definition class PolarBear extends Bear { public function __construct() { parent::__construct(); $this->colour = "white"; $this->weight = 600; }
public function swim() { echo $this->name." is swimming.."; } } ?>
Lab: Extends (PHP4) <?php // PHP 4
// extended class definition class PolarBear extends Bear {
// define methods function swim() { echo $this->name." is swimming...\n"; } }
?> Lab: Extends (Usage) <?php
// create instance of Bear() $tom = new Bear; $tom->name = "Tommy Bear";
// create instance of PolarBear() $bob = new PolarBear; $bob->name = "Bobby Bear";
// $bob can use all the methods of Bear() and PolarBear() $bob->run(); $bob->kill(); $bob->swim();
// $tom can use all the methods of Bear() but not PolarBear() $tom->run(); $tom->kill(); $tom->swim();
?> Menghindari inheritance? Khusus di PHP5, kita dapat mengunci class supaya tidak dapat di extends, yaitu dengan keyword final.
<?php // PHP 5 final class Bear { // define properties // define methods }
// extended class definition // this will fail because Bear() cannot be extended class PolarBear extends Bear { // define methods }
// create instance of PolarBear() // this will fail because Bear() could not be extended $bob = new PolarBear; $bob->name = "Bobby Bear"; echo $bob->weight; ?> Informasi tentang class get_class(): nama class dari sebuah object get_parent_class(): nama parent class dari sebuah nama class/object get_class_vars(): seluruh property atau variable yang dimiliki oleh class get_class_methods(): seluruh method atau function yang dimiliki oleh class get_object_vars(): seluruh property beserta nilainya dari object tertentu. Catatan: tidak ada get_object_methods() Lab: Informasi Class <?php // PHP 5 class Bear { public $name; public $weight; public function __construct() { } public function eat() { } public function run() { } public function sleep() { } }
// derived class class GrizzlyBear extends Bear { public function kill() { } } ?> Lab: Informasi Class (Usage) <?php
// get class properties echo "Class properties:\n"; print_r(get_class_vars($className));
// get class methods echo "\nClass methods:\n"; print_r(get_class_methods($className));
// get this instance's properties echo "\nInstance properties:\n"; print_r(get_object_vars($joe));
?> Koneksi ke Database MySQL Buatlah database berikut:
CREATE DATABASE testdb; CREATE TABLE `symbols` ( `id` int(11) NOT NULL auto_increment, `country` varchar(255) NOT NULL default '', `animal` varchar(255) NOT NULL default '', PRIMARY KEY (`id`) ) TYPE=MyISAM;
INSERT INTO `symbols` VALUES (1, 'America', 'eagle'); INSERT INTO `symbols` VALUES (2, 'China', 'dragon'); INSERT INTO `symbols` VALUES (3, 'England', 'lion'); INSERT INTO `symbols` VALUES (4, 'India', 'tiger'); INSERT INTO `symbols` VALUES (5, 'Australia', 'kangaroo'); INSERT INTO `symbols` VALUES (6, 'Norway', 'elk'); Syntax untuk akses MySQL open connection $connection = mysql_connect($host, $user, $pass) or die ("Unable to connect!"); select database mysql_select_db($db) or die ("Unable to select database!"); create query $query = "SELECT * FROM symbols"; execute query $result = mysql_query($query) or die ("Error in query: $query. ".mysql_error()); see if any rows were returned if (mysql_num_rows($result) > 0) fetch rows (ada beberapa metode, akan dijelaskan di slide berikutnya) while($row = mysql_fetch_row($result)) while(list($id, $country, $animal) = mysql_fetch_row($result)) while($row = mysql_fetch_assoc($result)) while($row = mysql_fetch_object($result)) free result set memory mysql_free_result($result); close connection mysql_close($connection); check number of affected rows mysql_affected_rows() Lab 1: mysql_fetch_row() <?php
// set database server access variables: $host = "localhost"; $user = "test"; $pass = "test"; $db = "testdb";
// open connection $connection = mysql_connect($host, $user, $pass) or die ("Unable to connect!");
// select database mysql_select_db($db) or die ("Unable to select database!");
// create query $query = "SELECT * FROM symbols";
// execute query $result = mysql_query($query) or die ("Error in query: $query. ".mysql_error());
// see if any rows were returned if (mysql_num_rows($result) > 0) { echo "<table cellpadding=10 border=1>"; while($row = mysql_fetch_row($result)) { echo "<tr>"; echo "<td>".$row[0]."</td>"; echo "<td>".$row[1]."</td>"; echo "<td>".$row[2]."</td>"; echo "</tr>"; } echo "</table>"; } else { echo "No rows found!"; } mysql_free_result($result); mysql_close($connection); ?> </body> </html>
Lab 2: list() dan mysql_fetch_row() if (mysql_num_rows($result) > 0) { // yes // print them one after another echo "<table cellpadding=10 border=1>"; while(list($id, $country, $animal) = mysql_fetch_row($result)) { echo "<tr>"; echo "<td>$id</td>"; echo "<td>$country</td>"; echo "<td>$animal</td>"; echo "</tr>"; } echo "</table>"; } else { // no // print status message echo "No rows found!"; }
Lab 3: mysql_fetch_assoc() if (mysql_num_rows($result) > 0) { // yes // print them one after another echo "<table cellpadding=10 border=1>"; while($row = mysql_fetch_assoc($result)) { echo "<tr>"; echo "<td>".$row['id']."</td>"; echo "<td>".$row['country']."</td>"; echo "<td>".$row['animal']."</td>"; echo "</tr>"; } echo "</table>"; } else { // no // print status message echo "No rows found!"; }
Lab 4: mysql_fetch_object() if (mysql_num_rows($result) > 0) { // yes // print them one after another echo "<table cellpadding=10 border=1>"; while($row = mysql_fetch_object($result)) { echo "<tr>"; echo "<td>".$row->id."</td>"; echo "<td>".$row->country."</td>"; echo "<td>".$row->animal."</td>"; echo "</tr>"; } echo "</table>"; } else { // no // print status message echo "No rows found!"; } Lab 5: Insert Data <html> <head> <basefont face="Arial"> </head> <body>
<?php
if (!isset($_POST['submit'])) { // form not submitted ?>
<?php } else { // form submitted // set server access variables $host = "localhost"; $user = "test"; $pass = "test"; $db = "testdb";
// get form input // check to make sure it's all there // escape input values for greater safety $country = empty($_POST['country']) ? die ("ERROR: Enter a country") : mysql_escape_string($_POST['country']); $animal = empty($_POST['animal']) ? die ("ERROR: Enter an animal") : mysql_escape_string($_POST['animal']); $connection = mysql_connect($host, $user, $pass) or die ("Unable to connect!"); mysql_select_db($db) or die ("Unable to select database!"); $query = "INSERT INTO symbols (country, animal) VALUES ('$country', '$animal')"; $result = mysql_query($query) or die ("Error in query: $query. ".mysql_error());
// print message with ID of inserted record echo "New record inserted with ID ".mysql_insert_id(); mysql_close($connection); } ?> </body> </html>
Lab 6: Delete Data <html> <body> <?php // set server access variables $host = "localhost"; $user = "root"; $pass = "password"; $db = "testdb"; if (isset($_GET['id'])) { $connection = mysql_connect($host, $user, $pass) or die ("Unable to connect!"); mysql_select_db($db) or die ("Unable to select database!"); $query = "DELETE FROM symbols WHERE id = ".$_GET['id']; $result = mysql_query($query) or die ("Error in query: $query. ".mysql_error() . "<br />"); echo "Record deleted with ID ". $_GET['id'] . "<br />"; mysql_close($connection); }
$connection = mysql_connect($host, $user, $pass) or die ("Unable to connect!"); mysql_select_db($db) or die ("Unable to select database!"); $query = "SELECT * FROM symbols"; $result = mysql_query($query) or die ("Error in query: $query. ".mysql_error()); if (mysql_num_rows($result) > 0) { echo "<table cellpadding=10 border=1>"; while($row = mysql_fetch_object($result)) { echo "<tr>"; echo "<td>".$row->id."</td>"; echo "<td>".$row->country."</td>"; echo "<td>".$row->animal."</td>"; echo "<td><a href=".$_SERVER['PHP_SELF']."?id=".$row->id.">Delete</a></td>"; echo "</tr>"; } echo "</table>"; } else { echo "No rows found!"; } mysql_free_result($result); mysql_close($connection); ?> </body> </html> Lab 7: Error Handling <?php
$connection = mysql_connect("localhost", "test", "test") or die("Invalid server or user");
mysql_select_db("testdb", $connection) or die("Invalid database"); $query = "SELECT FROM symbols"; $result = mysql_query($query,$connection);
// look for errors and print if(!$result) { $error_number = mysql_errno(); $error_msg = mysql_error(); echo "MySQL error $error_number: $error_msg"; }
mysql_close($connection); ?> State Management Cookie: memungkinkan Web site untuk menyimpan informasi tentang client ke dalam system client itu sendiri, dan mengakses informasi tersebut apabila diperlukan. Session: menyimpan informasi client di dalam server selama kunjungan client, dan dibuang setelah kunjungan berakhir. Session bekerja dengan cara mengasosiasikan masing-masing session dengan session ID yang di-generate oleh PHP. Lab: Session (Intro) <?php
// initialize a session session_start();
// increment a session counter $_SESSION['counter']++;
// print value echo "You have viewed this page " . $_SESSION['counter'] . " times";
// print session ID echo "I'm tracking you with session ID " . session_id();
?>
Lab: Session (Remember Me) <?php session_start(); ?> <html> <body> <?php if (!isset($_SESSION['name']) && !isset($_POST['name'])) { // if no data, print the form ?> <form action="<?php echo $_SERVER['PHP_SELF']?>" method="post"> <input type="text" name="name"> <input type="submit" name="submit" value="Enter your name"> </form> <?php } else if (!isset($_SESSION['name']) && isset($_POST['name'])) { // if a session does not exist but the form has been submitted // check to see if the form has all required values // create a new session if (!empty($_POST['name'])) { $_SESSION['name'] = $_POST['name']; $_SESSION['start'] = time(); echo "Welcome, " . $_POST['name'] . ". A new session has been activated for you. Click <a href=" . $_SERVER['PHP_SELF'] . ">here</a> to refresh the page."; } else { echo "ERROR: Please enter your name!"; } } else if (isset($_SESSION['name'])) { // if a previous session exists // calculate elapsed time since session start and now echo "Welcome back, " . $_SESSION['name'] . ". This session was activated " . round((time() - $_SESSION['start']) / 60) . " minute(s) ago. Click <a href=" . $_SERVER['PHP_SELF'] . ">here</a> to refresh the page."; } ?> </body> </html>
Lab: Session (Logout/Destroy) <?php
// initialize a session session_start();
// then destroy it session_destroy();
header("Location: session1.php"); exit; ?> Lab: Cookie (Set) <?php session_start(); if (!isset($_COOKIE['test123'])) { // if a cookie does not exist // set it setcookie("test123", "test", mktime()+86400); echo "This is your first visit here today."; } else { // if a cookie already exists echo "Nice to see you again, old friend!"; }
Lab: Login with Database Buatlah sebuah website kecil yang menggunakan cek login ke database dengan page berikut: Login page Beberapa page yang dilindungi supaya hanya bisa diakses setelah login Logout Buat dengan dua metode penyimpanan info: Session Cookies (Remember Me) supaya tidak perlu login ulang pada kunjungan berikutnya.