Anda di halaman 1dari 117

PHP Workshop

Intellisys Tripratama - 2006


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

$integer = 4;
$float = 4.2;
$total = $integer * $float;
echo "$integer * $float = $total";

// 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).'&nbsp;';
$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).'&nbsp;';
$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


$grades = array("Homer" => 20, "Marge" => 80,
"Lisa" => 100, "Bart" => 0, "Maggie" => 50);

print $grades["Homer"];
print $grades["Bart"];


Looping dalam Arrays
Daripada mengakses value satu per satu, mengapa tidak
sekaligus mengakses semua value yang ada dengan looping?

foreach($array as $key=>$value);

$grades = array("Homer" => 20, "Marge" => 80, "Lisa" =>100, "Bart" =>
0, "Maggie" => 50);

// 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.

Hints:
$array = array("key"=>5);
foreach($array as $key => $value){
if($something > 4){ }
}

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 properties
echo $baby->name." weighs ".$baby->weight." units\n";
echo $brother->name." weighs ".$brother->weight." units\n";

// call eat()
$baby->eat(100);
$baby->eat(50);
$brother->eat(11);

// 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;

// constructor
function Bear() {
$this->age = 0;
$this->weight = 100;
$this->colour = "brown";
}

// define methods
}

?>
Lab: Constructor (Usage)
<?php

// 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 {

// constructor
function PolarBear() {
parent::Bear();
$this->colour = "white";
$this->weight = 600;
}

// 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

$joe = new GrizzlyBear;
$joe->name = "Joe Bear";
$joe->weight = 1000;
echo "Class: " . get_class($joe);
echo "Parent class: " . get_parent_class(get_class($joe));

// get class name
$className = get_class($joe);

// 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
?>

<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
Country: <input type="text" name="country">
National animal: <input type="text" name="animal">
<input type="submit" name="submit">
</form>

<?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: Cookie (Delete)
<?php

// delete cookie
setcookie("test123", NULL, mktime() -
3600);

?>

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.