Building Web Application With PHP & MySQL (IXBWA) PDF
Building Web Application With PHP & MySQL (IXBWA) PDF
1
Elemen Dasar PHP
Pemrograman PHP
Nama PHP berasal dari Personal Home Page namun diganti menjadi akronim
rekursif yaitu PHP Hypertext Preprocessor.
PHP dibuat oleh Rasmus Lerdorf pada tahun 1995 dan merupakan software
gratis dengan lisensi bernama PHP License.
Program PHP bekerja mirip dengan prinsip markup language HTML dan
bahasa pemrograman lainnya yaitu terdapat tag pembuka dan tag penutup.
Program PHP diawali dengan tanda <?php dan diakhiri oleh tanda ?>.
Baris perintah PHP diakhiri dengan tanda titik-koma atau semicolon (;).
Perintah dasar yang ditandai sebagai awal mula mempelajari suatu bahasa
pemrograman adalah mencetak tulisan atau output. Pada PHP dapat
menggunakan perintah print atau echo untuk mencetak tulisan atau output.
<?php
print “Hello World”;
?>
<?php
echo “Hello Again”;
?>
Perbedaan echo dengan print adalah pada performa perintah tersebut. Echo
mempunyai performa eksekusi program yang lebih cepat dibanding print.
Sebuah file php mempunyai ekstension .php dan dapat berisi tidak hanya
program PHP saja namun dapat digabung dengan bahasa pemrograman lain
seperti HTML, CSS ataupun Javascript.
Oleh karena HTML, CSS dan Javascript bersifat Client Side, maka ekstension
harus tetap .php supaya semua perintah dapat dijalankan.
<!DOCTYPE html>
<html>
<head>
<title>Integration</title>
</head>
<body>
Full Name: <?php echo “John Smith”;?> <br>
Address: <?php echo “17th Avenue”;?> <br>
</body>
</html>
PHP juga dapat langsung menjalankan tag HTML pada sebuah perintah echo
atau print seperti contoh berikut:
Tanda kutip pada PHP digunakan untuk menandai tulisan atau string.
Terdapat dua cara untuk menggunakan kutip yaitu dengan single quote
(apostrophe ‘) atau double quote (“).
Perbedaan antara single quote dengan double quote adalah jika
menggunakan single quote tidak dapat menginterpretasikan semua simbol,
sedangkan double quote dapat menginterpretasikan semua simbol.
Single quote dapat digunakan untuk membuat penulisan skrip gabungan yang
lebih rumit misalnya menulis hyperlink HTML dengan PHP atau menulis
Javascript dengan PHP.
<?php
$a = “ABC”;
echo ‘Tulisan dari variabel a adalah $a<br>’;
echo “Tulisan dari variabel a adalah $a<br>”;
?>
Hasil:
Tulisan dari variabel a adalah $a
Tulisan dari variabel a adalah AAA
Tulisan yang dicetak pada baris pertama dengan single quote menunjukkan
bahwa simbol dollar tetap dicetak apa adanya, berbeda dengan double quote
yang dapat menginterpretasikan simbol dollar menjadi variabel. Penjelasan
mengenai variabel dijelaskan pada bagian berikutnya.
Penggunaan single quote biasanya jika terdapat gabungan skrip yang rumit
pada PHP misalnya menulis hyperlink HTML pada PHP atau menulis
Javascript pada PHP seperti dicontohkan berikut ini:
<?php
echo ‘<a href=”http://www.google.com”>Click Here</a>’;
?>
<?php
echo ‘
<script type="text/javascript">
setTimeout("location.href='profile.php'",5000);
</script>
‘;
?>
Penggunaan single quote dalam penulisan skrip yang rumit bertujuan untuk
menghilangkan kesalahan penggunaan escape characters seperti tanda
sama-dengan, kutip atau titik. Contoh kesalahan penulisan escape character
dengan double quote dapat dilihat pada contoh berikut:
<?php
echo “<a href=”http://www.google.com”>Click Here</a>”;
?>
Komentar
Komentar atau yang biasa disebut dengan remarks adalah tulisan yang tidak
dieksekusi oleh program dan biasanya digunakan sebagai petunjuk dari
sebuah blok program.
<?php
/*
Blok pemrograman ini hanya contoh cara membuat komentar.
Bagian ini menggunakan komentar yang lebih dari satu
baris.
Jangan lupa untuk menutup markup komentar ini.
*/
?>
Variabel
Penggunaan:
String : karakter, tulisan
Integer : bilangan bulat
Float : bilangan pecahan
Boolean : logika
Untuk mencetak variabel dapat menggunakan echo atau print. Berikut contoh
program untuk mencetak variabel:
<?php
//deklarasi variabel
$nama_lengkap = “Alfred Futterkiste”; //string
$honor = 1000000; //integer
$bonus = 0.5; //float
echo “Nama Lengkap: $nama_lengkap <br>”;
echo “Honor: Rp. $honor,- <br>”;
echo “Bonus: $bonus x Honor <br>”;
?>
Hasil:
Nama Lengkap: Alfred Futterkiste
Honor: Rp. 1000000,-
Bonus: 0.5 x Honor
Sintaks:
$honor = 1000000;
$honor_format = number_format($honor, 2, “.”, “,”);
echo “Honor = Rp. $honor_format <br>”;
Hasil:
Honor = Rp. 1.000.000,00
Ekspresi Aritmetika
$x = 4 + 5;
$y = 10 * 2;
* Perkalian
/ Pembagian
+ Penjumlahan
- Pengurangan
$x = 100;
$y = 50;
$rumus1 = $x * $y;
$z = 5;
$rumus2 = ($x + $y) * $z;
Jika $rumus1 dan $rumus2 dicetak maka hasilnya adalah 5000 dan 750.
$a = “123”;
$b = 10;
$penjumlahan = $a + $b;
Output dari $penjumlahan adalah 133. Variabel a meski bertipe string tapi
karena berisi angka semuanya maka dapat dikonversikan menjadi integer.
Tetapi jika terdapat alfabet atau bercampur alfanumerik di variabel tersebut,
PHP akan membaca nilai variabel tersebut menjadi 0.
$a = “a123”;
$b = 10;
$penjumlahan = $a + $b;
Variabel Superglobal
Selain print atau echo untuk mencetak variabel yang bersangkutan, dapat
juga dilakukan dengan menggunakan variabel $GLOBALS dengan cara
berikut:
echo $GLOBALS[‘nama_lengkap’];
echo $_SERVER[‘HTTP_USER_AGENT’];
//mencetak header dari browser yang sedang digunakan oleh client
$username_anda = $_GET[‘namaTextField’];
echo “Username anda: $username_anda <br>”;
$username_anda = $_POST[‘namaTextField’];
echo “Username anda: $username_anda <br>”;
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
$activeUser = $_COOKIE[‘myCookieName’];
$activeSession = $_SESSION[‘mySessionName’];
$requestCookie = $_REQUEST[‘myCookieName’];
$requestGet = $_REQUEST[‘namaTextField1’];
$requestPost = $_REQUEST[‘namaTextField2’];
2
Kendali Program
Alur program dapat dikendalikan dengan adanya kondisi dimana dari kondisi
tersebut menentukan langkah program berikutnya. Kondisi ini dinyatakan
dalam bentuk logika true atau false.
if ( kondisi ) {
perintahYangAkanDijalankan;
}
else {
perintahAlternatif;
}
if ( $a > $b ) {
echo “Nilai a lebih besar dari nilai b <br>”;
}
else {
echo “Nilai a lebih kecil dari nilai b <br>”;
}
$a = 10;
$b = 7;
Hasil dari program di atas adalah tulisan “Semua kondisi benar” karena kedua
kondisi yang diberikan menghasilkan true.
Apabila terdapat kondisi yang lebih dari dua dapat menggunakan teknik
Nested If yaitu if yang berkelanjutan dengan alur IF-ELSE IF-ELSE. Misalkan
pada contoh perintah if yang sebelumnya, jika kedua variabel bernilai sama
maka hasilnya tidak akan sesuai dengan yang diinginkan.
$a = 5;
$b = 5;
if ( $a > $b ) {
echo “Nilai a lebih besar dari nilai b <br>”;
}
else {
echo “Nilai a lebih kecil dari nilai b <br>”;
}
Hasil dari program di atas adalah Nilai a lebih kecil dari nilai b karena tidak
ditemukan kondisi lain yang lebih cocok. Program tersebut harus dimodifikasi
menggunakan teknik nested if.
<?php
$a = 5;
$b = 5;
if ( $a > $b ) {
echo “Nilai a lebih besar dari nilai b <br>”;
}
else if ( $a < $b ) {
echo “Nilai a lebih kecil dari nilai b <br>”;
}
else {
echo “Nilai a sama besar dengan nilai b <br>”;
}
?>
Hasilnya adalah Nilai a sama besar dengan nilai b karena sudah ada
kondisi yang lebih cocok. Apabila ingin menggunakan kondisi yang lebih
banyak lagi dapat memakai perintah Switch untuk penulisan yang lebih
mudah dimengerti.
Dalam kondisi tertentu terdapat perintah exit yang digunakan di dalam if untuk
langsung keluar dari program jika kondisi terpenuhi. Misalkan ada blok
program seperti berikut:
<?php
$a = 555;
$b = 5;
if ( $a > $b ) {
echo “Nilai a lebih besar dari nilai b <br>”;
exit;
}
else {
echo “Nilai a lebih kecil dari nilai b <br>”;
}
echo “Disini ada tulisan pada baris terakhir <br>”;
?>
Oleh karena kondisi if dari program tersebut sudah benar maka setelah
mencetak tulisan Nilai a lebih besar dari nilai b maka program akan
langsung keluar sehingga tulisan Disini ada tulisan pada baris terakhir tidak
akan dicetak.
Apabila ada output HTML setelah baris program di atas, maka tetap tidak
akan dijalankan oleh browser karena perintah exit sebelumnya.
Switch-Case
Cara kerja dari perintah switch mirip dengan if namun berbeda pada
penulisannya. Switch membutuhkan sebuah variabel untuk dijadikan acuan
untuk kondisi kemudian menyediakan jawaban-jawaban dari beberapa kondisi
yang telah dibuat.
Switch dapat dijadikan alternatif blok program jika kondisi yang dibutuhkan
lebih dari dua bahkan tiga untuk penyederhanaan penulisan.
switch ($namaVariabel) {
case ekspresi1 :
instruksi1;
break;
case ekspresi2 :
instruksi2;
break;
case ekspresi3 :
instruksi3;
break;
default:
instruksiTerakhir;
}
Setiap case harus menggunakan perintah break pada akhir instruksi yang
bertujuan untuk segera keluar dari blok program switch apabila kondisi sudah
terpenuhi. Jika break tidak digunakan maka meskipun kondisi sudah terpenuhi
perintah di bawahnya tetap akan dijalankan.
Default adalah perintah terakhir apabila tidak ada kondisi yang memenuhi
syarat.
Jika nilai siswa kurang dari 50 maka siswa dianggap tidak lulus.
Jika nilai siswa berada antara 50 sampai 70 maka siswa akan
mengulang ujian.
Jika nilai siswa 70 atau lebih maka siswa dianggap lulus.
Kondisi terakhir adalah nilai belum dimasukkan (default).
$nilai = 95;
switch ($nilai) {
case $nilai<50 :
echo “Gagal<br>”;
break;
case $nilai>=50 and $nilai<70 :
echo “Mengulang Ujian<br>”;
break;
case $nilai>70 :
echo “Lulus<br>”;
break;
default:
echo “Nilai belum terdaftar<br>”;
}
Pada blok program di atas menggunakan logika AND pada case kedua yaitu
menentukan apakah nilai siswa lebih besar sama dengan 50 dan lebih kecil
sama dengan 70 karena tidak adanya operator aritmetika untuk membuat
kondisi antara atau between.
Output dari blok pemrograman di atas yaitu Lulus karena nilai dari siswa
adalah 95.
$nilai = 95;
switch ($nilai) {
case $nilai<50 :
echo "Gagal<br>";
break;
case $nilai<=70 :
echo "Mengulang Ujian<br>";
break;
case $nilai>70 :
echo "Lulus<br>";
break;
default:
echo "Nilai belum terdaftar<br>";
}
$nilai = 95;
switch ($nilai) {
case $nilai<=70 :
echo "Mengulang Ujian<br>";
break;
case $nilai<50 :
echo "Gagal<br>";
break;
case $nilai>70 :
echo "Lulus<br>";
break;
default:
echo "Nilai belum terdaftar<br>";
}
While
Sintaks:
while (kondisi) {
instruksi1;
instruksi2;
}
Contoh penggunaan perintah while berikut ini adalah mencetak angka dari 1
sampai 10:
$x = 1;
while ($x <= 10) {
echo “Angka ke-$x <br>”;
$x++;
}
Output dari perintah di atas adalah mencetak angka 1 sampai dengan 10 dan
dibutuhkan sebuah perintah untuk menambahkan nilai $x. Pada contoh di
atas menggunakan $x++ yang merupakan incremental yaitu bertambah 1
setiap kali perintah tersebut dijalankan. Artinya setiap langkah/step dari
looping akan bertambah 1.
Incremental dapat diganti dengan deklarasi nilai baru untuk variabel $x yaitu
dengan perintah:
$x = $x + 1;
Dalam setiap loop dibutuhkan minimal sebuah instruksi yang nantinya akan
menyebabkan kondisi bisa terpenuhi menjadi true atau false. Jika tidak ada
maka looping tidak akan berhenti.
Do-While
Cara kerja dari loop Do-While mirip dengan While namun perbedaannya
adalah instruksi yang berada di dalam While hanya akan dijalankan apabila
kondisi terpenuhi sedangkan instruksi yang berada di dalam Do-While akan
dijalankan minimal 1 kali meski kondisi tidak sesuai. Dalam kata lain variabel
atau kondisi pada Do-While akan diperiksa belakangan setelah minimal 1 kali
eksekusi.
Sintaks:
do {
instruksi1;
instruksi2;
}
while (kondisi);
$x = 10;
do {
echo “Cetak angka $x <br>”;
$x--;
}
while ($x < 5);
Perintah echo untuk Cetak Angka akan dijalankan minimal satu kali meski
kondisinya sama sekali tidak sesuai.
For
Perintah for digunakan juga untuk loop namun perbedaannya dengan while
atau do while adalah pada deklarasi variabel.
Sintaks:
$x = 100;
for($x=1; $x<=10; $x++){
echo “For Loop Angka $x <br>”;
}
Output dari program di atas adalah mencetak angka dari 1 sampai 10.
Sebelum dimulainya for, terdapat baris perintah untuk deklarasi variabel $x
yaitu 100 tetapi ketika dimulainya for, nilai dari $x langsung berubah menjadi
1. Nilai $x akhir setelah for selesai loop adalah 11 karena sudah bertambah
dari hasil incremental.
3
Array
Array
Array adalah kumpulan skalar atau objek yang dapat diakses melalui indeks
yang dimulai dari 0 sampai dengan jumlah total elemen dikurangi 1 (n-1).
Variabel deret atau list adalah array yang dapat berisi elemen berupa
alfanumerik dan karakter.
$kota[0]=”Jakarta”;
$kota[1]=”Bogor”;
$kota[2]=”Depok”;
$kota[3]=”Tangerang”;
$kota[4]=”Bekasi”;
Elemen dari deret ini dapat diakses secara individual melalui indeks yang
dihitung dari kiri ke kanan dan dimulai dengan angka 0. Indeks dibungkus
dengan tanda kurung besar [ ].
Untuk mencetak array dapat menggunakan perintah print atau echo berikut
indeks dari yang bersangkutan:
Kota pertama dimulai dari indeks ke-0 dan seterusnya. Untuk mengetahui
indeks nya dapat menghitung dengan n-1. Hal ini dapat dibilang kurang
familiar untuk beberapa kalangan. Terdapat metode lain untuk inisialisasi
array dengan bentuk yang lebih sederhana daripada program di atas.
Inisialisasi Array
Fungsi array() dapat dijadikan metode inisialisasi array dalam bentuk yang
lebih sederhana dibanding sebelumnya.
$kota = array(“Jakarta”,”Bogor”,”Depok”,”Tangerang”,”Bekasi”);
Indeks tidak perlu ditulis dan otomatis elemen pertama akan mendapatkan
indeks 0. Apabila tetap ingin menuliskan indeks dapat melakukan cara seperti
contoh berikut:
$kota = array(0=>”Jakarta”,”Bogor”,”Depok”,”Tangerang”,”Bekasi”);
Selanjutnya Bogor hingga Bekasi akan berurutan hingga 5 dan indeks ke-0
akan dianggap kosong (null). Teknik ini dapat mempermudah pencetakan
elemen array dengan loop.
Terlebih dulu harus diketahui jumlah elemen yang ada pada array tersebut
dengan perintah count:
$kota = array(1=>”Jakarta”,”Bogor”,”Depok”,
”Tangerang”,”Bekasi”);
$jumlah = count($kota);
Hasil:
Array Asosiatif
Indeks dari array tidak harus berupa angka namun bisa juga berupa tipe lain
misalnya string. Teknik ini biasanya digunakan untuk array multidimensi.
Jika dibuat dengan metode inisialisasi maka sintaksnya akan berubah seperti
berikut:
Untuk menampilkan isi array satu persatu dapat melakukan cara seperti biasa
ketika mencetak array dengan indeks angka:
Perintah loop for tidak dapat mencetak array dengan indeks selain integer
sehingga harus diganti dengan perintah lain yaitu foreach yang mampu
mencetak indeks array berupa string:
Cara kerja dari foreach adalah menjadikan indeks string tersebut sebagai key
atau kunci dari indeks dan merujuk ke value dari array tersebut.
Berikut adalah skrip perulangan foreach untuk mencetak seluruh elemen array
$manajer:
Hasilnya adalah:
nama - John Smith
inisial - JS
divisi - Teknologi Informasi
Manfaat dari foreach dapat dilihat lebih optimal ketika mencetak elemen array
multidimensi yang lebih menyerupai tabel database. Skrip berikut adalah
contoh array multidimensi dengan metode penulisan yang menggunakan tab
supaya lebih mudah dibaca:
Penerapan array dengan elemen HTML yang paling umum digunakan adalah
mencetak combo box dengan sumber data dinamis sehingga tidak perlu
mengganti tag dan value pada HTML nya.
Berikut adalah tag HTML untuk membuat combo box dengan cara statis:
<select nama=”daftarKota”>
<option value=”Jakarta”>Jakarta</option>
<option value=”Bogor”>Bogor</option>
<option value=”Depok”>Depok</option>
<option value=”Tangerang”>Tangerang</option>
<option value=”Bekasi”>Bekasi</option>
</select>
Untuk membuat combo box tersebut dengan cara dinamis yaitu cukup hanya
satu baris tag option berikut value-nya yang nantinya akan dicetak berulang
dengan menggunakan loop while atau for.
Kesulitan yang dihadapi ketika penulisan skrip gabungan antara PHP dengan
HTML atau dengan Javascript adalah escape characters seperti tanda single
quote atau double quote. Oleh karena nantinya penulisan skrip <option
value=””> akan dibuat dalam skrip PHP maka diperlukan modifikasi pada
penulisannya. Tanda \” dapat dibuat untuk mengatasi kemungkinan kesalahan
penulisan escape characters.
Berikut adalah hasil akhir penggabungan antara HTML dan PHP untuk
membuat dynamic combo box:
<!DOCTYPE html>
<html>
<head>
<title>Dynamic Combo Box</title>
</head>
<body>
<h3>Dynamic Combo Box:</h3>
<select name=”daftarKota”>
<?php
$kota = array(1=>"Jakarta","Bogor","Depok",
"Tangerang","Bekasi");
$jumlah = count($kota);
for($x=1; $x<=$jumlah; $x++) {
echo "<option value=\"$kota[$x]\">$kota[$x]</option>";
}
?>
</select>
</body>
</html>
Penulisan skrip PHP bisa dimana saja pada bagian HTML, dapat berupa
sisipan blok pemrograman atau bahkan “memasukkan” HTML ke dalam
bagian loop atau kondisi sebuah blok program pada PHP.
<!DOCTYPE html>
<html>
<head>
<title>Dynamic Combo Box</title>
</head>
<body>
<h3>Dynamic Combo Box:</h3>
<select name=”daftarKota”>
<?php
$kota = array(1=>"Jakarta","Bogor","Depok",
"Tangerang","Bekasi");
$x = 1;
$jumlah = count($kota);
while( $x <= $jumlah ){
echo "<option value=\"$kota[$x]\">$kota[$x]</option>";
$x++;
}
?>
</select>
</body>
</html>
Data yang ingin ditampilkan pada combo box untuk misalnya daftar kota tidak
hanya berasal dari array saja namun dapat berasal dari hasil fetch data
MySQL dengan menggunakan metode yang serupa dengan diawali oleh
query terlebih dulu.
Oleh karena array hanya bersifat sementara dan berlaku di sebuah dokumen
saja, dibutuhkan fungsi tambahan apabila ingin menggunakan array yang
sama untuk dipakai di halaman yang berbeda. Untuk membuatnya perlu
membuat sebuah file yang khusus menyimpan array tersebut atau
membuatkan fungsi (function) pada sebuah halaman dan file tersebut dapat
“ditempelkan” dengan menggunakan perintah include atau require.
4
Function
Function
Function atau fungsi pada PHP adalah perintah yang dibuat sendiri oleh
programmer yang dapat berisikan perintah yang sering digunakan pada
sebuah aplikasi yang telah dibangun. Tujuannya adalah mempersingkat
perancangan kode supaya tidak perlu menulis ulang dari perintah yang
sederhana ataupun yang rumit.
Pada function dikenal istilah subroutine yaitu nama dari fungsi yang telah
dibuat dan dapat digunakan kapan saja diperlukan.
Pembuatan fungsi diawali oleh kata kunci function. Nama fungsi dapat berupa
apa saja dengan ketentuan yang mirip seperti pembuatan variabel yaitu:
case insensitive.
alfanumerik.
tidak mengandung spasi (dapat diganti dengan underscore).
tidak diawali oleh angka.
tidak bentrok dengan reserved keywords seperti echo, print, dsb.
function cetak(){
echo “Cetak tulisan dengan function <br>”;
}
cetak();
cetak();
cetak();
cetak();
cetak();
Seperti yang telah dicontohkan di atas, hasil dari soubroutine tersebut adalah
mencetak tulisan yang telah dibuat pada fungsi sebanyak empat kali.
Karena fungsi dengan nama cetak tersebut hanya berisikan tulisan dan sudah
dibuatkan output dari perintah echo, maka setiap kali subroutine dipanggil
akan langsung mencetak tulisan tersebut.
Apabila pada fungsi yang berisi operator aritmetika, terdapat dua pilihan untuk
mencetak hasil perhitungan yaitu dengan menggunakan echo atau dapat
menggunakan return value.
Return Value
Return Value atau nilai balik adalah nilai yang diberikan oleh sebuah fungsi
yang umumnya berupa operasi aritmetika atau hitungan. Nilai balik ini dapat
dianalogikan sebagai kuitansi hasil transaksi jual-beli.
function penjumlahan(){
$x = 20;
$y = 80;
$i = $x + $y;
return($i);
}
Variabel $i menjadi nilai balik dengan return. Parameter dari return dapat
berupa ekspresi string atau integer.
$penjumlahan = penjumlahan();
echo “Variabel x = $x <br>”;
echo “Variabel y = $y <br>”;
echo “Hasil penjumlahan x+y = $penjumlahan <br>”;
Apabila fungsi aritmetika tidak mempunyai return value maka tidak dapat
dicetak meskipun subroutine sudah dipanggil. Program di atas mencoba
mencetak kedua variabel input pada fungsi dengan nama $x dan $y namun
ketika program tersebut dijalankan, output yang didapat hanyalah hasil
penjumlahan saja. Hal ini dikarenakan variabel $x dan $y masih bersifat lokal.
Variabel yang telah dibuat di dalam sebuah fungsi otomatis bersifat lokal dan
tidak bisa digunakan di luar fungsi seperti contoh halaman sebelumnya. Hal
ini sebenarnya untuk proteksi variabel supaya tidak bentrok dengan variabel
lain apabila terdapat variabel dengan nama yang sama.
function penjumlahan(){
global $x;
global $y;
$x = 20;
$y = 80;
$i = $x + $y;
return($i);
}
Dari contoh di atas, output akan mencetak seluruh tulisan, tidak seperti
halaman sebelumnya karena variabel $x dan $y sudah menjadi global.
global $x,$y;
Parameter dapat digunakan sebagai nilai dinamis pada satu atau beberapa
variabel pada function. Biasanya metode ini dibuat untuk meningkatkan unsur
interaktivitas antara user dengan server.
Input nilai ke sebuah variabel dapat dilakukan di luar function dan pada saat
memanggil subroutine akan dimasukkan ke dalam parameter sesuai urutan
dari penulisan variabel yang bersangkutan.
Contoh fungsi dengan parameter dan fungsi hitung yang lebih rumit:
<?php
function hitung($x, $y, $z){
$hitung = ($x + $y) * $z;
return ($hitung);
}
//deklarasi nilai variabel di luar function
$a = 5;
$b = 3;
$c = 10;
$rumus = hitung($a, $b, $c);
echo “Nilai a = $a <br>”;
echo “Nilai b = $b <br>”;
echo “Nilai c = $c <br>”;
echo “Rumus hitung = $rumus <br>”;
?>
Hasil:
Nilai a = 5
Nilai b = 3
Nilai c = 10
Rumus hitung = 15
Call by Reference
Teknik call by reference adalah penggantian nilai dari sebuah variabel yang
telah dimasukkan ke dalam parameter. Misalkan ada sebuah fungsi hitungan
dengan beberapa variabel di dalamnya, dan terdapat deklarasi variabel baru
di dalam fungsi tersebut maka hasil akhirnya adalah satu atau beberapa
variabel akan berganti nilainya tergantung variabel mana yang ditandai oleh
call by reference tersebut.
Nilai variabel b yang tadinya 20 akan berubah menjadi 888 pada saat
pencetakan kedua karena pada fungsi tersebut terdapat deklarasi baru.
Sintaks:
include “namaFile.php”;
atau
require “namaFile.php”;
File yang di-include atau require tidak harus PHP saja, namun bisa berupa
HTML. Apabila file terdapat pada direktori yang berbeda maka diperlukan
penulisan seperti contoh berikut:
include “src/functions.php”;
require “../src/php/functions.php”;
Tips dalam menggunakan include atau require file yang berisi HTML, jadikan
dokumen yang akan di-include atau require hanya berisi tag yang perlu saja,
atau berisi perintah PHP yang diperlukan saja. Oleh karena prinsip kerja
include dan require itu sebenarnya adalah menempelkan file ke file lain maka
jika ada tag HTML yang bertumpuk pada sebuah file akan mengakibatkan
kemungkinan olah halaman di browser menjadi error dan kemungkinan terjadi
inkompatibilitas.
File pertama yaitu hanya berisi PHP saja, tanpa adanya tag HTML satupun
kecuali yang benar-benar diperlukan:
<?php
//nama file ini adalah fungsi.php
function cetak(){
echo “Cetak tulisan ini dengan function<br>”;
}
function perkalian(){
$x = 10;
$y = 20;
$z = $x * $y;
return($z);
}
?>
Pada file pertama, kode yang dibuat hanya murni PHP saja meski ada tag
HTML <br> yang termasuk di dalam fungsi cetak();
Oleh karena file ini akan diikutsertakan ke file lain yang umumnya berekstensi
*.html maka tag HTML seperti head, title, body dan sebagainya tidak
diperlukan supaya menjaga jangan sampai ada tag yang bertumpukan di
dalam sebuah halaman.
File kedua adalah file yang akan memanggil atau menempelkan fungsi.php
yang telah dibuat sebelumnya. File ini boleh berisi PHP saja atau sekaligus
lengkap dengan tag HTML. Asumsikan file ini berada di direktori yang sama
dengan file fungsi.php:
<!DOCTYPE html>
<html>
<head>
<title>Latihan Include dan Require</title>
<body>
<h1>Latihan Include dan Require file</h1>
<?php
//include nama file lengkap dengan ekstension
include “fungsi.php”;
?>
<h3>Latihan Selesai</h3>
</body>
</html>
Kesalahan Include
<!DOCTYPE html>
<html>
<head>
<title>Latihan Include dan Require</title>
<body>
<h1>Latihan Include dan Require file</h1>
<?php
//include nama file lengkap dengan ekstension
include “fungsion.php”;
Pada kode di atas terdapat kesalahan penulisan nama file yang semestinya
fungsi.php dan masih menggunakan include. Include adalah
mengikutsertakan sebuah file ke file lain, umumnya berkaitan terhadap
program yang terdapat pada file yang meng-include. Jika terjadi kesalahan
include maka sebenarnya program di bawahnya masih dapat berjalan namun
akan terdapat notifikasi Warning pada halaman yang bersangkutan.
Pada contoh di atas, tulisan Latihan Selesai masih akan tercetak meski
include nya mengalami kesalahan penulisan nama file.
Kesalahan Require
<!DOCTYPE html>
<html>
<head>
<title>Latihan Include dan Require</title>
<body>
<h1>Latihan Include dan Require file</h1>
<?php
//require nama file lengkap dengan ekstension
require “fungsion.php”;
//panggil subroutine yang terdapat pada file sebelumnya
cetak();
$perkalian = perkalian();
echo “Hasil perkalian = $perkalian <br>”;
?>
<h3>Latihan Selesai</h3>
</body>
</html>
Pada kode di atas terdapat kesalahan penulisan nama file yang semestinya
fungsi.php dan sudah diganti menggunakan require. Require adalah
menempelkan file yang dibutuhkan untuk menjalani baris program
berikutnya. Jika terjadi kesalahan require maka program berikutnya tidak
dapat berjalan dan terdapat notifikasi Fatal Error pada halaman yang
bersangkutan.
Pada contoh di atas, tulisan Latihan Selesai tidak akan tercetak karena
sudah menggunakan perintah require.
5
HTML Form
HTML Form
Form dapat menggunakan metode GET atau POST untuk pengiriman data.
Metode GET dapat dikatakan rentan terhadap hacking dikarenakan
pengiriman GET menggunakan media URL parameter sedangkan POST akan
dikirim langsung ke server tanpa melalui URL.
Form ID adalah identitas untuk form yang telah dibuat, biasanya digunakan
untuk mengatur format melalui CSS atau dapat digunakan juga dalam
pemrograman Javascript. Metode menggunakan POST untuk memastikan
keamanan informasi yang dikirim oleh user.
Informasi yang telah diisi oleh user akan dikirim setelah menekan tombol
Submit. Letakkan seluruh komponen form di dalam blok tag yang dicontohkan
di atas. Apabila ada komponen yang salah letak di luar blok tag form maka
informasi di dalam komponen tersebut tidak akan terkirim.
Komponen form yang umum digunakan adalah text field, text area, combo box
dan button. Seluruh komponen form adalah tag HTML.
Text Field
Text field adalah komponen umum berbentuk kotak isian yang digunakan
untuk mengisi informasi misalnya nama lengkap, tempat lahir atau password.
Tag untuk text field adalah single tag sehingga tidak membutuhkan pasangan
untuk tag penutup.
Contoh di atas adalah pembuatan text field dengan atribut sebagia berikut:
Nama “txtNama” digunakan sebagai identitas untuk dihubungkan
dengan variabel PHP yang menerima hasil kiriman.
Type=”text” melambangkan komponen tersebut adalah text field.
Size adalah ukuran kotak isian yang melambangkan berapa banyak
karakter yang dapat ditampilkan pada layar. Meskipun ukuran hanya 50
karakter tetapi pada kenyataannya karakter yang dapat dimasukkan
dapat melebihi 50 karakter/digit.
Kesalahan yang sering terjadi adalah kesalahan dari identitas komponen form
karena terdapat aturan Case Sensitive. Kesalahan nama ID akan
menyebabkan informasi tidak dapat diterima dengan baik oleh PHP.
Text field untuk pengisian password cukup merubah atribut menjadi seperti
berikut:
Atribut password berarti text field berubah menjadi isian password yaitu pada
saat pengisian, karakter tidak akan tampil sebenarnya melainkan berupa
simbol bulat atau bintang.
Text Area
Sedikit berbeda dengan text field, terdapat atribut cols yang berfungsi sama
dengan size yaitu untuk membuat ukuran (lebar) dari komponen tersebut dan
rows untuk menentukan berapa baris yang dapat ditampilkan pada layar.
Sama seperti text field, meskipun ukuran sudah ditentukan tetapi user masih
dapat mengisi lebih dari digit yang ditentukan.
Radio Button
Komponen ini digunakan untuk pilihan ganda seperti kuis online, pemilihan
jenis kelamin atau pilihan Yes or No. Namun oleh karena metode validasi
untuk komponen ini cukup rumit maka komponen ini sudah jarang digunakan
lagi. Name pada komponen ini sama saja seperti name pada komponen
lainnya.
Contoh berikut adalah dua tombol radio dengan salah satu tombol sudah
terpilih/checked terlebih dulu:
Select
Komponen ini lebih dikenal dengan sebutan dropdown atau combo box.
Komponen ini digunakan sama seperti radio yaitu untuk pilihan yang banyak
misalnya kota, provinsi, negara dan sebagainya.
<select name=”provinsi”>
<option value=”Jawa Barat”>Jawa Barat</option>
<option value=”Jawa Tengah”>Jawa Tengah</option>
<option value=”Jawa Timur”>Jawa Timur</option>
<option value=”DKI Jakarta”>DKI Jakarta</option>
</select>
<select name=”provinsi”>
<option value=”Jawa Barat” selected=”selected”>
Jawa Barat</option>
<option value=”Jawa Tengah”>Jawa Tengah</option>
<option value=”Jawa Timur”>Jawa Timur</option>
<option value=”DKI Jakarta”>DKI Jakarta</option>
</select>
Button
Nama dari button tidak perlu diubah. Tulisan default pada tombol tipe submit
adalah Submit sedangkan default untuk reset juga adalah Reset. Apabila ingin
merubah tulisan menjadi tulisan lain maka ubahlah value dari button tersebut
seperti contoh tag di atas.
Tombol ini juga harus diletakkan di dalam blok tag form yang telah dibuat dan
jangan sampai salah letak di luar blok tag.
Mayoritas dari aplikasi web sudah tidak menggunakan tombol reset lagi
dikarenakan kurangnya kenyamanan untuk user yang karena diharuskan
untuk mengisi dari awal lagi apabila terjadi salah tekan.
Kode HTML:
<!DOCTYPE html>
<html>
<head>
<title>Latihan Form</title>
</head>
<body>
<form id="latihan" method="post" action="terima.php">
Nama Lengkap:<br>
<input type="text" name="namaLengkap" size="30" /><br>
Divisi:<br>
<select name="divisi">
<option value="Keuangan">Keuangan</option>
<option value="Operasional">Operasional</option>
<option value="Teknologi Informasi">Teknologi
Informasi</option>
<option value="SDM">SDM</option>
</select>
<input type="submit" name="btn1" value="KIRIM" />
</form>
</body>
<html>
Selanjutnya buatlah file terima.php yang akan menerima hasil kiriman dari
form sebelumnya:
<!DOCTYPE html>
<html>
<head>
<title>Terima Hasil Form</title>
</head>
<body>
<?php
//terima hasil form
$namaLengkap = $_POST[namaLengkap];
$divisi = $_POST[divisi];
Form dapat berbentuk file HTML ataupun PHP. Apabila form yang dibuat tidak
mempunyai fasilitas interaktif maka diperbolehkan hanya dalam bentuk file
*.html atau *.htm. Jika form dibuat dengan unsur interaktif maka diharuskan
file dalam bentuk *.php.
Untuk membuat tampilan form yang rapi dengan komponen yang lebih banyak
misalnya form registrasi member, maka buatlah dalam bentuk tabel HTML.
Beberapa bentuk aplikasi form yang sering digunakan misalnya aplikasi Login
dan Guestbook untuk mengisi komentar di website:
6
MySQL
MySQL
Perintah untuk login ke server MySQL dapat dilakukan pada command prompt
Windows atau Terminal/Konsole pada Linux:
mysql -u root
mysql -u root -p
mysql>
Tata cara login yang lengkap adalah dengan menambahkan atribut -h jika
ingin terhubung ke MySQL yang berada di server yang berbeda. Default tanpa
atribut -h maka server yang dihubungi adalah localhost.
mysql> ?
For information about MySQL products and services, visit:
http://www.mysql.com/
For developer information, including the MySQL Reference Manual, visit:
http://dev.mysql.com/
To buy MySQL Enterprise support, training, or other products, visit:
https://shop.mysql.com/
File Database
MySQL menyimpan database sistem dan user dalam bentuk direktori yang
berisi database dan tabel pada direktori yang berbeda tergantung sistem
operasi yang digunakan. Untuk Linux biasanya adalah /var/lib/mysql
sedangkan untuk Windows adalah /mysql/data.
Bagi pengguna paket server XAMPP dapat mengakses direktori data MySQL
pada lokasi /xampp/mysql/data. Media penyimpanan lainnya adalah sesuai
server atau sistem operasi yang digunakan oleh admin.
Perintah untuk melihat database yang terdapat pada server adalah show
databases. Contohnya seperti berikut:
Perintah pada MySQL adalah case insensitive sehingga tidak ada aturan
harus huruf kapital atau tidak. Keterangan 9 rows in set adalah baris yang
dihasilkan oleh perintah tadi, artinya yaitu terdapat 9 database pada server
dan perintah tadi dijalankan dengan waktu 0.07 detik (tergantung performa
sistem dan jaringan).
Setelah mengetahui database apa saja yang terdapat pada server, gunakan
perintah use untuk mengaktifkan sebuah database seperti contoh berikut:
Database cdcol akan digunakan dan notifikasi database changed akan tampil
pada command prompt. Apabila ingin mengetahui database yang sedang aktif
gunakan perintah select database();
Berikutnya adalah melihat ada berapa tabel pada database yang telah
diaktifkan sebelumnya. Gunakan perintah show tables;
Pada database tersebut hanya terdapat sebuah tabel dengan nama cds.
Untuk melihat struktur dari tabel yang sudah diketahui, gunakan perintah
describe:
Perintah tersebut akan menampilkan keterangan dari tiap kolom pada tabel
cds. Tipe data yang umum digunakan pada kolom tabel yaitu char, varchar
dan int. Char dan Varchar digunakan sebagai tipe data string dan Int
digunakan untuk tipe data angka atau integer.
Tipe data
Select
Select adalah query (dialog) untuk menampilkan data dari sebuah tabel. Data
yang ditampilkan dapat dimanipulasi sesuai keperluan misalnya
menggunakan kriteria, sorting atau filter.
Atribut * artinya menampilkan semua kolom yang terdapat pada tabel cds.
Query tersebut belum mempunyai kriteria atau sorting.
Setelah ditambahkan atribut order by jahr ASC artinya tampilan tabel akan
diurut berdasarkan kolom jahr. Default order by akan memberikan tampilan
urut ascending atau urut terkecil ke terbesar.
Jika ingin menggunakan sort descending atau terbesar ke terkecil maka harus
menggunakan atribut DESC:
mysql> select * from cds order by jahr desc;
+-----------------------------------+------------------+------+----+
| titel | interpret | jahr | id |
+-----------------------------------+------------------+------+----+
| Goodbye Country (Hello Nightclub) | Groove Armada | 2001 | 4 |
| Glee | Bran Van 3000 | 1997 | 5 |
| Beauty | Ryuichi Sakamoto | 1990 | 1 |
+-----------------------------------+------------------+------+----+
3 rows in set (0.00 sec)
Kriteria pada where tidak harus nilai statik tapi bisa juga menggunakan
operator aritmetik atau string seperti berikut:
Create Database
Tabel cities:
Kolom Tipe Null Key Extra
id int(11) PRI AI
namakota varchar(50) INDEX
PRI adalah Primary Key yang bermanfaat sebagai kunci dari tabel yang akan
dibuat sekaligus sebagai identitas unik dari tiap record.
Unique sama seperti Primary Key namun dalam sebuah tabel boleh
menggunakan lebih dari satu unique, sedangkan khusus Primary Key hanya
satu kolom saja. Pada beberapa aplikasi terdapat lebih dari satu primary key
namun umumnya akan membutuhkan proses normalisasi.
Setelah struktur tabel telah dibuat, maka query yang diperlukan adalah
sebagai berikut:
Insert
Isi dari tiap kolom boleh tidak menggunakan tanda kutip kecuali query
tersebut akan dijalankan di PHP maka sebaiknya menggunakan tanda kutip
apostrophe (single quote).
Jika ingin memasukkan data lebih dari satu maka lakukan query seperti
berikut:
Karena tipe id adalah auto increment maka untuk nomor id selanjutnya tidak
perlu diisikan. Query tersebut dapat disederhanakan menjadi:
Selanjutnya adalah mengisi record pada tabel members. Pastikan kota yang
didaftarkan pada kolom kota milik user sudah terdapat pada tabel cities
karena nantinya akan dibuat untuk aplikasi profil dan registrasi.
Berikut adalah query untuk mengisi record pada tabel members sebanyak 2
orang:
Khusus untuk password berikan fungsi MD5 untuk enkripsi. Apabila ingin
mengisi record berikutnya, gunakan query yang lebih sederhana tanpa
menggunakan id karena id sudah menggunakan auto increment.
Perhatikan tanda koma dan tanda kurung yang digunakan sebagai pembuka
dan penutup fungsi MD5 dan penutup tiap Values. Disini seringkali terjadi
kesalahan kelebihan atau kekurangan membuat tanda kurung koma dan
penutup.
Penulisan query pada mysql prompt boleh dibuat baris perbaris dan jika
sudah selesai dan ingin dieksekusi, tutup dengan semicolon dan tekan enter.
Tampilkan record yang sudah diisikan pada tabel members dan cities dengan
query select:
Update
Update query digunakan untuk mengganti isi sebuah record misalnya terjadi
kesalahan penulisan nama dan ingin mengganti nama yang baru, alamat atau
password. Pada aplikasi umumnya id dan username tidak boleh diganti oleh
user, kecuali oleh administrator.
Pada query ini diwajibkan untuk menggunakan kriteria supaya record yang
diganti benar-benar unik dan jangan sampai justru terjadi kesalahan update
record milik user lain. Kriteria yang menggunakan where dapat mengambil
dari kolom yang biasa disebut sebagai “kandidat” sebagai kuncian. Pada tabel
cities mempunyai kolom id sebagai primary key dan pada tabel members
mempunyai dua kolom kandidat sebagai kuncian yaitu id sebagai primary key
dan username yang dijadikan unique.
Query untuk Update hanya berlaku untuk satu record, tidak berlaku kolektif
seperti menggunakan Insert.
Sintaks:
UPDATE namatabel
SET namakolom1=’nilaibaru’, namakolom2=’nilaibaru’
WHERE kolomkunci=’nilaikolomkunci’;
Contoh:
UPDATE cities
SET namakota=’Jkt’
WHERE id=1;
Kesalahan lupa memberikan kriteria dengan where adalah sangat fatal karena
dapat mengakibatkan seluruh isi tabel akan terganti dengan nilai yang baru.
Delete
Query ini digunakan untuk menghapus sebuah record dari tabel. Sama seperti
Update, query Delete juga membutuhkan kriteria yang unik misalnya id atau
username sebagai kunci.
Query ini termasuk vital sehingga sebaiknya dilakukan pembatasan hak akses
(privileges) kepada db user yang sedang login supaya menghindari kesalahan
penghapusan record atau penyalahgunaan terhadap akun milik user.
Biasanya yang dapat melakukan delete hanya db administrator saja.
Sintaks:
Contoh:
Atau
Query Delete hanya berlaku untuk satu record saja, tidak dapat kolektif seperti
pada Insert.
Drop
Sintaks:
DROP namadatabase;
Atau
DROP namatabel;
Contoh:
DROP members;
Truncate Table
Query ini hanya mengosongkan isi sebuah tabel dan masih mempertahankan
struktur tabel itu sendiri.
Sintaks:
Contoh:
7
Aplikasi PHP- MySQL – Select dan Insert
PHP akan mengakses database melalui web server yaitu Apache. Jika
database server dan web server berada pada komputer yang sama maka
koneksi akan menggunakan localhost sebagai nama komputer (hostname).
Pada beberapa aplikasi, database server dapat berasal dari komputer yang
berbeda yang dihubungkan dengan mengisi nama komputer tersebut, domain
atau bisa juga menggunakan IP dari komputer yang dituju.
Tahap pertama untuk membuat aplikasi berbasis PHP dan MySQL adalah
membangun koneksi yang membutuhkan tiga elemen yaitu hostname,
username dan password. Dalam hal ini adalah localhost dan user account
root tanpa password (blank).
Sintaks:
mysql_connect("localhost","root","");
<?php
?>
Apabila file tersebut dijalankan dan tidak ada output yang dihasilkan maka
koneksi sudah berhasil. Jika koneksi gagal maka akan terdapat notifikasi di
layar.
<?php
mysql_connect("localhost","root","")
or die("Koneksi MySQL Gagal<br>");
?>
Sintaks:
mysql_select_db("exercise");
Berikut adalah contoh program yang sudah lengkap dengan seleksi database
dan langsung tambahkan fungsi die seperti contoh di atas:
<?php
function koneksi(){
mysql_connect("localhost","root","")
or die("Koneksi MySQL Gagal<br>");
mysql_select_db("exercise")
or die("Database tidak ditemukan<br>");
}
?>
File ini akan dipakai pada setiap halaman/file yang membutuhkan koneksi
database dan akan ditambahkan beberapa fungsi penting lainnya. Gunakan
perintah include atau require untuk dapat menggunakan file ini di halaman lain
dan perlu diingat bahwa tidak diperlukan tag HTML pada file ini kecuali tag
HTML yang memang diperlukan seperti <br> atau <p></p> dan sebagainya.
MySQL Query
Hasil dari MySQL server disebut dengan resultset yang bisa terdiri dari 0
record, 1 record atau lebih.
Sintaks:
Variabel $query sudah menyimpan resultset dari query yang sudah dituliskan
dan nantinya dapat digunakan untuk aplikasi yang lebih banyak lagi, misalnya
untuk menghitung berapa banyak baris atau sekaligus mencetak di layar
dengan metode fetch.
Jika pada saat mengetik dan menjalankan query pada mysql command
prompt tidak ada case sensitive, maka pada saat membuat query di PHP
harus memperhatikan case karena PHP bersifat case sensitive. Kesalahan
case pada nama kolom akan mengakibatkan record menjadi blank.
Proses mencetak record dari MySQL harus melalui metode fetch. Setelah
query sudah tersimpan di sebuah variabel PHP dan dijalankan, maka
selanjutnya adalah menjalankan salah satu perintah fetch dengan fetch
object, fetch assoc atau fetch array. Perbedaan yang paling mendasar dari
ketiga fetch tersebut adalah pada sintaks dan hasil olah datanya.
Perbedaan lain yang dijadikan acuan untuk penggunaan fetch ini adalah
performa dari ketiganya. Dengan asumsi program hendak fetch tabel yang
berisi banyak record, fungsi fetch object adalah yang paling lama karena
resultset dijadikan objek satu persatu tergantung jumlah kolom pada tabel
yang terkait.
Fungsi fetch assoc dengan fetch array sebenarnya sama saja namun khusus
fetch array dapat menggunakan indeks tidak hanya tulisan nama kolom
namun dapat berupa numerik.
Performa dari assoc atau array yaitu dengan membuat penyimpanan (cache)
terlebih dulu sehingga data akan lebih cepat terpanggil/cetak ketika halaman
sudah selesai loading. Oleh karena fetch array dapat memanggil indeks
berupa asosiatif (string) dan numerik, konsekuensinya adalah performa akan
lebih lama dibanding assoc, terlebih lagi sintaks dari fetch assoc yang
notabene menggunakan array asosiatif akan lebih mudah dikenali.
Fetch
Untuk memulai fetch data diperlukan variabel yang telah menyimpan query
seperti contoh berikut:
$fetch = mysql_fetch_object($query);
atau
$fetch = mysql_fetch_assoc($query);
atau
$fetch = mysql_fetch_array($query);
$id = $fetch->id;
$nama = $fetch->nama;
$jeniskelamin = $fetch->jeniskelamin;
$alamat = $fetch->alamat;
$kota = $fetch->kota;
$username = $fetch->username;
$password = $fetch->password;
$query = mysql_query("
SELECT nama,jeniskelamin,alamat,kota,username
FROM members");
Berikut adalah contoh ekstrak dengan fetch assoc dan fetch array untuk
membandingkan sintaks dari ketiganya:
Fetch assoc:
$id = $fetch[id];
$nama = $fetch[nama];
$jeniskelamin = $fetch[jeniskelamin];
$alamat = $fetch[alamat];
$kota = $fetch[kota];
$username = $fetch[username];
$password = $fetch[password];
$id = $fetch[id];
$nama = $fetch[nama];
$jeniskelamin = $fetch[jeniskelamin];
$alamat = $fetch[alamat];
$kota = $fetch[kota];
$username = $fetch[username];
$password = $fetch[password];
$id = $fetch[0];
$nama = $fetch[1];
$jeniskelamin = $fetch[2];
$alamat = $fetch[3];
$kota = $fetch[4];
$username = $fetch[5];
$password = $fetch[6];
Khusus untuk fetch array dapat memanggil indeks berupa nomor, misalkan
$nama = $fetch[1] artinya akan ekstrak dari kolom indeks-1 dan jika
diterjemahkan adalah mengambil dari kolom kedua mengingat prinsip indeks
adalah n-1. Kolom kedua disini bukanlah kolom kedua pada tabel sebenarnya
tapi kolom kedua dari resultset query.
Untuk performa yang lebih cepat, selanjutnya gunakan metode fetch assoc.
Setelah fetch selesai maka record dapat dicetak seperti biasa dengan print
atau echo. Berikut adalah versi lengkap dari program mencetak data MySQL
dengan integrasi PHP dan HTML, buat dalam file baru:
<!DOCTYPE HTML>
<html>
<head>
<title>Fetch</title>
</head>
<body>
<?php
include "allfunctions.php";
koneksi();
$query = mysql_query("
SELECT nama,jeniskelamin,alamat,kota,username
FROM members
");
$fetch = mysql_fetch_assoc($query);
$nama = $fetch[nama];
$jeniskelamin = $fetch[jeniskelamin];
$alamat = $fetch[alamat];
$kota = $fetch[kota];
$username = $fetch[username];
Program di atas ternyata hanya mencetak satu record saja. Berikutnya jika
ingin mencetak seluruh record dengan tampilan yang lebih rapi, gunakan loop
while dan cetak record dalam bentuk tabel HTML.
Di bawah ini adalah program lengkap untuk mencetak record hasil dari query
dan ekstraksi pada tabel HTML dan menggunakan loop while. Simpan file
dengan nama members.php.
<!DOCTYPE HTML>
<html>
<head>
<title>Fetch 2</title>
</head>
<body>
<table width="700" border="1" cellspacing="0" cellpadding="3">
<tr>
<th width="91">Nama</th>
<th width="91">Jenis Kelamin</th>
<th width="91">Alamat</th>
<th width="91">Kota</th>
<th width="94">Username</th>
</tr>
<?php
include "allfunctions.php";
koneksi();
$query = mysql_query("
SELECT nama,jeniskelamin,alamat,kota,username
FROM members");
while($fetch = mysql_fetch_assoc($query)){
$nama = $fetch[nama];
$jeniskelamin = $fetch[jeniskelamin];
$alamat = $fetch[alamat];
$kota = $fetch[kota];
$username = $fetch[username];
echo "
<tr>
<td>$nama</td>
<td>$jeniskelamin</td>
<td>$alamat</td>
<td>$kota</td>
<td>$username</td>
</tr>
";
}
?>
</table>
</body>
</html>
Aplikasi registrasi anggota membutuhkan dua file yang berperan sebagai form
untuk anggota baru dan action yang akan memproses query untuk insert ke
MySQL.
Buatlah file dengan nama signup.php yang berisi form registrasi dengan
kode seperti berikut:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Sign Up for a new account</title>
</head>
<body>
<form name="form1" method="post" action="src-insert.php">
<table width="600" border="0" cellspacing="5" cellpadding="0">
<tr>
<td width="168" valign="top">Nama Lengkap</td>
<td width="417" valign="top">
<input name="nama" type="text" size="30">
</td>
</tr>
<tr>
<td valign="top">Jenis Kelamin</td>
<td valign="top">
<select name="jeniskelamin">
<option value="0" selected>PILIH JENIS KELAMIN</option>
<option value="L">Laki-laki</option>
<option value="P">Perempuan</option>
</select>
</td>
</tr>
<tr>
<td valign="top">Alamat</td>
<td valign="top">
<textarea name="alamat" cols="45" rows="5"></textarea>
</td>
</tr>
<tr>
<td valign="top">Kota</td>
<td valign="top">
<select name="kota">
<option value="0" selected>PILIH KOTA</option>
<option value="Jakarta">Jakarta</option>
<option value="Bogor">Bogor</option>
<option value="Depok">Depok</option>
<option value="Tangerang">Tangerang</option>
<option value="Bekasi">Bekasi</option>
</select>
</td>
</tr>
<tr>
<td valign="top">Username</td>
<td valign="top"><input name="username" type="text" size="30"></td>
</tr>
<tr>
<td valign="top">Password</td>
<td valign="top"><input name="password" type="password"
size="30"></td>
</tr>
</table>
<p>
<input type="submit" name="button" id="button" value="Sign Up">
</p>
</form>
</body>
</html>
Untuk membuat program insert pada file action, yang perlu diperhatikan
adalah nama dari tiap komponen form:
Text field nama : nama
Combo box jenis kelamin : jeniskelamin
Text area alamat : alamat
Combo box kota : kota
Text field username : username (tipe text)
Text field password : password (tipe password)
Kesalahan menulis nama pada file action dapat berakibat data yang masuk di
satu atau beberapa komponen menjadi blank sehingga akan menjadi null atau
blank record di tabel MySQL.
Perhatikan juga case tiap nama karena PHP bersifat case sensitive. Untuk
mempermudah pembuatan aplikasi, cukup dengan samakan nama komponen
form dengan nama kolom pada MySQL misalnya text field nama untuk
nantinya masuk ke kolom/field nama pada tabel members.
Di bawah ini adalah program pada file src-insert.php yang sudah lengkap
dengan PHP dan HTML:
<?php
include "allfunctions.php";
koneksi();
$nama = $_POST["nama"];
$jeniskelamin = $_POST["jeniskelamin"];
$alamat = $_POST["alamat"];
$kota = $_POST["kota"];
$username = $_POST["username"];
$password = md5($_POST["password"]);
$query = mysql_query("
INSERT INTO members
(nama,jeniskelamin,alamat,kota,username,password)
VALUES('$nama','$jeniskelamin','$alamat','$kota','$username','$password')
");
?>
<!DOCTYPE html>
<html>
<head>
<title>Proses Registrasi</title>
</head>
<body>
<p>
<?php
if ( !$query ) {
echo "Registrasi gagal. <br> Mohon Ulangi. <br>";
$err = mysql_error();
echo $err;
echo '<a href="signup.php">Kembali ke halaman sebelumnya</a>';
}
else {
echo "Registrasi berhasil <br>";
}
?>
</p>
</body>
</html>
Kesalahan yang umum terjadi pada saat pendaftaran ini adalah kesalahan
penulisan query dan kesalahan penulisan nama text field atau komponen
lainnya. Misalkan ada kejadian salah menuliskan text field username maka
nilai yang masuk ke variabel $username adalah blank dan hasilnya akan error
karena kolom username pada tabel MySQL adalah Unique dan tidak boleh
kosong (not null).
Fungsi md5() pada PHP adalah untuk membuat enkripsi MD5 pada sebuah
variabel. Nilai yang akan masuk ke database adalah nilai yang sudah
terenkripsi.
8
Aplikasi PHP-MySQL – Otentikasi
Login
Untuk aplikasi ini membutuhkan 3 file yaitu form login pada index.php, action
src-login.php dan halaman khusus home.php. Form login akan dipakai dua
kali yaitu di halaman index.php sebagai form login utama, dan dipakai kembali
pada file src-login.php sebagai form login cadangan apabila user salah
memasukkan username/password.
Untuk memudahkan, buatlah terlebih dulu subroutine untuk form login pada
file allfunctions.php supaya lebih mudah dipakai pada lebih dari satu
file/halaman.
File: allfunctions.php
<?php
function koneksi(){
mysql_connect(“localhost”, “root”, ““)
or die(“koneksi mysql gagal <br>“;
mysql_select_db(“exercise”)
or die(“database tidak ditemukan <br>“;
}
function formLogin(){
echo ‘
<form name="form1" method="post" action="src-login.php">
<p>Username:<br>
<input name="username" type="text" size="50" />
</p>
<p>Password:<br>
<input name="password" type="password" size="50" />
</p>
<p>
<input type="submit" name="Submit" value="Login" />
</p>
<p>Daftar baru <a href="signup.php">disini</a></p>
</form>
‘;
}
?>
File: index.php
<!DOCTYPE html>
<html>
<head>
<title>Welcome</title>
</head>
<body>
<h1>Selamat Datang</h1>
Silakan login:<br>
<?php
include “allfunctions.php”;
formLogin();
?>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<title>Welcome</title>
</head>
<body>
<?php
//LANGKAH 1
include "allfunctions.php";
koneksi();
//LANGKAH 2
$username = $_POST[username];
$password = md5($_POST[password]);
$query = mysql_query("
SELECT username,password FROM members
WHERE username='$username' AND password='$password'
");
$search = mysql_num_rows($query);
//LANGKAH 3
if($search==1){
echo “<script type=\"text/javascript\">
setTimeout(\"location.href='home.php'\",5000);
</script>
Login berhasil. Silakan tunggu beberapa saat.<br>;
<a href=\"home.php\">Klik disini jika redirect tidak berhasil</a>
“;
}
else {
$error = mysql_error();
echo "$error <br>";
echo "Username atau Password salah <br>";
loginForm();
}
?>
</body>
</html>
File: home.php
<!DOCTYPE html>
<html>
<head>
<title>Member’s Area</title>
</head>
<body>
Selamat datang member<br>
</body>
</html>
Authentication
PHP mempunyai dua tipe otentikasi yaitu dengan Session atau Cookie.
Hubungan antara web client dengan server disebut sebagai Stateless, artinya
keadaan dimana client sudah terhubung ke server tidak dapat dlihat dengan
mudah. Session atau Cookie bertujuan untuk menghilangkan keterbatasan
tersebut. Akan tetapi, keduanya tidak dapat dipakai bersamaan karena
terdapat perbedaan yang signifikan dari cara kerja Session dan Cookie.
Session bekerja pada sisi server (server-side) yaitu kondisi koneksi antara
client dengan server tercatat pada server. Client tidak dapat memanipulasi
session dengan mudah karena sudah ditangani oleh server. Default dari
session adalah tidak mempunyai limitasi waktu tetapi otomatis akan terputus
jika browser ditutup, artinya user harus login kembali apabila sengaja/tidak
sengaja menutup browser. Untuk memanipulasi limitasi waktu session
dibutuhkan skrip yang cukup rumit.
Cookie bekerja pada sisi client (client-side) yaitu koneksi client dengan server
terdapat pada komputer milik client yang sudah login ke sebuah aplikasi.
Cookie dapat diartikan juga sebagai “tiket masuk” ke aplikasi yang berbentuk
sebuah text file yang tersimpan pada direktori khusus di browser, misalnya
Temporary Internet Cache dan sebagainya.
Session
Session adalah sebuah variabel yang tersimpan pada server. Dalam sebuah
aplikasi dapat menggunakan lebih dari 1 session yang dijadikan sebagai
media penyimpanan sebuah nilai penting misalnya username yang dijadikan
sebagai kunci dari aplikasi penting.
Jika seorang user telah login dan ingin melihat profilnya, maka harus dibuat
sebuah kunci yang dipakai pada kriteria query where username=’xxxx’.
Nilai kunci tersebut dapat dipanggil dari variabel superglobal $_SESSION.
$username = $_POST[txtUsername];
$_SESSION[user_aktif] = $username;
$key = $_SESSION[user_aktif];
Hasil dari program di atas adalah inisialisasi sebuah variabel session dengan
nama user_aktif dan mempunyai value $username. Artinya variabel $key
dapat dijadikan sebagai kunci pada beberapa query. Berikut adalah contoh
dari query untuk update:
$query = mysql_query(“
UPDATE members
SET nama=’$nama’,alamat=’$alamat’
WHERE username=’$key’
“);
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<head>
<title>Welcome</title>
</head>
<body>
<?php
//LANGKAH 1
include "allfunctions.php";
koneksi();
//LANGKAH 2
$username = $_POST[username];
$password = md5($_POST[password]);
$query = mysql_query("
SELECT username,password FROM members
WHERE username='$username' AND password='$password'
");
$search = mysql_num_rows($query);
//LANGKAH 3
if($search==1){
$_SESSION[user_aktif] = $username;
echo “<script type=\"text/javascript\">
setTimeout(\"location.href='home.php'\",5000);
</script>
Login berhasil. Silakan tunggu beberapa saat.<br>;
<a href=\"home.php\">Klik disini jika redirect tidak
berhasil</a>
“;
}
else {
$error = mysql_error();
echo "$error <br>";
echo "Username atau Password salah <br>";
loginForm();
}
?>
</body>
</html>
function otentikasiSession(){
session_start();
if ( !isset($_SESSION[user_aktif]) ) {
header(“Location:index.php”);
}
}
Cara kerja dari fungsi tersebut adalah memeriksa apakah session sudah
terinisialisasi atau belum. Perintah yang dapat melakukannya adalah isset.
Program tersebut dapat dibaca dengan “Jika session belum terinisialisasi
maka pindahkan ke halaman index”. Perintah header juga harus diletakkan
paling atas sebelum ada output.
<?php
function otentikasiSession(){
session_start();
if ( !isset($_SESSION[user_aktif]) ) {
header(“Location:index.php”);
}
}
function koneksi(){
mysql_connect(“localhost”, “root”, ““)
or die(“koneksi mysql gagal <br>“);
mysql_select_db(“exercise”)
or die(“database tidak ditemukan <br>“;
}
function formLogin(){
echo ‘
<form name="form1" method="post" action="src-login.php">
<p>Username:<br>
<input name="username" type="text" size="50" />
</p>
<p>Password:<br>
<input name="password" type="password" size="50" />
</p>
<p>
<input type="submit" name="Submit" value="Login" />
</p>
<p>Daftar baru <a href="signup.php">disini</a></p>
</form>
‘;
}
?>
Oleh karena pada file ini terdapat perintah header maka untuk selanjutnya
include file allfunctions ini harus diletakkan paling atas.
Modifikasi file home.php:
<?php
include “allfunctions.php”;
otentikasiSession();
$aktif = $_SESSION[user_aktif];
?>
<!DOCTYPE html>
<html>
<head>
<title>Member’s Area</title>
</head>
<body>
Selamat datang, <?php echo $aktif; ?><br>
</body>
</html>
Untuk mencoba apakah otentikasi sudah berjalan atau tidak, tutup browser
(bukan tab-nya saja melainkan browsernya) dan coba akses halaman
home.php. Apabila otentikasi sudah berhasil maka user langsung dilempar ke
halaman index untuk login kembali.
Check Session
function cekSession(){
session_start();
if ( isset($_SESSION[user_aktif]) ) {
header(“Location:home.php”);
}
}
Jika session masih berlaku maka user akan otomatis masuk ke halaman
home tanpa harus login dari awal.
<?php
include “allfunctions.php”;
cekSession();
?>
<!DOCTYPE html>
<html>
<head>
<title>Welcome</title>
</head>
<body>
<h1>Selamat Datang</h1>
Silakan login:<br>
<?php
formLogin();
?>
</body>
</html>
Cookie
Perintah berikut adalah untuk mengirimkan cookie yang biasa disebut sebagai
tiket masuk dari server ke client:
Tiket adalah nama dari cookie yang dikirimkan oleh server. Variabel
$username digunakan sebagai value dari cookie. Time adalah masa berlaku
dari cookie. Perintah di atas akan membuat cookie berlaku selama 1 jam
(3600 detik).
Kelemahan dari cookie adalah pada sisi keamanan. Karena bersifat client side
maka user bisa saja memodifikasi nilai dari cookie yang masih tersimpan
pada komputer client. Beberapa pengguna juga merasa tidak nyaman karena
khawatir privasi akan terganggu, misalnya user yang lupa logout dan user lain
yang menggunakan komputernya masih dapat melihat profil milik user yang
bersangkutan.
$cookie = $_COOKIE[tiket];
<body>
<?php
//LANGKAH 1
include "allfunctions.php";
koneksi();
//LANGKAH 2
$username = $_POST[username];
$password = md5($_POST[password]);
$query = mysql_query("
SELECT username,password FROM members
WHERE username='$username' AND password='$password'
");
$search = mysql_num_rows($query);
//LANGKAH 3
if($search==1){
setcookie(“tiket”, “$username”, time()+3600);
echo “<script type=\"text/javascript\">
setTimeout(\"location.href='home.php'\",5000);
</script>
Login berhasil. Silakan tunggu beberapa saat.<br>;
<a href=\"home.php\">Klik disini jika redirect tidak
berhasil</a>
“;
}
else {
$error = mysql_error();
echo "$error <br>";
echo "Username atau Password salah <br>";
loginForm();
}
?>
</body>
</html>
Pada file allfunctions harus dibuat subroutine baru untuk periksa otentikasi
dengan cookie. Perintah yang digunakan sama saja seperti otentikasi session,
hanya berbeda pada variabel yang diperiksa.
function otentikasiCookie(){
if ( !isset($_COOKIE[tiket]) ) {
header("Location:index.php");
}
}
function cekCookie(){
if ( isset($_COOKIE[tiket]) ) {
header("Location:home.php");
}
}
<?php
function otentikasiSession(){
session_start();
if ( !isset($_SESSION[user_aktif]) ) {
header(“Location:index.php”);
}
}
function cekSession(){
session_start();
if ( isset($_SESSION[user_aktif]) ) {
header(“Location:home.php”);
}
}
function otentikasiCookie(){
if ( !isset($_COOKIE[tiket]){
header(“Location:index.php”);
}
}
function cekCookie(){
if ( isset($_COOKIE[tiket]) ) {
header(“Location:home.php”);
}
}
function koneksi(){
mysql_connect(“localhost”, “root”, ““)
or die(“koneksi mysql gagal <br>“);
mysql_select_db(“exercise”)
or die(“database tidak ditemukan <br>“);
}
function formLogin(){
echo ‘
<form name="form1" method="post" action="src-login.php">
<p>Username:<br>
<input name="username" type="text" size="50" />
</p>
<p>Password:<br>
<input name="password" type="password" size="50" />
</p>
<p>
<input type="submit" name="Submit" value="Login" />
</p>
<p>Daftar baru <a href="signup.php">disini</a></p>
</form>
‘;
}
?>
<?php
include “allfunctions.php”;
//cekSession();
cekCookie();
?>
<!DOCTYPE html>
<html>
<head>
<title>Welcome</title>
</head>
<body>
<h1>Selamat Datang</h1>
Silakan login:<br>
<?php
formLogin();
?>
</body>
</html>
Untuk memudahkan jika ingin mengganti session atau cookie, cukup berikan
komentar pada salah satu baris perintah.
<?php
include “allfunctions.php”;
//otentikasiSession();
//$aktif = $_SESSION[user_aktif];
otentikasiCookie();
$aktif = $_COOKIE[tiket];
?>
<!DOCTYPE html>
<html>
<head>
<title>Member’s Area</title>
</head>
<body>
Selamat datang, <?php echo $aktif; ?><br>
</body>
</html>
Supaya tidak sulit mengidentifikasi nilai session atau cookie, gunakan nama
variabel yang sama yaitu $aktif. Buatlah salah satu perintah menjadi komentar
jika ingin ganti lagi menjadi session atau cookie.
Untuk mencoba cookie sudah aktif atau belum, biarkan website diam (idle)
tanpa aktivitas apapun selama 1 jam atau tutuplah browser dan buka kembali
setelah 1 jam. Jika sudah berhasil maka ketika lewat dari 1 jam user akan
dilempar ke halaman index kembali.
Apabila waktu percobaan 1 jam dirasa terlalu lama, ubah masa berlaku cookie
menjadi lebih cepat, misalnya 5 menit (300 detik).
Logout
Setelah berhasil pada aplikasi login dan otentikasi, berikutnya untuk menutup
session atau menghapus cookie adalah dengan logout. Session dapat ditutup
cukup dengan mematikan browser namun untuk cara yang lebih stabil
gunakan link ke halaman logout.php.
File “fisik” Cookie tidak dapat dihapus melainkan hanya dikosongkan nilainya
dan dibuat menjadi “expired”. Cookie hanya dapat dihapus dengan
membersihkan temporary cache browser.
<?php
session_start();
session_destroy();
?>
<!DOCTYPE html>
<html>
<head>
<title>Terima Kasih</title>
</head>
<body>
Terima kasih sudah mengunjungi website exercise<br />
Silahkan login kembali <a href="index.php">disini</a>
</body>
</html>
<?php
setcookie("user", "", time()-3600);
?>
<!DOCTYPE html>
<html>
<head>
<title>Terima Kasih</title>
</head>
<body>
Terima kasih sudah mengunjungi website latihan<br />
Silahkan login kembali <a href="index.php">disini</a>
</body>
</html>
Seperti yang telah dijelaskan sebelumnya, file cookie yang sudah tersimpan di
cookie tidak dapat dihapus melalui PHP kecuali menghapus temporary cache
pada browser. Untuk keamanan, lakukan pembersihan temporary cache pada
browser secara rutin.
<?php
include “allfunctions.php”;
//otentikasiSession();
//$aktif = $_SESSION[user_aktif];
otentikasiCookie();
$aktif = $_COOKIE[tiket];
?>
<!DOCTYPE html>
<html>
<head>
<title>Member’s Area</title>
</head>
<body>
Selamat datang, <?php echo $aktif; ?><br>
<a href=”logout.php”>Logout</a>
</body>
</html>
9
Aplikasi PHP-MySQL – Update dan Delete
Kunci yang digunakan sebagai kriteria where pada query dapat mengambil
dari variabel yang dihantarkan dari file ke file lain. Cara pertama adalah
menyimpan pada sebuah komponen form dan menghantarkannya ke file lain
dengan cara submit post atau get. Cara kedua yang lebih mudah adalah
menyimpan variabel berupa session atau cookie yang dapat dipanggil dan
disimpan ke variabel lain sewaktu-waktu diperlukan.
$aktif = $_COOKIE[tiket];
$query = mysql_query(“
SELECT nama,jeniskelamin,alamat,kota
FROM members
WHERE username=’$aktif’
“);
Hasil dari query tersebut adalah record milik user yang sedang aktif pada
aplikasi web. Tiap nilai kolom akan dicetak di komponen form seperti aslinya,
misalnya text field untuk nama, text area untuk alamat dan sebagainya. Untuk
kerapihan tampilan profil, cetaklah menggunakan tabel HTML seperti pada
saat membuat form login atau registrasi.
Halaman profile.php akan menampilkan profil user dalam bentuk form pada
tabel HTML. Setiap komponen form akan langsung menampilkan data milik
user, misalnya text field nama akan langsung menampilkan nama lengkap
atau nama yang sudah terdaftar pada record milik user tersebut.
Tabel members mempunyai kolom jenis kelamin dan kota. Pada saat
membuka profil seorang user, logikanya adalah combo box harus langsung
menampilkan (selected=”selected”) jenis kelamin yang terdaftar pada
record milik user yang sedang aktif. Begitu juga dengan kota, combo box kota
juga harus langsung menampilkan kota yang terdaftar pada profil user.
Metode ini disebut dynamic form components dimana komponen form akan
langsung menampilkan record user. Untuk komponen yang mempunyai nilai
tunggal seperti text field atau text area, cukup dengan menambahkan value
pada atribut tag yang bersangkutan.
Untuk membuat komponen select (combo box) yang dinamis diperlukan dua
variabel pembanding misalnya kota yang diekstrak dari tabel cities dan kota
yang diekstrak dari tabel members. Teknik yang sama juga dilakukan pada
select jenis kelamin.
Khusus untuk password tidak perlu ditampilkan. Aplikasi untuk ubah password
akan dibuat pada halaman terpisah supaya query yang dibuat dapat lebih
sederhana.
include “allfunctions.php”;
otentikasiCookie();
koneksi();
$aktif = $_COOKIE[tiket];
$query = mysql_query(“
SELECT nama,jeniskelamin,alamat,kota
FROM members
WHERE username=’$aktif’
“);
$fetch = mysql_fetch_assoc($query);
$nama = $fetch[nama];
$jeniskelaminUser = $fetch[jeniskelamin];
$alamat = $fetch[alamat];
$kotaUser = $fetch[kota];
Pertama adalah membuat value untuk text field supaya dapat menampilkan
nama dari user yang sedang aktif:
Text field nama akan langsung menampilkan nama user yang terdaftar pada
kolom “nama” di tabel members. Text field berupa tag tunggal yang tidak ada
penutup sehingga tanda slash diletakkan sebelum tanda kurung tutup.
Lakukan langkah yang sama untuk text area alamat dengan sedikit
perbedaan:
Text area berupa tag berpasangan dan tidak mempunyai atribut value
sehingga tidak seperti text field sebelumnya.
Berikutnya adalah membuat select dinamis untuk mencocokkan kota user dari
tabel members dengan atribut pada option. Misalkan, jika kota user adalah
“Tangerang” maka combo box menampilkan Tangerang dengan atribut
selected=”selected”.
Pada baris atas harus dibuat query kedua yaitu query yang mengambil query
dari tabel cities. FetchCities nantinya akan dimasukkan ke WHILE.
$queryCities = mysql_query(“
SELECT namakota FROM cities ORDER BY namakota”);
$fetchCities = mysql_fetch_assoc($queryCities);
$namakota = $fetchCities[namakota];
Kemudian, buatlah gabungan kode loop WHILE dan kondisi IF dengan logika
seperti berikut:
<select name=”kota”>
<?php
$queryCities = mysql_query(“
SELECT namakota FROM cities ORDER BY namakota”);
while( $fetchCities = mysql_fetch_assoc($queryCities) ){
$namakota = $fetchCities[namakota];
if ( $namakota == $kotaUser ) {
$atribut = ‘selected=”selected”’;
//hati-hati kesalahan penulisan tanda kutip
}
else { $atribut=””; }
echo “
<option value=\”$namakota\” $atribut>
$namakota
</option>
”;
}
?>
</select>
Lakukan teknik yang sama untuk membuat combo box jenis kelamin menjadi
dinamis:
<select name=”jeniskelamin”>
<?php
if ( $jeniskelaminUser == “L” ) {
$atributL = ‘selected=”selected”’;
$atributP = ‘’;
}
else {
$atributP = ‘selected=”selected”’;
$atributL = ‘’;
}
echo “
<option value=\”L\” $atributL>Laki-laki</option>
<option value=\”P\” $atributP>Perempuan</option>
“;
?>
</select>
Prinsip kerjanya hampir sama dengan combo box kota yang dinamis namun
perbedaannya adalah nilai L dan P bukan berasal dari tabel melainkan nilai
statis saja.
File: profile.php
<?php
include “allfunctions.php”;
otentikasiCookie();
koneksi();
$aktif = $_COOKIE[tiket];
$query = mysql_query("
SELECT nama,jeniskelamin,alamat,kota
FROM members
WHERE username=’$aktif’
");
$fetch = mysql_fetch_assoc($query);
$nama = $fetch[nama];
$jeniskelaminUser = $fetch[jeniskelamin];
$alamat = $fetch[alamat];
$kotaUser = $fetch[kota];
?>
<!DOCTYPE html>
<html>
<head>
<title>Profile</title>
</head>
<body>
<form name="form1" method="post" action="src-update.php">
<p>Lihat Profil - <?php echo $aktif;?></p>
<table width="600" border="0" cellspacing="3" cellpadding="3">
<tr>
<td width="127">Nama</td>
<td width="452">
<input name="nama" type="text" id="nama" size=”50”
value="<?php echo $nama;?>" />
</td>
</tr>
<tr>
<td>Jenis Kelamin</td>
<td>
<select name=”jeniskelamin”>
<?php
if ( $jeniskelaminUser == “L” ) {
$atributL = ‘selected=”selected”’;
$atributP = ‘’;
}
else {
$atributP = ‘selected=”selected”’;
$atributL = ‘’;
}
echo “
<option value=\”L\” $atributL>Laki-laki</option>
<option value=\”P\” $atributP>Perempuan</option>
“;
?>
</select>
</td>
</tr>
<tr>
<td>Alamat</td>
<td>
<textarea name="alamat" cols="50" rows="5">
<?php echo $alamat;?>
</textarea>
</td>
</tr>
<tr>
<td>Kota</td>
<td>
<select name="kota">
<?php
$queryCities = mysql_query(“
SELECT namakota FROM cities ORDER BY namakota”);
while( $fetchCities = mysql_fetch_assoc($queryCities) ){
$namakota = $fetchCities[namakota];
if ( $namakota == $kotaUser ) {
$atribut = ‘selected=”selected”’;
//hati-hati kesalahan penulisan tanda kutip
}
else { $atribut=””; }
echo “
<option value=\”$namakota\” $atribut>
$namakota
</option>
”;
}
?>
</select>
</td>
</tr>
</table>
<p>
<input type="submit" name="Submit" value="Update" />
</p>
</form>
</body>
</html>
File: src-update.php
<?php
include "allfunctions.php";
otentikasiCookie();
koneksi();
$aktif = $_COOKIE[tiket];
$nama = $_POST[nama];
$jeniskelamin = $_POST[jeniskelamin];
$alamat = $_POST[alamat];
$kota = $_POST[kota];
$query = mysql_query("
UPDATE members
SET nama=’$nama’,jeniskelamin=’$jeniskelamin’,
alamat=’$alamat’,kota=’$kota’
WHERE username=’$aktif’
");
?>
<!DOCTYPE html>
<html>
<head>
<title>Update Your Profile</title>
</head>
<body>
<?php
if ( !$query ) {
echo "Update gagal. Tunggu beberapa detik. <br>";
}
else {
echo "Update berhasil. Tunggu beberapa detik. <br>";
}
?>
<script type="text/javascript">
setTimeout("location.href='profile.php'",5000);
</script>
<a href="profile.php">Klik disini jika redirect tidak berhasil</a>
</body>
</html>
Buatkan hyperlink pada tiap file supaya semua halaman dapat dihubungkan:
Pada halaman home buatlah hyperlink ke halaman profile dan logout
Pada halaman profile buatlah hyperlink ke halaman home dan logout
<a href=”logout.php”>Logout</a>
Latihan:
Delete
Query ini adalah query penting yang sebaiknya tidak diberikan kepada user
selain administrator. Aplikasi yang penting/vital sebaiknya tidak dibuat untuk
konsumsi umum. Mayoritas aplikasi web mempunyai direktori sendiri khusus
untuk halaman administrator dan yang mengetahui hanya admin itu sendiri.
http://www.exercise.co.id/administrator
http://www.latihan.com/admin
http://www.mywebsite.net.id/admin_rahasia
Contoh terakhir adalah nama samaran supaya tidak mudah diketahui oleh
sembarang orang. Teknik tersebut biasanya menggunakan .htaccess atau
menggunakan konstruktor jika aplikasinya dikembangkan melalui OOP.
$query = mysql_query(“
DELETE FROM members
WHERE username=’xxxxx’
“);
<?php
include "allfunctions.php";
koneksi();
?>
<!DOCTYPE html>
<html>
<head>
<title>Delete</title>
</head>
<body>
<form name="form1" method="post" action="src-delete.php">
Masukkan username yang akan dihapus:<br>
<input type="text" name=”hapus” size="50" /><br>
<input type="submit" name="Submit" value="DELETE" />
</form>
</body>
</html>
File: src-delete.php
<?php
include "allfunctions.php";
koneksi();
$hapus = $_POST[hapus];
//cari dahulu account yang ingin dihapus
$query = mysql_query("
SELECT username FROM members
WHERE username=’$hapus’
");
?>
<!DOCTYPE html>
<html>
<head>
<title>DELETE</title>
</head>
<body>
<?php
//periksa account
$search = mysql_num_rows($query);
if ( $search != 1 ){
echo “Account $hapus tidak ditemukan atau sudah dihapus.<br>”;
}
else {
$delete = mysql_query(“
DELETE FROM members WHERE username=’$hapus’
“);
echo “Account $hapus telah dihapus.<br>”;
}
?>
</body>
</html>
Ubah Password
Aplikasi untuk ubah password dibuat dalam halaman tersendiri supaya query
bisa terpisah dari update profil.
Cara kerja update password serupa dengan update profil yaitu mengirimkan
variabel dari form dan memasukkannya ke dalam query. Oleh karena aplikasi
masih dibangun secara sinkronus maka aplikasi ini tetap masih membutuhkan
dua file sebagai form dan action yang terpisah.
User yang hendak mengganti password tetap diminta untuk mengisi password
yang lama dan mengisi password baru berikut verifikasi apakah sudah benar
atau tidak. Jika password baru dan verifikasi tidak cocok maka user diminta
untuk mengisi kembali.
File: changepassword.php
<?php
include “allfunctions.php”;
otentikasiCookie();
$aktif = $_COOKIE[tiket];
//koneksi();
//halaman ini belum membutuhkan koneksi database
?>
<!DOCTYPE html>
<html>
<head>
<title>Change Password</title>
</head>
<body>
<form name=”form1” method=”post” action=”src-password.php”>
<h3>Ubah password - $aktif</h3>
<p>
Masukkan password anda saat ini:<br>
<input type=”password” name=”oldpassword” size=”50” />
</p>
<p>
Masukkan password baru:<br>
<input type=”password” name=”newpassword” size=”50” />
</p>
<p>
Konfirmasi password baru:<br>
<input type=”password” name=”newpasswordconfirm” size=”50” />
</p>
</form>
</body>
</html>
File: src-password.php
<?php
include “allfunctions.php”;
otentikasiCookie();
koneksi();
$aktif = $_COOKIE[tiket];
?>
<!DOCTYPE html>
<html>
<head>
<title>Change Password</title>
</head>
<body>
<?php
$oldPassword = md5( $_POST[oldpassword] );
$newPassword = $_POST[newpassword];
$newPasswordConfirm = $_POST[newpasswordconfirm];
$query = mysql_query(“
SELECT password FROM members
WHERE username=’$aktif’
“);
$fetch = mysql_fetch_assoc($query);
$password = $fetch[password];
if ( $oldPassword == $password ) {
if ( $newPassword == $newPasswordConfirm ){
$newPassword = md5($newPassword);
$ganti = mysql_query(“
UPDATE members
SET password = ‘$newPassword’
“);
echo ‘Password anda sudah diganti<br>
<a href=”profile.php”>Klik disini</a> untuk kembali
ke profil anda<br>
‘;
}
else {
echo ‘
Anda salah mengetik password atau password baru
anda tidak cocok. Tunggu beberapa detik.<br>
<a href=”changepassword.php”>Klik disini</a> jika redirect
tidak berhasil<br>
‘;
}
}
else {
echo ‘
Anda salah mengetik password atau password baru
anda tidak cocok. Tunggu beberapa detik.<br>
<a href=”changepassword.php”>Klik disini</a> jika redirect
tidak berhasil<br>
‘;
}
?>
Latihan: