Pernyataan:
Background Cover ini menunjukkan Keaslian Ebook ini yang sesuai / sama dengan
Cover CD depan aslinya. Dan bila background / Cover setiap Ebook yang ada
dalam CD tidak sama dengan cover CD depan, maka Ebook tersebut tidak asli.
Mahir dan
Professional
PHP dan MySQL
vize@telkom.net
IlmuKomputer.Com
Mahir dan professional
PHP dan MySQL
Penulis : Muhammad Syahrizal
Kutipan Pasal 44, Ayat 1 dan 2, Undang-Undang Republik Indonesia tentang
HAK CIPTA:
Tentang Sanksi Pelanggaran Undang-Undang Nomor 6 Tahun 1982 tentang
HAK CIPTA, sebgaimana telah diubah dengan Undang-Undang No.7 Tahun
1987 jo. Undang-Undang No.12 Tahun 1997, bahwa:
1. Barangsiapa dengan sengaja dan tanpa hak mengumumkan atau
Memperbanyak suatu ciptaan atau memberi izin untuk itu, dipidana
dengan pidana penjara paling lama 7 (tujuh) tahun dan/atau denda
paling banyak Rp.100.000.000,- (seratus juta rupiah).
2. Barangsiapa dengan sengaja menyiarkan, memamerkan,
mengedarkan, atau menjual kepada umum suatu ciptaan atau barang
hasil pelanggaran Hak Cipta sebagaimana dimaksud dalam ayat (1),
dipidana dengan pidana penjara paling lama 5 (lima) tahun dan/atau
denda paling banyak Rp.50.000.000,- (lima puluh juta rupiah).
PHPTriad:
Instalasi PHPTriad
Perlengkapan anda!
Sebelum anda menginstall PHPTriad, tentu saja anda harus memiliki perlengkapan dan persiapan.
PHPTriad jalan di bawah platform windows, Jadi untuk windows 9x ataupun Windows 2000, NT,
Me, ataupun XP tetap berjalan sama baiknya! Untuk spesifikasi komputer tidak begitu memerlukan
spesifikasi tinggi, asalkan komputer anda bisa menampilkan mode grafis.
Supaya gampang untuk dicerna, maka penulis beri nomor untuk penginstalasiannya:
1. Download PHPTriad! Anda boleh download dari www.download.com lalu ketikkan kata
“PHPTriad”, Atau bisa juga anda buka
projectnya di gudang kita sourceforge (http://sourceforge.net/projects/phptriad). Anda akan
mendapatkan file installernya. Lihat gambar 1!
Gambar 1
2. Klik 2 kali pada installer tersebut., dan secara otomatis program akan menampilkan License
Of Agreement (gambar 2).
Gambar 2
3. Klik “Next” maka installer akan mengekstrak semua file PHPTriad dan intaller akan
membentuk direktori C:Apache
Note : kecepatan pengestrakan tergantung kemampuan komputer anda!
Created By Muhammad Syahrizal 1
Gambar 3
4. Tunggu Sampai selesai lihat gambar 3! Pastikan ketika anda menginstall tidak terjadi error
dan anda tidak sedang menjalankan program-program lain yang kira-kira memakan memori
dan usabilitas CPU. Tekan Close!
5. Oke sampai sini anda berarti telah menginstall PHPTriad. Mudah? Ya tentu saja mudah ..
Untuk melihat apakah PHPTriad anda berjalan dengan baik. Sekarang anda test! Lihat
Caranya :
• Pertama sekali jalankan Apache Web Server anda, Start – Programs – PHPTriad –
Start Apache.
• Anda akan mendapati jendela Start Apache, biarkan ini, dan jangan sekali-sekali
ditutup selama anda menjalankan skrip-skrip PHP.
• Sekarang buka browser anda lalu ketikkan http://localhost
• Jika anda melihat kata-kata sambutan dari PHPTriad, selamat, berarti instalasi yang
anda lakukan telah sukses (lihat gambar 4)
Created By Muhammad Syahrizal 2
Gambar 4
Test Program? Buat Program!
6. Sekarang jika anda ingin melihat apakah program anda berjalan, anda boleh coba dengan
membuat script sederhana! Sekarang ikuti langkah-langkah di bawah.
• Banyak Editor yang bisa anda pergunakan untuk menulis script PHP, misalnya
PHPEditor, EditPlus, dan banyak lagi. Tapi penulis anggap anda belum punya
editor lain, maka anda bisa pergunakan NOTEPAD untuk mengetikkan skrip-skrip
PHP anda. NOTEPAD? Bener, makanya ikuti terus. Ok!
• Tuliskan skrip program sederhana di bawah ke dalam NOTEPAD!
<?php
$a = 5;
$b = 4;
print "Berapa Jumlah $a dengan $b ?";
$c = $a + $b;
print "<br>jawabannya adalah = $c";
?>
• Simpan skrip tersebut dengan nama “hitung.php” kedalam direktori
c:Apachehtdocs. Ingat setiap file PHP anda harus disimpan pada direktori htdocs!
Catatan : Jangan lupa untuk mengganti pilihan “Save As Type” menjadi “All
Files” pada saat anda menyimpan dokumen anda dengan ekstensi PHP (*.php),
karena jika ini tidak anda perhatikan akan berakibat file anda akan tetap terbaca
sebagai file teks biasa.
• Sekarang buka browser anda dan ketikkan http://localhost/hitung.php
• Bagaimana? Sudah tertampil skrip hitung.php anda? Berarti penulis ucapkan
“Selamat” kepada anda. Lagi?
Created By Muhammad Syahrizal 3
Apakah anda sudah mengerti skrip di atas? Jika belum mari kita bahas!
• <?php, ini adalah tag pembuka dari PHP
• $a = 5, ini adalah variabel “a” yang diisikan nilainya “5”
• $b = 4, sama dengan di atas, variabel “b” diisikan nilainya dengan “4”
• Perintah print dipergunakan untuk mencetak huruf pada browser. Nanti juga anda akan
berkenalan dengan perintah echo.
• $c = $a + $b;
ini berarti variabel $c sekarang menampung hasil dari penjumlahan $a dan $b.
• ?>, ini adalah tag penutup pada PHP
• satu yang patut diperhatikan adalah setiap akhir dari statement maupun perintah diakhiri
oleh tanda “;” atau tanda titik-koma.
Catatan Penting :
Artikel ini tidak membahas bagaimana itu PHP, atau bagaimana syntax yang ada di dalamnya,
perintah dan command, variabel dan perulangannya. Tidak sekali lagi penulis katakan tidak, karena
artikel ini ditujukan untuk para pemula yang ingin berkenalan dan berjabat tangan dengan PHP.
Database MySQL Rumit?
Database MySQL adalah database yang sangat powerfull, stabil, mudah, disukai, dan gratis
(mungkin karana sifatnya yang gratis inilah yang buat orang tertarik). MySQL sangat banyak dipakai
dimuka bumi ini. Kalau anda seorang developer web maka anda pasti telah mengenal atau
setidaknya telah mendengar kehebatannya. Nah, untungnya PHPTriad juga memberikan fasilitas ini
untuk kita gunakan, setidaknya untuk kita pelajari. Akan tetapi berulang kali penulis katakan artikel
ini tidak membahas MySQL expert, karena hal itu adalah di luar dari cakupan artikel ini. Tapi satu
yang bisa penulis pastikan. Apakah Database MySQL rumit? Penulis jawab keras-keras “TIDAK”
Bermain dengan MySQL
Sudah penulis katakan berulang kali kalau PHPTriad dilengkapi dengan database MySQL juga. Jadi
bagi anda yang membutuhkan tempat untuk menyimpan data (store), dan untuk mengambil kembali
data anda (retrieve), anda boleh pergunakan fasilitas ini. Mari kita lanjutkan penomoran kita! Dan
karena penulis orangnya pemalas maka penulis tidak akan mengkonfigurasikannnya secara manual.
Kalau anda sama dengan penulis silahkan ikuti saja langkah di bawah!
7. Sekarang coba anda cari dan klik dua kali pada file “winmysqladmin” yang terletak pada
direktori c:apachemysqlbinwinmysqladmin. File ini dibuat untuk mempermudah
konfigurasi MySQL di windows lebih gampang.
8. Perhatikan, untuk pertama sekali anda akan diminta untuk mengisikan “user name” dan
“password”, silahkan diisi. Hal ini akan berpengaruh pada koneksi skrip PHP anda dengan
database MySQL. Coba perhatikan gambar 5! Sebagai contoh penulis buat
username:”abe”, dan password:”poetra”!
9. Tekan OK. Dan anda akan melihat ikon di sudut kanan bawah (seperti lampu traffic light).
Jika anda ingin melakukan konfigurasi ulang, anda bisa klik pada lampu traffic tersebut,
eh.. maksudnya ikon tersebut dan pilih “Show Me”. Anda juga bisa ubah username dan
password anda pada tab “My.ini Setup”.
Created By Muhammad Syahrizal 4
Perhatikan gambar 5!
Gambar 5
10. Setelah anda modifikasi silahkan disimpan! Sebaiknya restart dulu komputer anda untuk
lebih baiknya. Sekarang anda boleh bermain-main dengan MySQL sepuasnya sampai baju
anda kotor ataupun sampai belepotan dengan lumpur.
PHP VS MySQL? Silahkan!
Sebenarnya penulis bingung, apakah penulis mulai dengan perintah-perintah MySQL dulu atau kita
bahas konektifitas PHP dan MySQL terlebih dahulu! Ya udah kita bahas konektifitasnya aja dulu
baru ‘ntar kita bahas tentang command linenya. Silahkan ikuti langkah-langkah berikut:
• Pertama sekali untuk mengaktifkan layanan MySQL anda terlebih dahulu harus melakukan
Start – Programs – PHPTriad – Start MySQL. Akan tampil jendela baru warna hitam
(seperti jendela DOS), biarkan, dan biasanya ini akan hilang dengan sendirinya.
• Seperti biasa pula buka lagi editor NOTEPAD anda, tuliskan skrip dibawah ini:
<?php
$con=mysql_connect ('localhost','abe','poetra');
$db=mysql_select_db ('test');
if ($con)
{ echo "woi sudah konek!"; }
else
{ echo "kok gak koknek ya?"; }
?>
• Simpan dengan nama “db.php” pada direktori C:Apachehtdocs
• Buka browser anda lalu ketikkan http://localhost/db.php
• Anda akan melihat kata “Woi Sudah konek!” tampil pada browser anda.
Penjelasan :
Mari kita bahas satu persatu (secara umum saja) skrip di atas.
• <?php dan ?> adalah tag pembuka dan tag penutup
• variabel $con=mysql_connect (‘localhost’,’abe’,’poetra’);
Created By Muhammad Syahrizal 5
Perintah show databases berfungsi untuk menampilkan keseluruhan database yang ada di dalam
MySQL. Dan hasilnya akan seperti ini!
+------------+
| Database |
+------------+
| mysql |
| test |
+------------+
2 rows in set (0.00 sec)
Ini berarti di dalam MySQL terdapat dua database, yaitu “mysql” dan “test”. Sampai saat ini pasti
anda bingung mengapa di dalam database MySQL terdapat database “mysql” pula?
Sekarang kita lanjut saja. Berarti kita telah tau database apa saja yang ada pada MySQL. Mari kita
gunakan database “test” untuk mencoba-coba perintah-perintah SQL kita. Caranya :
mysql> use test;
Database changed
Berarti sekarang kita sudah menggunakan database “test”. Lihat pesan database changed yang
berarti database yang akan kita gunakan telah berganti menjadi database “test”.
Perintah use nama_db; berfungsi untuk mengganti database! Dan penulis ingatkan, setiap membuat
suatu perintah atau query jangan lupa untuk menuliskan tanda “;” atau titik-koma.
Apakah anda ingin tau tabel yang ada di dalam database test? Gunakan perintah show tables; untuk
melihat keseluruhan tabel.
mysql> show tables;
Empty set (0.00 sec)
Anda lihat ada pesan “Empty Set (0.00 sec)”, ini menandakan kalau database “test” belum ada
tabelnya. Mau lihat cara membuat tabelnya?
Ketikkan perintah create table nama_table; untuk membuat tabel pada database test.
mysql> create table data (
id int (10) not null auto_increment,
nama varchar (100) not null,
email varchar (100) not null,
phone varchar (20) not null,
primary key(id));
Query OK, 0 rows affected (0.00 sec)
Sebenarnya kita dapat mengetikkan perintah di atas memanjang serperti ini “create table data (id int
(10) not null auto_increment, nama varchar (100) not null, email varchar (100) not null, phone
varchar (20) not null, primary key(id));” tanpa di sertai menekan “enter”.
Situasinya sekarang kita telah memiliki tabel “data” dan field-fieldnya pada database “test”, tidak
percaya? Sekarang coba lagi perintah show tables; untuk melihat apakah tabel “data” kita telah
dibuat.
mysql> show tables;
+------------------+
| Tables_in_test |
+------------------+
| data |
+------------------+
1 row in set (0.00 sec)
Created By Muhammad Syahrizal 7
Lihat tabel “data” anda telah hadir. Sekarang permasalahannya bagaimana kita melihat field-field
yang ada di dalamnya? Mari kita lihat bersama.
mysql> desc data;
+---------+----------------------+------+-------+----------+--------------------+
| Field | Type | Null | Key | Default | Extra |
+---------+----------------------+------+-------+----------+--------------------+
| id | int(10) | | PRI | NULL | auto_increment |
| nama | varchar(100) | | | | |
| email | varchar(100) | | | | |
| phone | varchar(20) | | | | |
+---------+----------------------+------+-------+----------+--------------------+
4 rows in set (0.00 sec)
Untuk melihat field-field di dalam tabel anda bisa mempergunakan describe atau desc saja. Terserah
mana yang anda suka. Dari hasil perintah desc data di atas kita lihat field-field yang ada adalah “id”,
“nama”, “email”, dan “phone”. Akan tetapi field-field ini masih kosong. Anda ingin mengisinya?atau
biarkan saja kosong.
Created By Muhammad Syahrizal 8
Pengenalan Pemrograman
E-Commerce dengan PHP dan
MySQL
Definisi E-Commerce ( Electronic Commerce) : E-commerce merupakan suatu cara
berbelanja atau berdagang secara online atau direct selling yang memanfaatkan fasilitas
Internet dimana terdapat website yang dapat menyediakan layanan "get and deliver". Ecommerce
akan merubah semua kegiatan marketing dan juga sekaligus memangkas biayabiaya
operasional untuk kegiatan trading (perdagangan) .
Proses yang ada dalam E-commerce adalah sebagai berikut :
• Presentasi electronis (Pembuatan Web site) untuk produk dan layanan.
• Pemesanan secara langsung dan tersedianya tagihan.
• Otomasi account Pelanggan secara aman (baik nomor rekening maupun nomor Kartu
Kredit).
• Pembayaran yang dilakukan secara Langsung (online) dan penanganan transaksi
Keuntungan yang diperoleh dengan menggunakan transaksi melalui E-commerce bagi suatu
perusahaan adalah sebagai berikut :
• Meningkatkan pendapatan dengan menggunakan online channel yang biayanya lebih
murah.
• Mengurangi biaya-biaya yang berhubungan dengan kertas, seperti biaya pos surat,
pencetakan, report, dan sebagainya.
• Mengurangi keterlambatan dengan mengunakan transfer elektronik / pembayaran
yang tepat waktu dan dapat langsung dicek.
• Mempercepat pelayanan ke pelanggan, dan pelayanan lebih responsif.
Created By Muhammad Syahrizal 9
Gambar 1. Contoh Aplikasi E-Commerce : Pembelian CD dengan Kartu Kredit
Arsitektur dan Konfigurasi Sistem
Arsitektur dasar dari aplikasi web ini adalah arsitektur clientIserver. Artinya pemrosesan
aplikasi ini dijalankan melibatkan kedua sisi yakni sisi mesin server pusat dan sisi client. Hal
ini berbeda dengan misalnya aplikasi Microsoft Word yang hanya melibatkan satu sisi saja
yaitu sisi client. Atau bagi pengguna mesin VAX yang hanya menggunakan sisi server saja
sedangkan sisi client hanya dumb terminal saja yang tidak melakukan pemrosesan apapun di
sisi client.
Created By Muhammad Syahrizal 10
Gambar 2. Arsitektur Client/Server
Stateless Web Server
Untuk aplikasi E-Commerce ini web server harus dapat mengingat siapa / identitas pengguna
yang sedang melakukan browsing setiap halaman. Pada dasarnya aplikasi web dan protokol
HTTP adalah stateless. Artinya setiap merespon sebuah request HTTP, server akan selesai
bekerja (complete) dan tidak melakukan pencatatan apa yang telah dilakukan oleh pengguna
sebelumnya dan terhadap siapa identitas pengguna. Server memperlakukan informasi
permintaan (request) secara serial, satu persatu pada saat request masuk. Tidak ada koneksi
permanen (persistence) yang berjalan setelah sebuah halaman telah selesai dilayani /
dikerjakan.
Created By Muhammad Syahrizal 11
Gambar 3. Perbandingan State dalam Sistem Aplikasi: A.State yang kontinyu dalam aplikasi
desktop, dan B.Stateless protokol dalam aplikasi web
Agar sebuah situs web mempunyai memori / state, dalam hal ini aplikasi ini mampu
mengingat ‘siapa memesan apa’, beberapa informasi yang mengidentifikasi pengguna harus
dikirim dengan setiap request halaman web. Informasi tersebut disimpan dengan
menggunakan session.
Session tersebut dipergunakan untuk merekam / tracking aktivitas pengguna yang melalui
sejumlah halaman pada website, misalnya pada jenis aplikasi Shopping Cart (kereta belanja).
Direkam pula informasi identitas pengguna yang memiliki kereta belanja tersebut.
Dengan PHP, untuk penggunaan session ini mula-mula dilakukan pengaturan pada file
php.ini yang menunjukkan session dimulai (start). Dengan ini PHP akan membuat suatu
identifier unik dan file yang berkaitan, yang disimpan di server (lokasinya di atur di php.ini
dan nilai defaultnya di direktori /tmp). Kemudian pada saat pengguna berkunjung pada
halaman-halaman situs web, semua informasi variabel yang dipilih oleh pengguna akan
Created By Muhammad Syahrizal 12
disimpan dalam file pada server, dan semua script yang dibutuhkan untuk melacak sebagai
identifier unik.
Implementasi session dapat mempergunakan cookie yang disimpan pada sisi client, atau
dipropagasikan melalui alamat URL.
Untuk penggunaan cookie, yaitu dengan passing variabel melalui cookie yang menyimpan
informasi semua elemen barang belanja dan harganya. Namun hal ini memiliki keterbatasan
yaitu dari (http://www.netscape.com/newsref/std/cookie_spec.html) mengenai spesifikasi
cookie yang hanya mengijinkan 20 cookie per domain dan berukuran hanya 4 bytes per
cookie. Cara lain adalah dengan memberi identitas / identifier unik pada masing-masing
pengguna, suatu nilai unik yang mengidentifikasi siapa pengguna tersebut. Sehingga pada
saat pengguna menambahkan satu item pada kereta belanja, informasi yang berkaitan dengan
identifier unik tadi disimpan di komputer server. Jika menggunakan cookie untuk fungsi
penyimpan informasi tadi, diperlukan membuat string unik yang akan diletakkan dalam
cookie, dalam direktori di server akan terdapat sebuah file yang memiliki nama yang sama
sebagai ID pengguna yang unik. Dalam file tersebut dapat disimpan semua variabel yang
berkaitan dengan pengguna. Contohnya terdapat array berisi item-item barang yang
ditambahkan oleh seorang pengguna ke dalam kereta belanjanya.
Terdapat keterbatasan penggunaan cookie, yakni bila browser pengguna di atur untuk
menolak (reject) cookie.
Metode lain yang dapat digunakan adalah dengan propagasi URL, yaitu dengan mengaktifkan
flag –enable-trans-sid dalam konfigurasi PHP, hal ini berguna agar session id akan secara
otomatis ditambahkan ke setiap relative link pada halaman-halaman web setiap kali session
telah dimulai.
Konfigurasi Sistem dan Tool Yang Digunakan
Masalah lain dalam aplikasi ini adalah mengenai aspek keamanan dalam memperoleh
informasi dari pengguna, terutama data mengenai penggunaan kartu kredit. Informasi ini
perlu diverifikasi oleh institusi yang berkualifikasi dan memerlukan pengaturan konfigurasi
serta penggunaan beberapa macam tool.
Dalam membangun aplikasi ini dipergunakan algoritma untuk memelihara (maintain) state,
pengambilan informasi secara secure terhadap kartu kredit, menggunakan kode pemrograman
khusus dan penggunaan opsi instalasi khusus.
Di bawah ini akan dibahas mengenai teori dasar enkripsi dan sekuriti Web. Kemudian akan
dibahas tool mandatory untuk instalasi web server Apache.
Enkripsi Public-Key / Private-Key
Mesin di web menggunakan skema keamanan Public-key/Private-key. Artinya
komputer yang akan berkomunikasi menggunakan data terenkripsi harus memiliki dua
buah kunci untuk mengenkripsi data dan mendekripsinya. Pertama, public-key tersedia
bagi siapa saja yang ingin melakukan komunikasi terhadapnya. Sehingga siapapun
yang ingin melakukan komunikasi terhadap sebuah mesin secara secure akan memiliki
salinan dari Public key mesin tersebut. Namun public key ini tidak cukup untuk dapat
mendekripsi data, masih dibutuhkan Private key yang bersifat rahasia. Misalnya pada
pemrosesan kartu kredit dengan sebuah bank, nasabah memiliki Public key bank
tersebut dimana ia dapat melakukan dekripsi informasi, namun masih diperlukan
Created By Muhammad Syahrizal 13
Private key yang disimpan oleh bank tersebut, untuk dapat melakukan dekripsi data.
Gambar 4. Pengiriman Data Terenkripsi antara Pengguna dengan Server E-Commerce
Sertifikat
Meski masalah keamanan sudah ditangani dengan keberadaan Public key / Private key,
masih ada masalah yang perlu diperhatikan yakni pesan / data yang diperoleh adalah
benar dari pihak yang memiliki otorisasi, bukan dari pihak lain yang tidak
berkepentingan atau yang menyalahgunakan. Untuk itu dibutuhkan pihak ketiga untuk
memverifikasi pesan yang datang.
Pesan terenkripsi yang dikirim dan diterima akan memiliki semacam ‘signature’, dan
verifikasi selanjutnya dilakukan terhadap ‘signature’ tersebut. Untuk itu, organisasi
yang akan mempergunakan komunikasi melalui web memerlukan kerjasama dengan
organisasi lain yang mengeluarkan sertifikat yang memverifikasi pengirim pesan.
Organisasi ini pulalah yang memberikan Publik key dan Private key. Salah satu contoh
organisasi yang menerbitkan sertifikat sekuriti adalah VeriSign.
Secure Protocol
Protokol HTTP secara alamiah bersifat terbuka terhadap penyusupan. Paket-paket data
yang melintas melalui router Internet dapat disadap dan dibaca. Namun informasi
kartu kredit diinginkan agar tidak mudah terbaca. Untuk itu dibutuhkan penggunaan
Secure Socket Layer atau SSL. SSL adalah protokol tambahan dimana key dan
sertifikat dari suatu situs e-commerce akan ditransfer ke browser atau ke server lain.
Melalui SSL, browser akan dapat memverifikasi sertifikat dari situs tersebut sehingga
dapat mengetahui identitas pengirim sebenarnya. Tata cara enkripsi ini masih
mengandung kelemahan yakni pada aspek sumber daya manusia apabila kurang jujur,
yakni apabila terjadi akses tidak sah dilakukan oleh orang yang sudah berada dalam
sistem.
Enkripsi dan Tool Sekuriti
Untuk web server Apache, ditambahkan modul SSL pada saat instalasinya.
Untuk dapat melakukan autorisasi kartu kredit, diperlukan sertifikat. Contoh yang
paling sering digunakan adalah VeriSign, yang memiliki layanan PayfloPro.
Setelah Apache dikonfigurasi dengan SSL, maka website aplikasi dapat berkomunikasi
dengan browser secara secure. Cirinya: URL dimulai dengan https:// , browser akan
mencari Port 443 dan mencari serifikat. Dalam PHP, banyak fitur yang dapat
digunakan untuk dapat berhubungan dengan situs lain. Misalnya fungsi fopen().
Namun fungsi-fungsi berhubungan dengan filesystem atau URL tidak mendukung
bekerja dengan SSL, sehingga diperlukan kumpulan fungsi khusus atau program diluar
PHP. Opsi-opsi dalam PHP4 dapat mendukung layanan proses pembayaran.
Created By Muhammad Syahrizal 14
Gambar 5. Komunikasi Antar Situs dalam Aplikasi E-Commerce
Penggunaan Firewall
Firewall digunakan untuk melindungi jaringan lokal dari serangan luar. Ada beberapa
pilihan untuk menempatkan web server :
web server ditempatkan di luar dari Firewall (lihat gambar 6), adapun keuntungan
dengan menempatkan server diluar dari firewall adalah bahwa web server
mungkin saja menjadi subject penyerangan dari pihak luar; maka mereka "sniffer"
tidak akan dapat meningkatkan serangan berikutnya untuk merusak server-server
lainnya.
Dengan kata lain web server tidak akan dapat keuntungan dari segala
macam bentuk pelindungan yang di usahakan firewall.
Created By Muhammad Syahrizal 15
Gambar 6. Web Server di Luar Firewall
Web server di dalam firewall (lihat gambar 7). Jika diterapkan seperti ini, perlu
dikonfigurasi firewall menjadi akan melewatkan transaksi pada TCP port 80, atau
dengan membolehkan secara langsung melewatkan paket maupun dengan
menggunakan mekanisme proxy. Keuntungan dari menempatkan web server di dalam
firewall yaitu firewall akan memblok akses dari luar yang menggunakan layanan
Internet lainnya, seperti Telnet, FTP. Tetapi apabila penyusup "sniffer" tersebut
menggunakan kesalahan dari program CGI script, mereka akan mempunyai akses tak
terbatas ke jaringan lokal.
Gambar 7. Web Server yang Diletakkan Di dalam Firewall
Pilihan ketiga, yang paling baik, yaitu menggunakan dua firewall: satu untuk
melindungi jaringan internal / lokal dan yang satunya lagi untuk melindungi web
server (lihat gambar 8).
Created By Muhammad Syahrizal 16
Gambar 8. Webserver yang Diletakkan di Antara Internal Firewall dan External Firewall
PayFloPro dan Cybercash
Untuk penggunaan VeriSign untuk pemrosesan kartu kredit, diperlukan instalasi
pustaka kode ( code library) yang diperoleh dari VeriSign. Selanjutnya dikompilasi
ulang dengan PHP sehingga akan dapat mengenali fungsi-fungsi tersebut (fungsifungsi
pfpro) . Fungsi-fungsi tersebut akan memproses permintaan (request) dan akan
mengembalikan jawaban (response). Setelah itu response tersebut akan dibandingkan
dengan kode yang telah diketahui, setelah itu akan diketahui apakah transaksi tersebut
sukses atau tidak.
Selain PayFloPro, dapat juga digunakan Cybercash, yang diinstal sebagai pustaka /
library pada PHP (fungsi-fungsi cybercash).
CURL
Merupakan akronim dari fungsi-fungsi pustaka Client URL. Kode pustaka ini
dipergunakan untuk berkomunikasi melalui Internet menggunakan sembarang protokol
di sisi lawan. Kode ini mendukung Gopher, Telnet, dan HTTPS. Untuk dapat
menggunakan fungsi ini, konfigurasi instalasi PHP harus menyertakan flag –with-curl.
Pemrosesan Kartu Kredit
Pemrosesan kartu kredit dilakukan oleh perusahaan yang khusus untuk itu, terdapat beberapa
nama perusahaan yang cukup dikenal, namun semuanya memiliki kesamaan cara kerja.
Mulamula dikirim permintaan / request dengan informasi kartu kredit: nomor, tanggal kadaluarsa,
alamat, dan sebagainya, dan kemudian perusahaan tersebut akan mengirimkan kode
kembalian sebagai respon. Kode PHP di sini adalah berfungsi untuk membandingkan kode
yang diterima dengan nilai yang didapat sebelumnya dari agen pemrosesan. Untuk aplikasi
ini dipergunakan Authorizenet.com sebagai pemroses kartu kredit.
Rancangan Aplikasi E-Commerce
Gambaran aplikasi e-commerce akan diuraikan sebagai berikut. Mula-mula aplikasi akan
menampilkan daftar barang yang tersedia. Lalu pengguna dapat memilih beberapa item yang
ingin dibeli. Pada saat pengguna memilih suatu item barang, identitas barang tersebut dicatat,
dan selanjutnya user dapat melanjutkan berbelanja / memilih item yang lain. Server
mengingat item apa saja yang telah dipesan. Pada saat pengguna melanjutkan browsing,
Created By Muhammad Syahrizal 17
server memelihara track pengguna tersebut dan pengguna tersebut dapat melakukan check
out terhadap item-item yang telah dipesan.
Untuk dapat melaksanakan hal ini, digunakan metode untuk memelihara state seperti yang
telah dibahas di bagian sebelum ini.
Rancangan Layar
Setiap halaman pada aplikasi ini memiliki tombol yang memungkinkan pengguna untuk
langsung melakukan checkout. Pada halaman yang menampilkan daftar barang terdapat
kumpulan form yang memungkin pengguna untuk memberi indikasi item mana yang akan
dibeli. Setiap item dapat ditentukan secara lebih spesifik sesuai jenis barang yang ada,
misalnya untuk aplikasi toko furniture online terlebih dahulu ditentukan jenis furniture meja,
terdiri atas meja bulat, meja kotak, meja tulis, dan sebagainya. Form untuk pemesanan
menggunakan kotak teks untuk jumlah pesanan, dan tombol ‘Order’, yang pada contoh meja
tadi dicantumkan untuk masing-masing jenis meja.
Selanjutnya ditampilkan satu halaman yang berisi daftar semua item yang sedang berada
dalam kereta belanja (shopping cart). Halaman ini memungkinkan pengguna untuk
menambah atau mengurangi jumlah item yang dipesan, dan menghapus suatu item pesanan.
Pada akhir proses pemesanan, ditampilkan halaman yang mengumpulkan informasi
pengguna, preferensi, dan halaman untuk memulai pemrosesan kartu kredit. Halaman ini juga
menunjukkan pesan bila ada kesalahan informasi atau terdapat penolakan autorisasi kartu
kredit oleh agen pemroses.
Selanjutnya, setelah transaksi selesai diproses, terdapat tanda terima transaksi yang
mengkonfirmasi pesanan dan menyampaikan nomor id pesanan kepada pengguna.
Yang penting diperhatikan untuk pengembangan aplikasi e-commrce adalah informasi nomor
kartu kredit dan informasi personal lainnya harus aman dan tidak mudah dilihat oleh orang
yang tidak berhak.
Created By Muhammad Syahrizal 18
Gambar 9. Diagram Alir Penggunaan Aplikasi E-Commerce
Created By Muhammad Syahrizal 19
Gambar 10. Rancangan Layar Halaman Depan Contoh Web E-Commerce
Gambar 11. Rancangan Layar Halaman Contoh Daftar Barang
Created By Muhammad Syahrizal 20
Gambar 12. Rancangan Layar Halaman Contoh Daftar Pesanan
Gambar 13. Rancangan Layar Halaman Contoh Pemrosesan Kartu Kredit
Created By Muhammad Syahrizal 21
Rancangan Basis Data
Gambar 14. Rancangan Basis Data Aplikasi Web E-Commerce
Tabel utama yang digunakan dalam aplikasi ini adalah tabel Pesanan, yang mencatat order
pemesanan. Tabel-tabel lain berelasi dengan tabel ini. Tabel Pesanan menyimpan informasi
id_user, id_alamat, dan semua informasi yang dibutuhkan untuk pembayaran. Tabel Pesanan
ini memiliki relasi one-to-many dengan tabel Item yang berisi informasi item-item barang
yang terdapat dalam sebuah order. Informasi mengenai pengguna dan alamat pengguna
dipisahkan, seorang pengguna dapat didentifikasi dari alamat e-mail yang dimilikinya, dan
alamat terdiri atas alamat kantor dan rumah. Tabel Pengiriman berisi informasi opsi yang
diberikan untuk pengiriman barang. Misalnya terdapat pilihan menggunakan UPS, DHL,
TIKI, Pos, dan sebagainya. Tabel Status berisi catatan mengenai status pesanan, yaitu dapat
berupa status dikembalikan (backordered), dikirim (shipped), atau dibatalkan (cancelled).
Terdapat pula tabel Jenis_Kartu untuk menyimpan informasi jenis kartu kredit seperti Visa,
Mastercard, dan sebagainya.
Created By Muhammad Syahrizal 22
Tabel 1. Tabel Alamat
Tabel 2. Tabel Jenis_Kartu
Tabel 3. Tabel Pesanan
Created By Muhammad Syahrizal 23
Tabel 4. Tabel Pengiriman
Tabel 5. Tabel Status
Created By Muhammad Syahrizal 24
Tabel 6. Tabel User
Tabel 7. Tabel Item
Keamanan Nomor Kartu Kredit dalam Basis Data
Nomor kartu kredit tidak disimpan di dalam basis data, karena dapat mengurangi keamanan.
Perangkat komputer dapat dinilai sebagai suatu alat yang tidak aman, karena dapat diakses
oleh orang lain. Bila digunakan ISP (Internet Service Provider) untuk hosting web site ini,
tentunya akan sangat diragukan keamanannya, karena ISP menggunakan shared server yang
digunakan secara bersama, meskipun telah menggunakan konfigurasi secure server yang
ditawarkan oleh ISP tersebut. Nomor kartu kredit yang tersimpan dalam basis data akan dapat
diakses oleh orang lain yang mempunyai akses terhadap mesin server. Juga tidak ada
kebutuhan untuk menyimpan nomor kartu kredit dalam bentuk apapun. Yang diperlukan oleh
aplikasi ini adalah memvalidasi nomor tersebut saja, dan segera menghapusnya dari memori
setelah selesai. Jika nomor kartu kredit ini tidak pernah dituliskan ke hardisk, akan menjadi
sangat aman karena akan terhindar dari kemungkinan pencurian oleh yang tidak berhak.
Created By Muhammad Syahrizal 25
Gambar 15. Komunikasi Antar Situs dan Penghapusan Informasi Kartu Setelah Proses
Selesai
Kode Program
Pemrograman untuk aplikasi e-commerce ini diimplementasikan dengan PHP. Fungsi-fungsi
utama yang dipergunakan dalam kode program di sini adalah fungsi yang berhubungan
dengan session dan fungsi yang berkaitan dengan pustaka cURL.
Konsep pemrograman berorientasi objek digunakan dalam kode program ini. Digunakan sifat
inheritance, yakni jika sebuah kelas / class mewarisi properti dan metode (properties and
methods) dari kelas induk / parent class, ia memiliki akses terhadap semua metode dan
properti dari induknya. Dan sebuah aplikasi dapat dibangun dengan memperluas / extending
sebuah kelas berdasarkan kelas lain yang telah ada.
Fungsi Session
Fungsi session_register() digunakan untuk menyatakan memulai session, sekaligus
didefinisikan variabel apa saja yang akan disimpan dalam session. Fungsi session_register()
diletakkan pada baris pertama program, karena fungsi ini mengirim cookies yang merupakan
salah satu tipe dari HTTP header. Jika suatu tipe header dikirim setelah teks dikirim ke
browser akan mengakibatkan error.
<?
session_register(“var1”);
$var1 = “nilai1”;
?>
Created By Muhammad Syahrizal 26
Pada waktu diakses pertama kali, halaman tersebut akan memulai session. Akan dikirim
cookie atau session id yang akan ditambahkan ke dalam relative link. Perintah
session_register akan memerintahkan PHP untuk melakukan pencarian variabel $var1 pada
file session. Jika ada, variabel tersebut akan tersedia / available secara global, atau dapat pula
diakses melalui array $HTTP_SESSION_VARS. Setelah halaman tersebut diproses, nilai
terakhir dari variabel yang terdaftar akan dituliskan ke file session.
Fungsi-fungsi yang digunakan untuk session ini :
Session_destroy() : fungsi untuk menonaktifkan session dan semua variabel yang
berkaitan dengannya.
Session_unregister() : fungsi untuk menghapus nilai dari suatu variabel dalam file
session.
Session_set_save_handler() : fungsi yang memungkinkan untuk mengatur sendiri
metode penyimpanan (storing), pengambilan (retrieving), dan penulisan (writing)
session handler.
Metode session handler yang dipilih adalah yang manajemen session berdasarkan file-based.
Namun metode ini tidak sesuai digunakan untuk lingkungan tercluster (clustered
environment) dimana beberapa mesin bekerja secara bersama untuk melayani satu situs,
untuk lingkungan seperti ini tidak dapat menggunakan local filesystem.
Session_encode(): fungsi untuk menuliskan variabel ke dalam basis data, variabel tersebut
harus terlebih dahulu diubah formatnya ke dalam format yang dimengerti oleh basis data.
Fungsi session_encode berguna untuk mengubah format ini.
$str = session_encode(string)
Session_decode() : fungsi untuk membalik proses encoding di atas, sehingga variabel
dikembalikan kedalam representasi PHP.
Fungsi-fungsi cURL
Untuk aplikasi ini diperlukan komunikasi dengan layanan validasi kartu kredit, dilakukan
dengan fungsi cURL. Cara kerjanya adalah mula-mula fungsi ini akan mengirim pesan yang
secure melalui HTTPS, dan layanan yang memvalidasi kartu kredit tersebut akan
mengembalikan response, yang kemudian diproses lebih lanjut dengan PHP.
Fungsi cURL yang digunakan :
Curl_init() : fungsi ini mengembalikan nilai integer yang serupa dengan nilai identifier
kembalian yang dikembalikan oleh mysql_connect() atau pointer file yang
dikembalikan oleh fopen(). Pada kasus seperti ini disebut dengan cURL handle, atau
ch. Pada argument tunggal pada fungsi ini diberikan URL yang akan diakses.
Int curl_init ([string url])
$cc_company_url =
https://secure.process.site/transact.dll?exp=foo&cardtype=bar
$ch = curl_init($cc_company_url);
Fungsi ini akan memulai session cURL. Panggilan pada URL ini tidak akan berfungsi
hingga fungsi curl_exec dieksekusi.
Curl_setopt() : sebelum komunikasi URL dieksekusi, perlu diset salah satu opsi cURL
yaitu opsi CURLOPT_RETURNTRANSFER. Opsi ini untuk mengembalikan hasil
dari request https ke dalam variabel PHP.
Curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
Curl_exec() : fungsi ini untuk mengeksekusi transfer. Sebuah argumen digunakan yaitu
berasal dari hasil kembalian fungsi curl_init() dan digunakan pula pengesetan opsiopsi
lain.
Bool curl_exec (int ch)
Curl_close(): fungsi ini menutup koneksi cURL menggunakan curl handle :
Created By Muhammad Syahrizal 27
Void curl_close (int ch)
Kumpulan fungsi-fungsi ini yang menjalankan transaksi dan mengembalikan hasil ke
dalam variabel $data.
$ch = curl_init($authorize_net_url);
curl_setopt($ch, CURL_RETURNTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);
Hasil dan Pembahasan
Prototipe ini dibangun menggunakan perangkat lunak open source serta memiliki
karakteristik cross-platform. Dari hasil diskusi dengan pengguna, diperoleh masukan
mengenai kebutuhan pengguna akan perangkat lunak e-commerce, namun spesifik pada suatu
produk tertentu, serta kebutuhan untuk memperkaya fungsi-fungsi multimedia sehingga
secara visual lebih menarik.
Diperlukan kerja sama dengan supplier / distributor produk komersil untuk dapat
menawarkan produk-produknya melalui e-commerce. Juga jasa kurir diperlukan untuk dapat
melakukan layanan antar kepada konsumen dengan cepat.
Bagi lembaga penelitian atau lembaga pendidikan, perlu juga memperhatikan masalah HKI
dalam layanan e-commerce untuk produk-produk karya intelektual, misalnya untuk layanan
e-commerce dalam situs web digital library. Diperlukan kerjasama dengan pemilik hak
intelektual tersebut untuk menawarkan produk-produk karya intelektual tersebut secara
komersil.
Dalam sebuah seminar mengenai e-commerce di Bandung dikemukakan bahwa faktor
terpenting dalam aplikasi e-commerce adalah delivery. Adanya sistem distribusi multi level
marketing juga diinformasikan dapat memotong jalur delivery supaya lebih cepat sampai ke
tangan konsumen.
Created By Muhammad Syahrizal 28
Dasar Pemrograman PHP
dan MySQL
PENGENALAN PHP
PHP adalah bahasa scripting yang menyatu dengan HTML dan dijalankan pada server
side. Artinya semua sintaks yang kita berikan akan sepenuhnya dijalankan pada server
sedangkan yang dikirimkan ke browser hanya hasilnya saja.
File contoh1.php:
<html>
<head>
<title>
Contoh Sederhana
</title>
</head>
<body>
<?php
echo(“Hallo apakabar? Nama saya PHP script”);
?>
</body>
</html>
VARIABLE
Dalam PHP setiap nama variable diawali tanda dollar ($). Misalnya nama variable a
dalam PHP ditulis dengan $a. Jenis suatu variable ditentukan pada saat jalannya
program dan tergantung pada konteks yang digunakan.
File contoh2.php:
<?php
$a=”5”;
$b=”2”;
$hasil=$a+$b;
echo($hasil);
?>
File contoh3.php:
<?php
$a=”5”;
$b=”2”;
$hasil=$a.$b;
echo($hasil);
?>
Created By Muhammad Syahrizal 29
STRUKTUR KONTROL IF
Konstruksi IF digunakan untuk melakukan eksekusi suatu statement secara bersyarat.
Cara penulisannya adalah sebagai berikut:
if (syarat)
{
statement
}
atau:
if (syarat)
{
statement
}
else
{
statement lain
}
atau:
if (syarat pertama)
{
statement pertama
}
elseif (syarat kedua)
{
statement kedua
}
else
{
statement lain
}
File contoh5.php:
<?php
$a=4;
$b=9;
if ($a>$b)
{
echo(“a lebih besar dari pada b”);
}
elseif ($a<$b)
{
echo(“a lebih kecil b”);
}
else
{
echo(“a sama dengan b”);
}
?>
WHILE
Bentuk dasar dari statement While adalah sebagai berikut:
while (syarat)
{
statement
}
Arti dari statemant While adalah memberikan perintah untuk menjalankan statement
dibawahnya secara berulang-ulang, selama syaratnya terpenuhi.
Created By Muhammad Syahrizal 30
File contoh6.php:
<?php
$a=1;
while ($a<10)
{
echo($a);
$a++;
}
?>
FOR
Cara penulisan statement FOR adalah sebagai berikut:
for (ekspresi1; ekspresi2 ; ekspresi3)
statement
ekspresi1 menunjukkan nilai awal untuk suatu variable
ekspresi2 menunjukkan syarat yang harus terpenuhi untuk menjalankan statemant
ekspresi3 menunjukkan pertambahan nilai untuk suatu variable
File contoh7.php:
<?php
for ($a=0;$a<10;$a++)
{
echo(“Nilai A = ”);
echo(“$a”);
echo(“<br>”);
}
?>
SWITCH
Statement SWITCH digunakan untuk membandingkan suatu variable dengan beberapa
nilai serta menjalankan statement tertentu jika nilai variable sama dengan nilai yang
dibandingkan. Struktur Switch adalah sebagai berikut:
switch (variable)
case nilai:
statement
case nilai:
statemant
case nilai:
statement
.
.
.
File contoh8.php:
<?php
$a=2;
switch($a)
{
case 1:
echo(“Nilai variable a adalah satu”);
break;
case 2:
echo(“Nilai variable a adalah dua”);
break;
case 3:
echo(“Nilai variable a adalah tiga”);
break;
Created By Muhammad Syahrizal 31
}
?>
REQUIRE
Statement Require digunakan untuk membaca nilai variable dan fungsi-fungsi dari
sebuah file lain. Cara penulisan statement Require adalah:
require(namafile);
Statement Require ini tidak dapat dimasukkan diadalam suatu struktur looping misalnya
while atau for. Karena hanya memperbolehkan pemangggilan file yang sama tersebut
hanya sekali saja.
File contoh9.php:
<?php
$a=”Saya sedang belajar PHP”;
function tulistebal($teks)
{
echo(“<b>$teks</b>”);
}
?>
File contoh10.php:
<?php
require(“contoh9.php”);
tulistebal(“Ini adalah tulisan tebal”);
echo(“<br>”);
echo($a);
?>
INCLUDE
Statement Include akan menyertakan isi suatu file tertentu. Include dapat diletakkan
didalam suatu looping misalkan dalam statement for atau while.
File contoh11.php:
<?php
echo(“--------------------------------------<br>”);
echo(“PHP adalah bahasa scripting<br>”);
echo(“--------------------------------------<br>”);
echo(“<br>”);
?>
File contoh12.php:
<?php
for ($b=1; $b<5; $b++)
{
include(“contoh11.php”);
}
?>
Created By Muhammad Syahrizal 32
DASAR-DASAR MySQL
Dalam bahasa SQL pada umumnya informasi tersimpan dalam tabel-tabel yang secara
logik merupakan struktur dua dimensi terdiri dari baris (row atau record) dan kolom(column
atau field). Sedangkan dalam sebuah database dapat terdiri dari beberapa table.
Beberapa tipe data dalam MySQL yang sering dipakai:
MEMBUAT DATABASE DAN TABLE
Untuk masuk ke dalam program MySQL pada prompt jalankan perintah berikut ini:
C:> MYSQL (Enter)
Kemudian akan masuk kedalam MySQL seperti tampilan dibawah ini:
Bentuk prompt “mysql>” adalah tempat menuliskan perintah-perintah MySQL. Setiap
perintah SQL harus diakhiri dengan tanda titik-koma “;” .
Cara untuk membuat sebuah database baru adalah dengan perintah:
create database namadatabase;
Contoh:
create database privatdb;
Untuk membuka sebuah database dapat menggunakan perintah berikut ini:
use namadatabase;
Contoh:
use privatdb;
Perintah untuk membuat tabel baru adalah:
create table namatabel
(
struktur
);
Created By Muhammad Syahrizal 33
Contoh:
Misalkan kita ingin menyimpan data anggota yaitu: nomor, nama, email, alamat, kota.
Sedangkan strukturnya seperti tabel dibawah ini:
Perintah MySQL untuk membuat tabel seperti diatas adalah:
create table anggota(
nomor int(6) not null primary key,
nama char(40) not null,
email char(255) not null,
alamat char(80) not null,
kota char(20) not null
);
Sedangkan data yang akan diisikan dalam tabel anggota adalah sebagai berikut:
Untuk memasukkan sebuah baris (record) kedalam tabel MySQL adalah sebagai
berikut:
insert into namatabel values(kolom1, kolom2, kolom3,…);
Contoh:
insert into anggota values(‘1’,’Arini Nurillahi’,’arini@hotmail.com’,’Jl.Lebak Rejo
7’,’Surabaya’);
Created By Muhammad Syahrizal 34
MENAMPILKAN ISI TABLE
Isi tabel dapat ditampilkan dengan menggunakan perintah SELECT, cara penulisan
perintah SELECT adalah:
select kolom from namatable;
Contoh:
• Untuk menampilkan kolom (field) nomor dan nama pada tabel anggota
select nomor, nama from anggota;
• Untuk menampilkan semua kolom(field) pada tabel anggota
select * from anggota;
• Untukmenampilkan semua kolom pada tabel anggota yang berada pada kota
‘Surabaya’
select * from anggota where kota=’Surabaya’;
• Untuk menampilkan semua kolom pada tabel anggota dengan urut nama
select * from anggota order by nama;
• Untuk menghitung jumlah record pada tabel anggota
select count(*) from anggota;
• Untuk menampilkan kota pada tabel anggota
select kota from anggota;
• Untuk menampilkan kota dengan tidak menampikan kota yang sama pada tabel
anggota
select distinct kota from anggota;
• Untuk menampilkan nama dan email yang mempunyai email di ‘yahoo.com’
select nama,email from anggota where email like ‘%yahoo.com’;
MENGHAPUS RECORD
Untuk menghapus suatu record dengan kriteria tertentu digunakan perintah sebagai berikut:
delete from namatabel where kriteria;
Contoh:
• Menghapus record dari tabel anggota yang bernomor ‘3’
delete from anggota where nomor=’3’;
MEMODIFIKASI RECORD
Untuk memodifikasi (merubah) isi record tertentu adalah dengan menggunakan perintah
sebagai berikut:
update namatabel set kolom1=nilaibaru1, kolom2=nilaibaru2 … where kriteria;
Contoh:
• Merubah e-mail dari anggota yang bernomor 12 menjadi ‘supri@yahoo.com’
dalam tabel anggota.
update anggota set email=’supri@yahoo.com’ where nomor=’12’;
MENGHUBUNGKAN PHP DENGAN MySQL
Agar script PHP yang kita buat dapat berhubungan dengan database dari MySQL dapat
menggunakan fungsi berikut ini:
File utama.php:
<?php
function open_connection()
{
$host=”localhost”;
$username=”root”;
$password=””;
$databasename=”privatdb”;
$link=mysql_connect($host,$username,$password) or die ("Database tidak dapat
Created By Muhammad Syahrizal 35
dihubungkan!");
mysql_select_db($databasename,$link);
return $link;
}
?>
Isi dari variabel $host, $username, $password dan $databasename dapat disesuaikan
sesuai dengan setting pada MySQL server yang ada.
Contoh:
Menampilkan data anggota yang telah dibuat dengan menggunakan script PHP.
File contoh13.php:
<?php
// ----- ambil isi dari file utama.php
require("utama.php");
// ----- hubungkan ke database
$link=open_connection();
// ----- menentukan nama tabel
$tablename="anggota";
// ----- perintah SQL dimasukkan ke dalam variable string
$sqlstr="select * from $tablename";
// ------ jalankan perintah SQL
$result = mysql_query ($sqlstr) or die ("Kesalahan pada perintah SQL!");
// ------ putus hubungan dengan database
mysql_close($link);
// ------ buat tampilan tabel
echo("<table width=100% cellspacing=1 cellpadding=2 bgcolor=#000000>");
echo("<tr><td bgcolor=#CCCCCC>No</td><td bgcolor=#CCCCCC>Nama</td><td
bgcolor=#CCCCCC>E-Mail</td><td bgcolor=#CCCCCC>Alamat</td><td
bgcolor=#CCCCCC>Kota</td></tr>");
// ------ ambil isi masing-masing record
while ($row = mysql_fetch_object ($result))
{
// ----- mengambil isi setiap kolom
$nomor=$row->nomor;
$nama=$row->nama;
$email=$row->email;
$alamat=$row->alamat;
$kota=$row->kota;
// ------ menampilkan di layar browser
echo("<tr><td bgcolor=#FFFFFF>$nomor</td><td bgcolor=#FFFFFF>$nama</td><td
bgcolor=#FFFFFF>$email</td><td bgcolor=#FFFFFF>$alamat</td><td
bgcolor=#FFFFFF>$kota</td></tr>");
}
echo("</table>");
?>
FUNGSI-FUNGSI UMUM
FUNGSI STRING
Fungsi string digunakan memanipulasi string untuk berbagai macam kebutuhan. Disini
akan dibahas beberapa fungsi string yang sering digunakan dalam membuat program
aplikasi web.
AddSlashes
Digunakan untuk menambahkan karakter backslash ( ) pada suatu string. Hal ini
penting digunakan pada query string untuk database, misalkan pada MySQL. Beberapa
karakter yang akan ditambahkan tanda backslahses adalah karakter tanda petik satu ( ‘ ),
Created By Muhammad Syahrizal 36
karakter petik dua ( “ ), backslash ( ) dan karakter NULL.
Sintaks:
addslashes(string)
StripSlashes
Digunakan untuk menghilangkan karakter backslash ( ) pada suatu string.
Sintaks:
string stripslashes(string)
Crypt
Digunakan untuk meng-encrypt dengan metode DES suatu string. Fungsi ini sering
digunakan untuk mengacak string password sebelum disimpan dalam database. Dalam
penggunaan fungsi crypt ini dapat ditambahkan parameter string ‘salt’. Parameter ‘salt’
ini ditambahkan untuk menentukan basis pengacakan. ‘Salt’ string terdiri atas 2
karakter. Jika ‘salt’ string tidak ditambahkan pada fungsi crypt maka PHP akan
menentukan sendiri ‘salt’ string tersebut secara acak.
Sintaks:
crypt(string [ , salt ] )
Echo
Digunakan untuk mencetak isi suatu string atau argumen.
Sintaks:
echo( string argumen1, string argumen2 , ….)
Explode
Digunakan untuk memecah-mecah suatu string berdasarkan tanda pemisah tertentu dan
memasukkan hasilnya kedalam suatu variable array.
Sintaks:
explode(string pemisah , string [, int limit] )
Contoh:
$namahari = “minggu senin selasa rabu kamis jumat sabtu”;
$hari = explode(“ ”, $namahari);
Implode
Kegunaan fungsi ini adalah kebalikan daripada fungsi explode. Fungsi implode
digunakan untuk menghasilkan suatu string dari masing-masing elemen suatu array.
String yang dihasilkan tersebut dipisahkan oleh suatu string telah yang ditentukan
sebelumnya.
Sintaks:
implode(string pemisah , array)
Strip_Tags
Digunakan untuk menghilangkan kode-kode tag HTML pada suatu string.
Sintaks:
striptags(string [, string tags yang tidak dihilangkan] )
StrLen
Digunakan untuk menghitung jumlah karakter suatu string.
Sintaks:
strlen(string)
StrPos
Created By Muhammad Syahrizal 37
Digunakan untuk mencari posisi pertama suatu sub string pada suatu string. Fungsi ini
biasanya digunakan untuk mencari suatu sub string didalam suatu string.
Sintaks:
strlen(string , sub string)
Str_Repeat
Digunakan untuk mengulang isi suatu string.
Sintaks:
str_repeat(string , int jumlah perulangan)
StrToLower
Digunakan untuk merubah suatu string menjadi huruf kecil (lowercase).
Sintaks:
strtolower(string)
StrToUpper
Digunakan untuk merubah suatu string menjadi huruf besar (uppercase)
Sintaks:
strtoupper(string)
SubStr
Digunakan untuk mengambil suatu sub string dengan panjang tertentu dari suatu string pada
posisi tertentu pula.
Sintaks:
substr(string, int posisi , int posisi)
Contoh:
substr(“abcdefg”,0,3); // mengasilkan string “abc”
substr(“abcdefg”,3,2); // menghasilkan string “de”
SubStr_Count
Digunakan untuk menghitung jumlah sub string dalam suatu string
Sintaks:
substr_count( string , string substring)
Contoh:
substr_count(“This is a test”,”is”); // menghasilkan nilai 2
UCFirst
Digunakan untuk mengganti karakter pertama pada suatu string menjadi huruf besar.
Sintaks:
ucfirst(string)
UCWords
Digunakan untuk mengganti karakter pertama pada setiap kata dalam suatu string
menjadi huruf besar.
Sintaks:
ucwords(string)
Created By Muhammad Syahrizal 38
FUNGSI DATE
Digunakan untuk mengambil tanggal dan jam. Hasil dari fungsi ini adalah sebuah string
yang berisi tanggal/jam sesuai dengan format yang diinginkan. Format yang dikenal
dalam fungsi date ini adalah sebagai berikut:
• a - "am" or "pm"
• A - "AM" or "PM"
• B - Swatch Internet time
• d - day of the month, 2 digits with leading zeros; i.e. "01" to "31"
• D - day of the week, textual, 3 letters; i.e. "Fri"
• F - month, textual, long; i.e. "January"
• g - hour, 12-hour format without leading zeros; i.e. "1" to "12"
• G - hour, 24-hour format without leading zeros; i.e. "0" to "23"
• h - hour, 12-hour format; i.e. "01" to "12"
• H - hour, 24-hour format; i.e. "00" to "23"
• i - minutes; i.e. "00" to "59"
• I (capital i) - "1" if Daylight Savings Time, "0" otherwise.
• j - day of the month without leading zeros; i.e. "1" to "31"
• l (lowercase 'L') - day of the week, textual, long; i.e. "Friday"
• L - boolean for whether it is a leap year; i.e. "0" or "1"
• m - month; i.e. "01" to "12"
• M - month, textual, 3 letters; i.e. "Jan"
• n - month without leading zeros; i.e. "1" to "12"
• s - seconds; i.e. "00" to "59"
• S - English ordinal suffix, textual, 2 characters; i.e. "th", "nd"
• t - number of days in the given month; i.e. "28" to "31"
• T - Timezone setting of this machine; i.e. "MDT"
• U - seconds since the epoch
• w - day of the week, numeric, i.e. "0" (Sunday) to "6" (Saturday)
• Y - year, 4 digits; i.e. "1999"
• y - year, 2 digits; i.e. "99"
• z - day of the year; i.e. "0" to "365"
• Z - timezone offset in seconds (i.e. "-43200" to "43200")
Sintaks:
date(string format)
Contoh:
date(“Y-m-d”); // menghasilkan “2001-07-28”
date(“l, j F Y”); // menghasilkan “Saturday, 28 July 2001”
date(“H:i:s”); // menghasilkan “20:15:07”
FUNGSI MAIL
Digunakan untuk mengirimkan e-mail ke alamat e-mail tertentu.
Sintaks:
mail(string tujuan , string subject , string isi [, string header] );
Contoh:
$pengirim = “From: saya@email.com”;
$tujuan = “anonkuncoro@yahoo.com”;
$subject = “Pemberitahuan”;
$isi = “Ini adalah percobaan pengiriman e-mail dengan menggunakan PHP”;
mail($to,$subject,$isi,$pengirim);
Created By Muhammad Syahrizal 39
COUNTER
Aplikasi web yang paling sederhana yang akan kita bahas adalah teknik pembuatan
counter dengan menggunakan PHP. Counter yang kita buat ini adalah untuk
menghitung berapa kali suatu halaman situs web telah ditampilkan. Untuk
menyederhanakannya maka counter ditampilkan dalam bentuk teks bukan grafik.
Algoritma:
1. Bila suatu halaman web ditampilkan maka terlebih dulu dibaca isi file tertentu
dan dibaca nilainya.
2. Tampilkan nilainya di layar browser
3. Tambahkan nilainya dengan 1
4. Simpan nilainya yang baru di file
5. Selesai
File counter.txt
0
File counter.php:
<?
$filecounter="counter.txt";
$fl=fopen($filecounter,"r+");
$hit=fread($fl,filesize($filecounter));
echo("<table width=250 align=center border=1 cellspacing=0 cellpadding=0
bordercolor=#0000FF><tr>");
echo("<td width=250 valign=middle align=center>");
echo("<font face=verdana size=2 color=#FF0000><b>");
echo("Anda pengunjung yang ke:");
echo($hit);
echo("</b></font>");
echo("</td>");
echo("</tr></table>");
fclose($fl);
$fl=fopen($filecounter,"w+");
$hit=$hit+1;
fwrite($fl,$hit,strlen($hit));
fclose($fl);
?>
FORMULIR ONLINE
Salah satu bagian penting dari sebuah website adalah fasilitas pengisian formulir online,
baik untuk keperluan pemesanan, kontak ke pemilik website atau untuk pendaftaran
secara online. Pada bagian ini akan dibahas pembuatan formulir online yang data
isiannya dikirimkan ke alamat e-mail tertentu.
Algoritma:
1. Membuat formulir dengan menggunakan tag FORM pada HTML. Dengan data
yang dimasukkan adalah nama, e-mail, alamat, kota, telepon dan pesanan.
2. Semua data masukkan disimpan dalam beberapa variable dan dikirimkan ke
sebuah file PHP lain yang fungsinya untuk menerima variable yang dikirimkan
oleh formulir.
3. Mengirimkan ke alamat e-mail tertentu yang isinya sesuai yang diisikan pada
formulir.
4. Selesai
Created By Muhammad Syahrizal 40
echo("Terima kasih, data yang Anda kirimkan sebagai berikut:n");
echo("Nama : $naman");
echo("E-Mail : $emailn");
echo("Alamat : $alamatn");
echo("Kota : $kotan");
echo("Telepon : $teleponn");
echo("n");
echo("Pesanan Anda:n");
?>
</pre>
<?php
echo("$pesanan");
?>
</body>
</html>
GUESTBOOK
Kali ini kita akan membahas cara pembuatan guestbook (buku tamu). Langkah-langkah
yang kita lakukan dalam pembuatan buku tamu ini adalah:
1. Membuat table MySQL yang akan menyimpan isi buku tamu
2. Membuat form pengisian buku tamu
3. Membuat program untuk menerima masukan data dari form yang telah kita buat
sebelumnya
4. Membuat program untuk menampilkan isi buku tamu.
Membuat table
Struktur table untuk menyimpan buku tamu adalah sebagai berikut:
Adapun perintah MySQL untuk membuat table guestbook dengan struktur seperti diatas
adalah:
CREATE TABLE guestbook (
id int(10) unsigned NOT NULL auto_increment,
posted date NOT NULL,
name varchar(80),
email varchar(128),
address varchar(128),
city varchar(80),
Created By Muhammad Syahrizal 42
msg longblob,
PRIMARY KEY (id)
);
Membuat form pengisian buku tamu
File bukutamu1.php:
<html>
<head>
<title>
Guestbook
</title>
</head>
<body bgcolor="#99CCFF">
<font color="#000066" face=verdana>
<h3 align=left>
Signup Guestbook
</h3>
<form action="bukutamu2.php" method=POST>
<hr size=1 width=100% align=left>
<pre>
Name : <input type=text name=nama size=20>
E-Mail : <input type=text name=email size=30>
Address : <input type=text name=alamat size=30>
City : <input type=text name=kota size=25>
Message :
<textarea name=pesan rows=5 cols=30>
</textarea>
</pre>
<input type=submit value="Send"> <input type=reset value="Reset">
</form>
</font>
<font color="#000066" face=verdana size=2>
<a href="bukutamu3.php">View Guestbook</a>
</font>
</body>
</html>
Program untuk menerima masukan data dari form
File bukutamu2.php:
<html>
<head>
<title>
Guestbook
</title>
</head>
<body bgcolor="#99CCFF">
<font color="#000066" face=verdana>
<h3 align=left>
Signup Guestbook
</h3>
<?php
require("utama.php");
$link=open_connection();
$tablename="guestbook";
$tgl=date("Y-m-d");
$pesan=addslashes($pesan);
$sqlstr="INSERT INTO $tablename
VALUES('','$tgl','$nama','$email','$alamat','$kota','$pesan')";
if (!mysql_query ($sqlstr))
{
Created By Muhammad Syahrizal 43
echo("Invalid Query!<br>Please register again...<br>");
exit;
}
mysql_close($link);
echo("Thank you for signing up Guestbook...<p>");
?>
</font>
<font color="#000066" face=verdana size=2>
<a href="bukutamu3.php">View Guestbook</a> <a href="bukutamu1.php">Sign Up</a>
</font>
</body>
</html>
Program untuk menampilkan isi buku tamu
File bukutamu3.php:
<html>
<head>
<title>
Guestbook
</title>
</head>
<body bgcolor="#99CCFF">
<font color="#000066" face=verdana size=1>
<h3 align=left>
View Guestbook
</h3>
<?php
require("utama.php");
$link=open_connection();
$tablename="guestbook";
$sqlstr="SELECT * FROM $tablename ORDER BY id DESC";
$result = mysql_query ($sqlstr) or die ("Invalid query");
while ($row = mysql_fetch_object ($result))
{
$name=$row->name;
$posted=substr($row->posted,8,2)."-".substr($row->posted,5,2)."-".substr($row-
>posted,0,4);
$email=$row->email;
$address=$row->address;
$city=$row->city;
$msg=stripslashes($row->msg);
echo("Posted : $posted<br>");
echo("Name : $name<br>");
echo("E-Mail : <a href=mailto:$email>$email</a><br>");
echo("Address : $address<br>");
echo("City : $city<br>");
echo("Message :<br>");
echo("$msg<br>");
echo("<hr size=1 width=100%>");
}
mysql_close($link);
?>
</font>
<font color="#000066" face=verdana size=2>
<a href="bukutamu1.php">Sign Up</a>
</font>
</body>
</html>
Created By Muhammad Syahrizal 44
Dumping dan Restore Database
Pada MySQL
Kali ini akan membahas mengenai cara men-dumping (backup) database sekaligus restorenya
pada MySQL. Idenya lagi-lagi dari salah seorang rekan penulis yang pada waktu itu sedang
pindah hosting dari suatu perusahaan X ke perusahaan hosting Y. Dia memiliki situs yang
databasenya menggunakan MySQL dan semua data pada database tersebut akan dipindahkan ke
hosting yang baru.
Salah satu cara yang dipake untuk memindahkan database MySQL yaitu dengan men-dumping
semua data pada database server yang lama dan kemudian file hasil dumping tersebut dijalankan
pada server MySQL yang baru. Untuk keperluan ini MySQL menyediakan sebuah utility yang
dinamakan mysqldump. Penggunaan utility mysqldump ini juga sangat mudah dan kita akan
bersama-sama mencoba dengan menggunakan contoh yang mudah dimengerti.
Contohnya Anda memiliki sebuah database yang bernama db1 pada server A dan Anda ingin
memindahkannya pada server B. Dumping database db1 ini sebenarnya adalah menuliskan semua
statement SQL yang membangun struktur semua tabel sekaligus juga datanya dari server yang di
dumping tadi. Kita akan menggunakan perintah mysqldump dalam contoh kali ini untuk men-dump
database yang bersangkutan.
Pertama-tama ketahui dulu username dan password MySQL yang berhak akses ke database db1
pada server A tadi. Misalnya saja username-nya adalah root dan password nya adalah kuncipass.
Informasi tersebut akan kita gunakan dalam perintah mysqldump. OK sekarang kita jalankan
perintah mysqldump.
mysqldump -uroot -pkuncipass db1 > /home/sonyakcom/db1_dump.sql
Jika pada platform windows akan menjadi seperti di bawah ini:
mysqldump -uroot -pkuncipass db1 > c:homesonyakcomdb1_dump.sql
Perintah di atas melakukan dumping terhadap database db1 dengan username dan password yang
sudah diberikan dan output dumping-nya disimpan dalam file db1_dump.sql.
Sekarang coba Anda buka file db1_dump.sql tersebut dengan text editor, disitu akan nampak script
SQL yang di-generate oleh MySQL terhadap database db1 tadi.
Sekarang bagaimana caranya untuk melakukan restore secript db1_dump.sql tadi ke server B?
Caranya mudah, pertama-tama masuklah ke dalam MySQL pada server B dan buatlah database pada
server B yang namanya sesuai dengan nama database A tadi. Untuk create database ini Anda bisa
gunakan perintah CREATE DATABASE. COntohnya adalah seperti di bawah ini.
create database db1;
Setelah itu coba keluar ke system prompt atau shell prompt, kemudian ketikkan perintah seperti di
bawah ini.
mysql -uroot -pkuncipass db1 < /home/sonyakcom/db1_dump.sql
Perintah di atas berarti kita melakukan restore database dari file db1_dump.sql ke dalam database
db1 yang mana login ke MySQL nya dengan menggunakan username root dan password kuncipass.
Created By Muhammad Syahrizal 45
Manajemen Dokumen HTML
dengan PHP 5
Sebagaimana diketahui, dokumen HTML (HyperText Markup Language) merupakan
dasar terbentuknya aplikasi berbasis web. Pada dasarnya HTML bukanlah sebuah bahasa
pemrograman, akan tetapi merupakan semacam bahasa pengkodean. Hal ini disebabkan
karena HTML tidak memerlukan kompiler khusus sebagaimana bahasa pemrograman
sebenarnya (PHP, ASP, JSP, dan lainnya). Meskipun bukan merupakan bahasa
pemrograman, bukan berarti kita bisa sembarang membuat dokumen HTML.
Pembuatan dokumen HTML didasarkan pada aturan-aturan tertentu yang telah disepakati
bersama.
Oleh sebab itu, ketika Anda lupa sedikit saja dalam membuka atau menutup tag dari
elemen, maka bisa berakibat fatal. Mungkin tidak terlalu menjadi masalah ketika
kesalahan hanya pada tag biasa semacam paragraf (<P>), akan tetapi bayangkan jika
salah menutup tag table data (<TD>) atau table row (<TR>), dijamin pasti halaman web
anda akan berantakan.
Bertolak dari masalah di atas, yakni mengenai penggunaan struktur HTML yang benar,
PHP 5 ’mengangkut’ teknologi khusus dalam melakukan manajemen dokumen HTML.
Teknologi yang terpaket dalam fungsi API Tidy ini memungkinkan pemrogram untuk
mem-parsing, membersihkan, memproses serta memperbaiki dokumen HTML. Di sini
kita akan membahas seperti apa API Tidy ini dan sejauh mana kegunaannya bagi Anda
tentunya.
Dokumen HTML
Sebelum melangkah ke penggunaan fungsi API Tidy, ada baiknya kita review mengenai
dasar dokumen HTML. Anda pasti sudah memahami bahwa dokumen HTML terdiri dari
tag dan elemen-elemen. Ada pun ketika browser menampilkan hasil dokumen,
sebenarnya browser menerjemahkan tag-tag menjadi tampilan menarik yang dapat Anda
lihat pada browser tersebut.
Secara umum dokumen HTML dapat digambarkan sebagai dokumen yang diawali
penulisan tag HTML, dengan tanda lebih kecil (<) dan diakhiri atau ditutup dengan tanda
lebih besar (>).
Aturan Dasar
Meskipun bukan merupakan bahasa pemrograman, namun dokumen HTML juga
memiliki aturan-aturan yang perlu ditaati. Aturan dasar dari dokumen HTML meliputi
penulisan tag-tag serta penyimpanan file dokumen.
Beberapa aturan pembuatan dokumen HTML yang perlu Anda ketahui adalah sebagai
berikut:
1. Sangat dianjurkan bagi Anda untuk mendefinisikan tipe HTML sebelum memulai
pembuatan dokumen HTML. Pendefinisian ini berfungsi untuk menunjukkan bahwa file
dokumen yang dibuat adalah dokumen HTML. Definisi yang umum diberikan adalah
seperti contoh di bawah ini.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
Created By Muhammad Syahrizal 46
Meskipun sudah diberikan aturan, dalam implementasinya dapat dihitung pemrogram
yang mematuhinya. Mengapa demikian? Karena meskipun Anda tidak memberikan
definisi tersebut, tetap saja dokumen akan diterjemahkan, dan mungkin hal ini sangat
membosankan bagi sebagian pemrogram.
2. HTML akan mengabaikan perbedaan huruf, jadi Anda dapat menuliskan tag-tag dalam
bentuk huruf besar semua atau huruf kecil semua. Hal itu tetap akan menghasilkan
tampilan yang sama, sebagai contoh perhatikan tag berikut:
<BR>
<br>
Sebaiknya ketika Anda membuat suatu dokumen HTML, gunakan huruf yang seragam,
misalnya huruf besar semua atau huruf kecil semua. Hal ini akan memudahkan Anda
ketika memeriksa ulang program, selain itu juga memudahkan orang lain yang
membacanya. Bayangkan jika Anda mencampur adukkan huruf kecil dan huruf besar,
tentu jadi kurang enak dilihat, kecuali memang Anda menyukainya.
3. Selain bentuk tag tunggal seperti contoh di atas, ada juga tag yang memiliki pasangan
atau penutup, perhatikan contoh berikut:
<TITLE>…..</TITLE>
Dalam pembuatan tag yang berpasangan seperti di atas, Anda wajib memberikan tanda ‘/’
(garis miring) yang menandakan penutup pada pasangan tag. Terlihat bahwa <TITLE>
merupakan tag awal, sedangkan </TITLE> adalah tag akhir yang berfungsi menutup
perintah tersebut.
4. Tanda spasi atau baris baru yang diapit oleh teks akan diabaikan browser, perhatikan
contoh berikut:
<b>Menebalkan huruf</b>
atau
<b>
Menebalkan huruf
</b>
Kedua contoh cara penulisan di atas pada dasarnya akan menghasilkan tampilan yang
sama.
5. Dokumen HTML harus disimpan sebagai teks murni dengan menggunakan ekstensi
.html atau .htm.
Struktur HTML
Di luar dari penggunaan definisi yang telah dijelaskan, secara umum dokumen HTML
memiliki tiga buah elemen utama yaitu HTML, HEAD, dan BODY (semuanya
merupakan tag berpasangan).
Perlu diketahui, meskipun sudah ada struktur dalam pembuatan dokumen HTML, bukan
berarti kita tidak dapat membuat dokumen HTML jika mengabaikan beberapa struktur
tersebut. Misalnya Anda membuat dokumen sederhana hanya dengan elemen <HTML>
Created By Muhammad Syahrizal 47
dan kemudian ditutup oleh tag </HTML>. Tetap saja dokumen tersebut akan dianggap
sebagai dokumen HTML, sehingga Anda akan dapat melihat hasilnya melalui browser.
Konfigurasi Parser Tidy
Langkah utama yang diperlukan sebelum menggunakan fungsi-fungsi Tidy adalah
mengaktifkan modul terlebih dahulu. Harap dimaklumi, mengingat cukup banyak modul
yang tersedia pada PHP maka untuk mengurangi banyaknya modul-modul yang berjalan,
secara normal PHP hanya membatasi beberapa modul umum saja yang sudah aktif begitu
Anda menginstal PHP.
Oleh karena modul Tidy tidak termasuk sebagai modul umum, maka kita perlu
mengaktifkan modul ini. Untuk lebih jelasnya ikuti tahap-tahap konfigurasi berikut:
1. Apabila web server Anda masih aktif berjalan, sebaiknya matikan terlebih dahulu.
2. Berikutnya cari file php.ini yang Anda gunakan, kemudian buka melalui teks editor.
3. Cari modul php_tidy.dll dalam kumpulan ekstensi modul, kemudian hilangkan tanda
komentar didepannya. Jika Anda menggunakan lingkungan Unix (Linux), baris ini
seharusnya menjadi php_tidy.so.
4. Jalankan kembali web server Anda, dan periksa melalui fungsi phpinfo() untuk
memastikan bahwa modul sudah benar-benar aktif.
Menampilkan Source HTML
Berbeda dengan program PHP yang tidak dapat dilihat source code-nya melalui browser
client, dokumen HTML memungkinkan client untuk membaca source code. Jadi ketika
Anda membuka halaman web melalui Internet, meskipun dokumen tidak terletak pada
penyimpanan lokal, dengan mudah Anda dapat melihat-lihat isinya.
Mengingat aplikasi web umumnya tidak begitu sederhana, sehingga dokumen yang
terlihat sangat banyak dan terdiri dari tag-tag yang memusingkan. Misalnya saja Anda
ingin melihat header dari dokumen untuk mengetahui isi dari style css yang ada pada
situs seperti dokumen berikut:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<title>Dokumen HTML</title>
<style type='text/css'>
BODY {font-family:verdana;font-size:9pt}
TD {font-family:verdana;font-size:8pt}
</style>
</head>
<body>
<p>
PHP merupakan pemrograman disisi server, di mana
pemrosesan dilakukan pada komputer server.
</p>
</body>
</html>
Created By Muhammad Syahrizal 48
Untuk dapat mengambil isi dari header dokumen di atas, gunakan fungsi tidy_get_head()
yang akan
membantu Anda untuk menampilkan objek dokumen dimulai dari tag <head> sampai tag
penutup
</head>.
<?php
/* view_head.php */
// File dokumen yang akan diperiksa
$html = 'http://192.168.0.3/myphp5/index.html';
$tidy = tidy_parse_file($html);
// Melakukan proses
$head = tidy_get_head($tidy);
echo $head->value;
?>
Ketika Anda jalankan pada browser, tentu saja halaman yang ditampilkan akan kosong.
Mengapa demikian? Meskipun di dalam dokumen terdapat isi paragraf, namun hal itu
akan diabaikan. Inilah akibat dari penggunaan fungsi tidy_get_head(), di mana hanya
akan mengambil isi header saja.
Anda dapat melihat bahwa judul dari halaman tersebut sudah sesuia dengan dokumen
yang Anda buat.
Akan tetapi di mana informasi header? Untuk browser Internet Explorer, klik menu View
> Source,
Sebaliknya ketika Anda hanya ingin menampilkan isi dari body dokumen, gunakan
fungsi tidy_get_body().
<?php
/* view_head.php */
// File dokumen yang akan diperiksa
$html = 'http://192.168.0.3/myphp5/index.html';
$tidy = tidy_parse_file($html);
// Melakukan proses
$head = tidy_get_body($tidy);
echo $head->value;
?>
Perhatikan hasil tampilan yang diberikan, meskipun kita memiliki style yang secara
umum akan mengubah font pada body dokumen, namun hal ini tidak akan terjadi.
Sebagaimana Anda ketahui, hal ini disebabkan oleh kerja parser yang hanya sebatas pada
elemen body saja.
Lain halnya ketika Anda menggunakan fungsi tidy_get_html(), di mana akan
menampilkan dokumen
secara lengkap dari awal hingga akhir.
Created By Muhammad Syahrizal 49
Membuat Struktur HTML
Kali ini kita mencoba untuk membuat struktur HTML secara otomatis yang akan
dilakukan oleh parser. Anggap saja ketika kita ingin membuat data dalam tabel, namun
kurang begitu paham dengan elemen tabel. Cukup rumit bukan? Padahal katakanlah
kemampuan kita hanya sebatas mengetahui elemen <td> saja, yakni untuk
mendefinisikan data yang kita miliki.
Daripada kita memaksakan diri untuk membuat sesuatu yang tidak kita mengerti, akan
lebih bijaksana jika kita menggunakan bantuan fungsi tidy_get_output().
Sekarang coba buat program seperti berikut:
<?php
/* struktur_html.php */
$tabel = "<td>Isi Data</td>";
$proses = tidy_parse_string($tabel);
$proses->CleanRepair();
echo tidy_get_output($proses);
?>
Setelah Anda jalankan pada browser, dengan mudahnya Anda akan diberikan kerangka
tabel lengkap dengan data yang Anda berikan (pada view source).
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<title></title>
</head>
<body>
<table>
<tr>
<td>Isi Data</td>
</tr>
</table>
</body>
</html>
Mendeteksi Error pada Dokumen
Meskipun boleh dikatakan bahwa dokumen HTML cukup sederhana, namun tak jarang
cukup memusingkan juga. Ini akan semakin terasa ketika kita membuat aplikasi HTML
dalam dokumen yang kompleks, di mana hampir semua tag elemen yang ada kita angkut
semua. Seberapa teliti kita memberikan tag? misalnya untuk penggunaan tabel.
Salah sedikit saja Anda memberikan tag pembuka serta penutup, bisa-bisa tampilan web
akan sekusut pikiran Anda. Nah, dengan memanfaatkan fungsi parse dari Tidy,
setidaknya akan membantu kita dalam mendeteksi kesalahan pada dokumen. Selanjutnya
Anda cukup mencari letak kesalahan melalui pesan yang ditampilkan oleh Tidy. Untuk
memahami seperti apa cara kerja fungsi Tidy dalam mendeteksi kesalahan dokumen
Anda, buat contoh sederhana dokumen HTML.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
Created By Muhammad Syahrizal 50
<html>
<head>
<title>Menggunakan Modul Tidy</title>
</head>
<body>
<table border="1" cellpadding="3" summary="">
<tr>
<th>Id</th>
<th>Nama Barang</th>
<th>Spesifikasi</th>
<th>Harga</th>
</tr>
<tr></td>M-01</td><td>Memori [DDR]</td><td>128 MB</td><td>Rp
200.000</td></tr>
<tr><td>Ms-7</td><td>Mouse Optik</td><td> - </td><td>Rp 100.000</td></tr>
<tr><td>C-01</td><td>CD ROM</td><td>52 X</td><td>Rp 250.000</td></tr>
</table>
</body>
</html>
Kalau Anda perhatikan kira-kira program di atas sudah sesuai atau belum? Jika Anda
menjawab sesuai berarti Anda kurang jeli. Pada dokumen tersebut, terlihat ada kesalahan
yang disebabkan kelebihan menutup tag <td> diawal ID. Sementara anggap saja Anda
tidak mengetahui kesalahan tersebut, sehingga tampilannya akan terlihat seperti di bawah
ini.
Sekarang kita akan membuat program yang akan memeriksa keabsahan dokumen di atas.
<?php
/* html_cek.php */
// File dokumen yang diperiksa
$cek = tidy_parse_file('test.html');
// Melakukan proses
$cek->cleanRepair();
// Jika tidak ada kesalahan
if(empty($cek->error_buf)) {
echo "Sintaks OK";
} else {
echo "Kesalahan sintaks pada : ¥n ";
echo $cek->error_buf;
}
?>
Masih kurang jelas dengan kesalahan yang ada? Klik menu View > Source. Perhatikan
pesan kesalahan yang dijelaskan secara lebih detail dalam teks editor.
Setelah mengetahui pesan serta letak kesalahannya, sekarang dengan mudahnya Anda
memperbaiki dokumen Anda. Untuk sementara kita memperbaiki secara manual, karena
Created By Muhammad Syahrizal 51
sebenarnya Tidy juga dapat melakukan perbaikan secara otomatis. Bagaimana hal ini
dilakukan?
Memperbaiki Dokumen
Salah satu keunggulan paling canggih dari sekian kemampuan fungsi-fungsi Tidy adalah
mampu melakukan perbaikan dokumen yang salah. Dalam hal ini kesalahan yang
dimaksud adalah kesalahan struktur dokumen. Meskipun belum bisa dikatakan pasti,
bahwa kesalahan yang diperbaiki adalah yang Anda inginkan, namun akan sangat
membantu sekali. Mengapa dikatakan belum pasti? Karena
ini bergantung dari kesalahan yang ditimbulkan.
Sebagai contoh kesalahan dokumen yang Anda buat sebelumnya, ketika diperbaiki maka
justru akan menghapus tag <td>. Mengapa demikian? Karena sangat tidak umum jika
setelah tag <tr> kemudian ditutup dengan tag </td>, sehingga dengan bijaksana Tidy
akan menghapus tag yang tidak berfungsi tersebut.
Untuk menggambarkan kesalahan yang dapat diperbaiki, buatlah contoh dokumen html
yang asal, namun jangan mengabaikan elemen utama.
<html>
<head>
<title>test dokumen</title>
<head>
<body>
<p>test paragraph<p>
<body>
<html>
Tentu sangat tidak wajar bukan? Sekarang coba kita suruh parser Tidy untuk
memperbaikinya dengan menggunakan fungsi tidy_repair_file(). Berikutnya agar hasil
revisi dapat dituliskan ke dalam file, kita memerlukan bantuan fungsi file_put_contents().
<?php
/* html_repair.php */
// Target file dokumen
$file = 'coba.html';
// Proses perbaikan dokumen
$repaired = tidy_repair_file($file);
// Membuat backup file
// dengan ekstensi .bak
rename($file, $file . '.bak');
// Menuliskan string ke dokumen
file_put_contents($file, $repaired);
?>
Sengaja pada program di atas kita berikan backup dari file dokumen. Ada pun hasil dari
perbaikan dokumen di atas akan dapat Anda lihat dalam source aplikasi.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<title>test dokumen</title>
Created By Muhammad Syahrizal 52
</head>
<body>
<p>test paragraph</p>
</body>
</html>
Akhirnya, sampai di sini pembahasan mengenai manajemen dokumen HTML dengan
PHP 5. Artikel ini diambil dari salah satu bab buku yang ditulis oleh penulis, dengan
harapan bermanfaat bagi Anda.
Mengakses Database pada
PHP Melalui ODBC
Pada modul ini akan dibahas tentang bagaimana cara mengakses database MS Acces melalui PHP
menggunakan ODBC. Pada dasarnya PHP mendukung berbagai macam database seperti MS
Acces, MySQL, Oracle, Paradox, dBase dan lain sebagainya.
Apa itu ODBC
ODBC merupakan singkatan dari Open database Connectivity yaitu merupakan suatu standart
yang dikembangkan oleh Microsoft untuk mengakses database agar lebih mudah dengan fungsi
yang bersifat umum. Tentu saja untuk mengakses database pada PHP tidak lagi menggunakan
cara-cara seperti pada MS Acces, VBasic ataupun Delphi yang dengan menggunakan komponen
tertentu. Untuk mengakses database pada PHP diperlukan perintah SQL (Structured Query
Language). Pada program berbasis Windows sumber data ODBC dapat diakses pada program
melalui DSN (Data Source
Name).
Membuat DSN
Sebelum membuat DSN terlebih dulu harus dibuat database yang akan digunakan dalam aplikasi
jaringan ini di program MS Acces. Caranya seperti lihat pada halaman berikut. Dan simpanlah
database yang anda buat ke dalam directori : C:/apache/Acces/pemasaran.mdb
Untuk membuat DSN caranya adalah sbb :
Pilih menu Star > Setting > Control Panel
Maka akan muncul menu sbb :
Created By Muhammad Syahrizal 53
Membuat Database pemasaran diakses
Buatlah Database dengan nama pemasaran dalam MS Accces yang terdiri dari 4 tabel seperti
pada gambar di atas.
Created By Muhammad Syahrizal 54
Pilih Menu Administrative Tools (Untuk Windows 2000 Prof, XP)
Created By Muhammad Syahrizal 55
Lalu pilih ODBC Data Source
Untuk Windows 98 dari Control Panel langsung Pilih Menu ODBC Data Source (32 Bit)
Pilih Tab System DSN
Pilih Add untuk membuat DSN baru
Created By Muhammad Syahrizal 56
Pilih Driver Do Microsoft Acces (*.mdb)
Lalu pilih dan tekan tombol Finish maka akan muncul menu sbb :
Isilah Nama Data Source (Nama Bebas) Nama data source inilah yang nantinya digunakan
untuk menghubungkan ke Database. Contoh Nama Jur_Pemasaran
Isilah Description (Bebas) yaitu keterangan Nama DSN
Lalu Pilih Database > Tombol Select dan akan muncul tampilan
Created By Muhammad Syahrizal 57
Pilih Database yang telah anda buat misalkan di sini namanya Pemasaran.mdb yang
diletakkan pada directori C:ApacheAccespemasaran.mdb
Pilih OK
Sudah Selesai dan nanti Database Name akan muncul pada menu berikut :
Mengakases Database Melalui PHP
PHP telah menyediakan sejumlah fungsi untuk mengakses database melalui ODBC. Dengan
fungsi-fungsi ODBC ini maka akses ke database akan menjadi mudah dan cepat. Untuk dapat
mengakses database maka harus dimengerti fungsi-fungsi berikut ini :
Fungsi odbc_connect
Fungsi ini berguna untuk menghubungkan nama sumber data ODBC dengan format pemanggilan
sbb:
odbc_connect (nama_sumber_data, nama_pemakai, nama_password)
Fungsi odbc_close
Created By Muhammad Syahrizal 58
Fungsi ini berguna untuk menutup hubungan dengan sumber data ODBC. Format penulisannya
sbb:
odbc_close (pengenal_hubungan)
pengenal_hubungan adalah nilai yang dihasilkan oleh odbc_connect
Fungsi odbc_close_all
Fungsi ini berguna untuk menutup semua hubungan dengan sumber data ODBC. Format
penulisannya sbb:
odbc_close_all ( )
Fungsi odbc_do
Fungsi ini berguna untuk menjalankan perintah sql dengan format penulisan sbb:
odbc_do (pengenal_hubungan, string_query)
Fungsi odbc_num_fields
Berguna untuk memperoleh jumlah field
odbc_num_fields (pengenal_hasil)
Fungsi odbc_num_rows
Berguna untuk memperoleh jumlah record atau baris
odbc_num_rows (pengenal_hasil)
Fungsi odbc_fields_name
odbc_fields_name (pengenal_hasil, no_kolom)
Fungsi odbc_ fields_len
Berguna untuk memperoleh panjang kolom
odbc_ fields_len (pengenal_hasil, no_kolom)
Fungsi odbc_ fields_type
Berguna untuk memperoleh tipe kolom
odbc_ fields_type (pengenal_hasil, no_kolom)
Fungsi odbc_ fetch_row
Berguna untuk memperoleh sebuah baris dari suatu himpunan hasil.
odbc_ fetch_row (pengenal_hasil, no_baris)
Fungsi odbc_ fetch_into
Berguna untuk memperoleh sebuah baris dari suatu himpunan hasil.
odbc_ fetch_into (pengenal_hasil, no_baris)
Fungsi odbc_ result
Berguna untuk memperoleh nilai dari sebuah kolom pada baris sekarang.
odbc_ result (pengenal_hasil, kolom)
Fungsi odbc_ result_all
Berguna untuk menampilkan semua baris dari suatu hasil ke browser.
odbc_ result_all (pengenal_hasil, format)
Latihan 1. Membuat Tes Koneksi ke ODBC
Created By Muhammad Syahrizal 59
Untuk mengetahui apakah hubungan ke database sudah berjalan atau belum dapat dibuat dengan
script PHP dengan fungsi odbc_open dan odbc_close sbb :
<HTML>
<TITLE> Tes Koneksi Ke Database Dengan ODBC </TITLE>
<BODY>
<?php
$pemakai = "";
$password = "";
$dataku = odbc_connect("Jur_Pemasaran",
$pemakai,
$password);
if (! $dataku)
die("Database tak dapat dibuka");
odbc_close($dataku);
print("Alhamdulillah Berhasil Oi");
?>
</BODY>
</HTML>
Latihan 2. Melihat Daftar Tabel Mahasiswa
<HTML>
<HEAD>
<TITLE>Membaca Tabel Mahasiswa </TITLE>
</HEAD>
<BODY>
<align = "center">
</p>
Daftar Mahasiswa Politeknik POS Jurusan Pemasaran
<?php
$pemakai = "";
$password = "";
$dataku = odbc_connect("Jur_Pemasaran",
$pemakai,
$password);
if (! $dataku)
die("Database tak dapat dibuka");
$sql = "SELECT Mahasiswa.NPM, Mahasiswa.nama, Mahasiswa.Alamat,
Mahasiswa.Nama_orang_tua " .
"FROM Mahasiswa " .
"ORDER BY Mahasiswa.NPM";
$hasil = odbc_do($dataku, $sql);
odbc_result_all($hasil, "Border=2");
odbc_close($basis_data);
?>
</BODY>
</HTML>
Latihan 3. Melihat Daftar Tabel Mahasiswa Dan Tabel Nilai
Created By Muhammad Syahrizal 60
<HTML>
<HEAD>
<TITLE>Membaca Berkas Microsoft Access</TITLE>
</HEAD>
<BODY>
Daftar Nilai Mahasiswa Politeknik POS
Jurusan Pemasaran
<?php
$pemakai = "";
$password = "";
$dataku = odbc_connect("Jur_Pemasaran", $pemakai, $password);
if (! $dataku)
die("Database tak dapat dibuka");
$sql = "SELECT Mahasiswa.NPM, " .
"Mahasiswa.nama, Mahasiswa.Alamat, Nilai.kode_kuliah,
Nilai.Nilai " .
"FROM Mahasiswa, Nilai " .
"WHERE Mahasiswa.NPM = Nilai.NPM " .
"ORDER BY Mahasiswa.NPM";
$hasil = odbc_do($dataku, $sql);
odbc_result_all($hasil, "Border=2");
odbc_close($dataku);
?>
</BODY>
</HTML>
Latihan 4. Melihat Daftar Tabel Mahasiswa, Tabel Nilai, Tabel Kuliah Dan Dosen
<HTML>
<HEAD>
<TITLE>Membaca Berkas Microsoft Access</TITLE>
</HEAD>
<BODY>
Daftar Nilai Mahasiswa Politeknik POS
Jurusan Pemasaran
<?php
$pemakai = "";
$password = "";
$dataku = odbc_connect("Jur_Pemasaran",
$pemakai,
$password);
if (! $dataku)
die("Database tak dapat dibuka");
$sql = "SELECT Mahasiswa.NPM, Mahasiswa.nama, " .
"Nilai.kode_kuliah, T_Kuliah.Nama_Kuliah, Nilai.Nilai, Dosen.Nama " .
"FROM Mahasiswa, Nilai, T_Kuliah, Dosen " .
"WHERE Mahasiswa.NPM = Nilai.NPM " .
"and T_Kuliah.kode_kuliah = Nilai.kode_kuliah " .
"and Dosen.NIP = T_kuliah.NIP " .
"ORDER BY Mahasiswa.NPM";
Created By Muhammad Syahrizal 61
$hasil = odbc_do($dataku, $sql);
odbc_result_all($hasil, "Border=2");
odbc_close($dataku);
?>
</BODY>
</HTML>
Latihan 5. Penambahan Data
<html>
<head>
<title>
Contoh Penambahan Data Melalui Web
</title>
</head>
<body>
<?
$pemakai = "";
$password = "";
$dataku = odbc_connect("Jur_Pemasaran", $pemakai, $password);
if (! $dataku)
die("Database tak dapat dibuka");
$sql="insert into Mahasiswa " .
" (NPM, Nama, Alamat, Tgl_Lahir, Nama_Orang_Tua) " .
" VALUES (115, 'Denmas', 'Jl. Sekeloa Utara 62', 11/27/1975, 'Ir. Ali Akbar')";
if (odbc_do ($basis_data, $sql))
printf(" Data Berhasil Diinputkan ");
else
printf(" Data Tidak Berhasil Diinputkan ");
odbc_close($dataku);
?>
</body>
</html>
Created By Muhammad Syahrizal 62
Mengenal Mekanisme Looping
Pada PHP
Setiap bahasa pemrograman pasti memiliki mekanisme untuk melakukan looping (perulangan)
dalam code-nya. Bagaimana dengan PHP? PHP Sebagai bahasa pemrograman tentu saja juga
memiliki mekanisme ini. Statemen-statemen looping pada PHP bertujuan untuk mengeksekusi suatu
blok kode yang sama selama beberapa kali dan bisa ditentukan perulangannya.
PHP memiliki beberapa statemen yang digunakan untuk operasi looping yaitu:
- while, yaitu perulangan pada suatu blok kode selama kondisi tertentu masih terpenuhi.
- do..while, yaitu perulangan yang selalu dijalankan minimal sekali dan baru kemudian
mengulangi blok kode nya selama suatu kondisi terpenuhi.
- for, yaitu perulangan yang sifatnya pasti pada suatu blok kode tertentu dan sudah ditentukan
sebanyak jumlah tertentu.
- foreach, yaitu perulangan khusus yang digunakan pada array.
Mari kita bahas satu-persatu mengenai teknik looping di atas.
WHILE
Statemen while akan mengeksekusi suatu blok kode "jika dan selama" suatu kondisi looping
terpenuhi.
Sintaks :
while (kondisi)
kode yang akan dieksekusi;
Contoh :
Contoh berikut akan menunjukkan suatu looping yang akan selalu berjalan selama nilai i adalah
kurang dari atau sama dengan 5. Nilai i akan di-increase dengan 1 selama looping berjalan.
<html>
<body>
<?php
$i=1;
while($i<=5)
{
echo "The number is " . $i . "<br />";
$i++;
}
?>
</body>
</html>
DO..WHILE
Statemen do..while akan mengeksekusi suatu blok kode "minimal sekali" dalam perjalanan looping
dan kemudian akan berulang "selama" suatu kondisi looping masih terpenuhi.
Sintaks :
do
{
kode yang di eksekusi;
}
while (kondisi);
Contoh :
Contoh berikut ini akan meng-increase nilai i minimal satu kali, dan kemudian akan lanjut increment
nilai i selama nilai i masih lebih kecil dari 5.
<html>
Created By Muhammad Syahrizal 63
<body>
<?php
$i=0;
do
{
$i++;
echo "The number is " . $i . "<br />";
}
while ($i<5);
?>
</body>
</html>
FOR
Statemen for digunakan ketika Anda mengetahui dengan pasti jumlah perulangan yang harus
dilakukan pada blok kode Anda.
Sintaks :
for (inisialisasi; kondisi; increment)
{
code yang hendak dieksekusi;
}
Statemen for memiliki tiga parameter. Parameter pertama digunakan untuk inisialisasi variabel.
Parameter kedua digunakan sebagai tempat menulis kondisi loop dan parameter ketiga berisi
increment yang diperlukan dalam loop. Jika lebih dari satu variabel yang disertakanpada bagian
inisialisasi atau pada bagian increment maka hal tersebut harus dipisahkan dengan tanda koma.
Parameter kondisi harus mengevaluasi apakah kondisi terpenuhi atau tidak.
Contoh :
Contoh berikut adalah akan menampilkan string "Halo Surabaya !!" sebanyak 3 kali:
<html>
<body>
<?php
for ($i=1; $i<=3; $i++)
{
echo "Hello World!<br />";
}
?>
</body>
</html>
FOREACH
Statemen foreach digunakan untuk melakukan looping pada elemen-elemen pada suatu array.
Sintaks :
foreach (ekspresi_array as $value)
{
kode yang hendak dieksekusi;
}
Contoh :
<html>
<body>
<?php
$arr = array("one", "two", "three");
reset ($arr);
Created By Muhammad Syahrizal 64
while (list(, $value) = each ($arr)) {
echo "Value: $value<br>n";
}
foreach ($arr as $value) {
echo "Value: $value<br>n";
}
?>
</body>
</html>
Optimasi dan Performansi
Aplikasi Web PHP
Tidak bisa dipungkiri, menulis kode secara efektif dan efisien adalah kunci dasar yang
penting untuk meningkatkan kecepatan eksekusi kode. Seperti diketahui, kode-kode PHP
akan selalu dieksekusi setiap kali ia di-request oleh client (browser). Oleh karena itu,
sangat menguntungkan sekali jika Anda bisa membuat kode yang efektif dan efisien.
Berikut ini adalah beberapa tip dan strategi untuk mengoptimasi kode program aplikasi
PHP secara umum.
• Hindari spasi untuk mengatur kode
Menghindari penggunaan spasi (atau ) yang berlebihan adalah langkah efisien.
Pertimbangkan, setiap spasi adalah 1 byte dan setiap tab (t) juga 1 byte. Ketika Anda
membuat empat spasi, Anda telah menghabiskan 4 byte data. Tentu akan lebih efisien
jika hanya menggunakan sebuah tab.
• Cara menggunakan tipe data boolean
PHP mengijinkan Anda menulis tipe data boolean dengan huruf kecil atau besar
(case-insensitive). Meskipun demikian, penulisan dengan huruf kecil semua akan lebih
cepat dibanding huruf besar. Ini dikarenakan, saat menemukan konstanta, PHP
melakukan lookup hash nama konstanta.
if ($var = TRUE) {
.....
}
// akan dieksekusi lebih cepat
if ($var = true) {
.....
}
Sebagai tambahan, saat bekerja dengan nilai boolean, menggunakan nilai 1 dan 0 lebih
cepat dibanding true dan false.
• Hindari konkatenasi string yang besar
Pada saat melakukan konkatenasi string, hindari penggabungan dengan string yang
ukurannya besar. Ini bisa menghambat eksekusi kode yang sebenarnya bisa ditampilkan
dengan cepat.
Contohnya seperti berikut:
// Konkatenasi string yang besar
$title = 'title';
$body = '...a very large block...';
echo "Subject: $titlenn$body";
Created By Muhammad Syahrizal 65
// Menghindari konkatenasi string yang besar
$title = 'title';
$body = '...a very large block...';
echo "Subject: $titlenn";
echo $body;
• Mencetak output
Tiga cara yang umum dilakukan untuk mencetak data ke output adalah: direct output,
echo(), dan print(). Ketika kode program tidak mengandung kode-kode PHP, mencetak
dengan direct output lebih efektif dan efisien. Contoh direct output seperti berikut:
<?php
// kode php
?>
Direct output
<?php
// kode php
?>
Apabila kondisi Anda memerlukan untuk mencetak output dengan menggunakan fungsi
(konstruksi bahasa) PHP, gunakan echo(), bukannya print(). Meskipun secara garis besar
print() dan echo() memiliki tujuan sama, akan tetapi ada beberapa perbedaan esensial
yang perlu diperhatikan.
Fungsi print() berperilaku seperti fungsi pada umumnya, dan memiliki nilai kembalian
(return value) berupa integer 1. Dengan demikian, print() dapat digunakan sebagai bagian
dari ekspresi yang lebih kompleks. Sementara itu, echo() mampu menerima lebih dari
satu parameter sekaligus, dan tidak memiliki nilai kembalian.
print 'String 1';
echo 'String 1';
// Menggunakan beberapa parameter
echo 'String 1', "String 2", '...';
Fungsi string echo() akan dieksekusi lebih cepat dibanding dengan print(). Perbedaan ini
disebabkan karena fungsi print() akan mengembalikan status (integer) yang menyatakan
apakah proses berhasil dilaksanakan atau tidak.
Di sisi lain, echo() hanya menampilkan output saja dan tidak mengerjakan apa-apa lagi.
Ada pun dalam implementasinya, status nilai kembalian dari penggunaan fungsi string
hampir tidak pernah diperlukan.
• Memeriksa panjang string
Cara umum untuk memeriksa panjang karakter adalah dengan menggunakan fungsi
strlen().
Untuk tujuan yang sama, sebenarnya ada cara yang lebih cepat, yaitu menggunakan
isset().
Contohnya seperti berikut:
if (strlen($str) < 5) {
Created By Muhammad Syahrizal 66
echo 'String must be at least 5 chars';
}
if (!isset($str{5})) {
echo 'String must be at least 5 chars';
}
Seperti halnya kasus echo() dan print(), isset() memerlukan waktu eksekusi lebih pendek
karena ia merupakan konstruksi bahasa.
Konstruksi bahasa echo() juga mengijinkan Anda untuk memberikan lebih dari satu
string sebagai parameter. Menggunakan beberapa parameter akan lebih cepat dibanding
mencampur variabel ke dalam sebuah parameter tunggal. Contohnya seperti berikut:
$a = 'Hello';
$b = 'World';
echo 'Say ' .$a. ' to ' .$b;
// Lebih cepat
echo 'Say ', $a, ' to ', $b;
Pendekatan Berbasis Referensi
Pendekatan berbasis referensi (passing-by-ref) seringkali menimbulkan salah interpretasi.
Pertanyaan umum yang sering dilontarkan terkait dengan topik ini adalah, apakah
referensi meningkatkan performansi? Pada prinsipnya, referensi tidak menyediakan
keuntungan performansi apapun untuk tipe data string, integer, dan tipe-tipe skalar
lainnya. Akan tetapi, lain lagi ceritanya jika referensi diimplementasikan pada tipe data
gabungan (array dan objek).
Untuk lebih jelasnya, perhatikan dua contoh fungsi sederhana berikut:
// Menggunakan referensi
function UseReferensi(&$a) {
$b = $a;
$c = $a;
}
// Tanpa referensi
function NoReferensi($a) {
$b = $a;
$c = $a;
}
Pada kenyataannya, engine PHP (Zend Engine) tidak menciptakan duplikat variabel
ketika melakukan “pass by value”, tetapi menngimplementasikan reference-counted dan
copy-on-write secara internal. Dengan demikian, di fungsi pertama, $b dan $c
memerlukan waktu lebih lama untuk di-set, karena referensi harus di-track. Sementara
itu, $b dan $c di fungsi kedua hanya menunjuk ke nilai asli $a, dan counter referensi di-
increment. Hasilnya, fungsi kedua akan dieksekusi lebih cepat dibanding fungsi pertama.
Di sisi lain, saat menggunakan referensi di fungsi yang menerima parameter berupa array
atau objek, akan meningkatkan performansi. Ini disebabkan, tipe data array dan objek
tidak menggunakan counting referensi. Dengan kata lain, jika menggunakan “pass by
value” pada array atau objek, maka akan menciptakan multiple copy.
Sebagai tambahan, di PHP 5, semua objek secara otomatis akan di-pass by reference.
Jadi, Anda tidak perlu lagi menambahkan operator & secara eksplisit.
Created By Muhammad Syahrizal 67
Flushing Output ke File
Dalam upaya mencapai efisiensi, umumnya fungsi-fungsi input dan otuput (I/O) tidak
langsung menulis data ke file, begitu kita menginstruksikannya. Ada pun yang dilakukan
adalah, menumpuk ke buffer dan baru menyimpan (menulis) ke disk dalam satu waktu.
Agar operasi penulisan langsung dilaksanakan tanpa di-pending terlebih dahulu, gunakan
fungsi fflush(). Contohnya seperti berikut:
$fp = fopen('c:/tmp/test.txt', 'w');
fwrite($fp, 'Test flushing output');
// Flushing output ke file
fflush($fp);
fclose($fp);
Dalam beberapa kasus, ada kemungkinan penulisan file yang memanfaatkan fflush()
mengakibatkan file gagal dibaca. Apabila kasus seperti ini terjadi pada Anda, gunakan
fungsi clearstatcache() sebelum Anda melakukan pembacaan isi file.
Flushing Output ke Browser
Seperti halnya ketika melakukan flushing output ke file, Anda bisa melakukan flushing
output ke browser. Teknik ini bisa lebih meningkatkan pengiriman output ke browser.
Implementasinya, sebaiknya Anda memisahkan proses yang cepat dan proses yang
memerlukan waktu lebih.
Sebagai ilustrasi, sebelum operasi query data selesai, Anda bisa mengirim informasi
status terlebih dahulu. Dengan demikian, client tidak mendapati halaman blank ketika
query sedang dilakukan.
Contoh sederhananya seperti berikut:
// Simulasi request user
$keyword = 'Test Flushing';
$jml = 1000;
echo 'Searching ', $keyword;
// Flushing output ke browser
flush();
echo '<p>Result : <br>';
// Simulasi proses data besar
for ($i=1; $i<$jml; $i++) {
echo $i, ' ', $keyword, '<br>';
}
Fungsi flush() akan mengirimkan semua output yang secara internal di-buffer PHP ke
web server.
Dalam beberapa kasus, browser client mungkin tidak langsung menampilkan data begitu
sudah didapatkannya. Selain itu, beberapa versi Internet Explorer tidak akan
menampilkan data sampai ia menerima sedikitnya 256 byte data. Untuk mengatasi
masalah di Internet Explorer ini, Anda bias mengirim karakter kososng sebelum
melakukan flushing output.
Buffering Output Aplikasi
Created By Muhammad Syahrizal 68
Buffering output merupakan salah satu teknik yang digunakan untuk mengurangi waktu
eksekusi output kode. Ide dasar dari teknik ini adalah, menyimpan semua isi halaman
web ke dalam buffer memori sebelum kemudian dikeluarkan secara bersamaan. Jadi,
output aplikasi tidak langsung dikirimkan ke browser client.
Keuntungan yang bisa Anda peroleh dengan melakukan buffering output antara lain:
• Mengurangi operasi-operasi I/O guna meningkatkan performansi. Di mana operasi-
operasi I/O bisa dilakukan secara sekuensial dan dengan cepat.
• Mengijinkan Anda untuk memodifikasi isi halaman web sebelum kemudian
dikeluarkan.
Untuk mengimplementasikan buffering output, Anda cukup memanggil fungsi ob_start()
di bagian atas kode program dan ob_end_flush() di bagian akhir program. Contoh
implementasinya seperti berikut:
<?php
// Me-replace string
function callback($buff) {
return (str_replace('unjuk kerja',
'performansi', $buff));
}
// Aktifkan buffering output
ob_start('callback');
?>
<html>
<body>
<p>
Buffering output, untuk meningkatkan
unjuk kerja
</p>
</body>
</html>
<?php
echo 'ob size: ', ob_get_length(), ' byte';
// Mengirim buffer output dan disable buffering
while (ob_get_level() > 0) {
ob_end_flush();
}
?>
Sebenarnya, tanpa memanggil ob_end_flush() pun, data akan tetap dikeluarkan begitu
kode selesai diekseksui. Meskipun demikian, untuk menyeimbangkan kode, sebaiknya
Anda memanggil ob_end_flush().
Dalam melakukan buffering output, Anda juga bisa menentukan sendiri ukuran buffer.
Ukuran ini akan dijadikan sebagai batas jumlah data yang akan di-buffer. Selanjutnya,
setiap buffer penuh, data akan dikeluarkan ke browser client. Langkah ini bisa mencegah
penggunaan memori yang berlebihan, ketika data cukup besar dan memori terbatas.
Kompresi Output
Created By Muhammad Syahrizal 69
Kompresi output adalah salah satu teknik yang efektif dan efisien untuk meningkatkan
performansi aplikasi. Apabila kompresi diaktifkan, ia akan mendeteksi entry khusus di
request browser dan mengkompres setiap output yang dikeluarkan oleh aplikasi.
Selanjutnya, browser akan men-dekompres data dari server sebelum ditampilkan ke user.
Bagaimanapun juga, teknik kompresi memerlukan dukungan browser. Apabila browser
tidak mendukung dekompresi, proses kompresi tidak akan berpengaruh. Umumnya,
kebanyakan browser saat ini memiliki kemampuan untuk menerima data terkompres.
Ada dua pendekatan yang bisa Anda lakukan untuk mengkompres output aplikasi.
Pertama, dengan melakukan konfigurasi langsung pada directive zlib di php.ini, dan
kedua menggunakan fungsi-fungsi kontrol output. Contoh pendekatan pertama seperti
berikut:
zlib.output_compression= On
Untuk mendukung kompresi, Anda juga bisa menetapkan level kompresi.
; minimal compression
zlib.output_compression_level= 1
; maximal compression
zlib.output_compression_level= 9
Semakin tinggi level kompresi, akan semakin kecil ukuran data yang dihasilkan. Akan
tetapi, sebagai
konsekuensinya, ini memerlukan waktu lebih bagi CPU server untuk mengkompres data.
Untuk pendekatan kedua, gunakan fungsi ob_start() dengan parameter ob_gzhandler().
// Untuk menghindari konflik kompresi
if (!ini_get('zlib.output_compression')) {
// Buffering output dengan kompresi
ob_start('ob_gzhandler');
echo 'kompresi dengan ob_gzhandler <p>';
} else {
echo 'kompresi dengan zlib.output_compression <p>';
}
for ($i=0; $i<10; $i++) {
echo $i, ' Test kompresi <br>';
}
echo 'size: ', ob_get_length();
Pada prinsipnya, kedua pendekatan di atas memerlukan ekstensi zlib. Artinya, kedua
pendekatan tersebut tidak dapat bekerja seperti yang diharapkan apabila ekstensi zlib
tidak aktif. Sebagai tambahan, Anda tidak dapat menggunakan kedua pendekatan tersebut
secara bersamaan. Disarankan, Anda memilih pendekatan yang kedua, dibanding
menggunakan ob_gzhandler().
Caching Content Aplikasi
Caching content adalah teknik penyimpanan isi halaman (content) web yang di-generate
secara dinamis dan selanjutnya bisa di-retrieve untuk ditampilkan ke browser client.
Pendekatan ini sangat efisien sekali, karena memungkinkan Anda “mengubah” halaman
dinamis PHP menjadi halaman statis, melakukan buffering output, dan menyimpan ke
suatu file.
Untuk mengimplementasikan caching content, Anda bisa membuat kode program sendiri
atau memanfaatkan paket PEAR yang sudah tersedia. Mengingat caching ini sangat
Created By Muhammad Syahrizal 70
kompleks, akan lebih praktis jika memanfaatkan paket Cache dari PEAR. Berikut ini
contoh kode programnya:
// Include class PEAR::Cache_Lite Output
require_once 'Cache/Lite/Output.php';
// Konfigurasi option Cache_Lite
$opts = array(
'cacheDir' => './cache/',
'writeControl' => 'true',
'readControl' => 'true',
'readControlType' => 'md5'
);
// Membuat objek Cache_Lite_Output
$cache = new Cache_Lite_Output($opts);
// Set lifetime caching (1 minggu)
$cache->setLifeTime(302400);
// Start caching dengan id header
if (!$cache->start('header', 'Static')) {
?>
<html>
<head>
<title>Caching with PEAR::Cache_Lite</title>
<body> <center>
<p> Simulasi Header Page <br>
Last modified @ <?=date('H:i:s')?> <hr><p>
<?php
// Output di-buffer sampai pemanggilan
// method end(), dan simpan ke cache
$cache->end();
}
// Simulasi content body dinamis
// Lifetime = 5 detik
$cache->setLifeTime(5);
if (!$cache->start('body', 'Dynamic')) {
echo 'Body already modified... <br>';
echo 'Last modified @ ', date('H:i:s');
$cache->end();
}
// Content footer, statis
$cache->setLifeTime(302400);
if (!$cache->start('footer', 'Static')) {
?>
<p><hr> Simulasi Footer Page <br>
Last modified @ <?=date('H:i:s')?>
</body>
</html>
<?php
$cache->end();
}
Created By Muhammad Syahrizal 71
Profiling Kode
Untuk mengukur dan menyimpulkan bahwa suatu fungsi atau konstruksi bahasa
dieksekusi cepat atau lambat, tentu tidak bisa hanya berdasar analisis kode. Tool
pengukuran yang dapat merepresentasikan waktu eksekusi kode secara nyata adalah kode
profiler.
Pada prinsipnya, semua kode profiler PHP memiliki acuan dasar untuk melakukan
pengukuran, misalnya dengan fungsi microtime() atau getrusage(). Secara garis besar,
profiler mendapatkan nilai eksekusi dengan rumus waktu eksekusi akhir (selesai)
dikurangi waktu awal eksekusi.
Berdasarkan rumus global yang digunakan oleh kode profiler, Anda juga bisa membuat
sendiri kode profiler yang sederhana. Kode programnya seperti berikut:
<?php
// Eksekusi fungsi ketika pemrosesan kode selesai
register_shutdown_function('testSummary');
$timing = array();
function startTest($label, $fungsi, $iter=1) {
global $timing;
echo 'Testing ', $label, '<br>';
// Flushing output buffer
ob_flush();
$start = currTime();
// Memanggil fungsi yang dispesifikasikan
call_user_func($fungsi, $iter);
$timing[$label] = currTime() - $start;
return $timing[$label];
}
function testSummary() {
global $timing;
if (empty($timing)) {
return;
}
// sort reverse elemen array
arsort($timing);
// Set pointer ke elemen pertama
reset($timing);
$slowest = current($timing);
// Set pointer ke elemen terakhir
end($timing);
echo '<h4>The Winner is: ', key($timing), '</h4>';
echo '<table border=1> <tr> <td> Contestants </td>';
foreach ($timing as $label => $time1) {
echo '<th>', $label, '</th>';
}
echo '</tr>';
$copy = $timing;
foreach ($copy as $label => $time1) {
echo '<tr><td><b>', $label, '</b><br>';
printf("%.3f seconds</td>n", $time1);
foreach ($timing as $label2 => $time2) {
$percent = (($time2 / $time1) - 1) * 100;
if ($percent > 0) {
Created By Muhammad Syahrizal 72
printf("<td>%.3f seconds <br> %.1f%% slower", $time2,
$percent);
} elseif ($percent < 0) {
printf("<td>%.3f seconds <br> %.1f%% faster", $time2, -
$percent);
} else { // sama dengan 0
echo '<td align=center> -';
}
echo '</td>';
}
echo '</tr>';
}
echo '</table>';
}
// Get current time (format Unix)
function currTime() {
list($usec, $sec) = explode(' ', microtime());
return ((float)$usec + (float)$sec);
}
?>
Cara menggunakan kode profiler di atas seperti berikut:
<?php
require_once './myprofiler.php';
$arr = array('a'=> 'satu', 'b'=> 'dua',
'c'=> 'tiga', 'd'=> 'empat', 'e'=> 'lima');
$loops = 1000000;
startTest('array_key_exists()','use_key', $loops);
startTest('isset()', 'use_isset', $loops);
function use_key($loops) {
global $arr;
for ($i=0; $i<$loops; $i++) {
if (array_key_exists('c', $arr)) {
// elemen ditemukan
} else { exit('err1...'); }
}
}
function use_isset($loops) {
global $arr;
for ($i=0; $i<$loops; $i++) {
if (isset($arr['c'])) {
// elemen ditemukan
} else { exit('err2...'); }
}
}
?>
Apabila Anda merasa kurang puas dengan kinerja kode profiler di atas, sebagai
tambahan, gunakan paket Benchmark yang tersedia di PEAR. Implementasinya seperti
berikut:
// Include class PEAR::Benchmark Iterate
require 'Benchmark/Iterate.php';
Created By Muhammad Syahrizal 73
$arr = array('a'=> 'satu', 'b'=> 'dua',
'c'=> 'tiga', 'd'=> 'empat', 'e'=> 'lima');
$loops = 1000; // loop 1000 kali
function use_key($arr) {
global $loops;
for ($i=0; $i<$loops; $i++) {
if (array_key_exists('c', $arr)) {
// elemen ditemukan
} else { exit('err1...'); }
}
}
function use_isset($arr) {
global $loops;
for ($i=0; $i<$loops; $i++) {
if (isset($arr['c'])) {
// elemen ditemukan
} else { exit('err2...'); }
}
}
$timer =& new Benchmark_Iterate;
$timer->run($loops,'use_key', $arr);
$res1 = $timer->get();
$timer->run($loops,'use_isset', $arr);
$res2 = $timer->get();
echo '<h4>Summary</h4>';
echo "<p>Mean execution time of key: $res1[mean]";
echo "<p>Mean execution time of isset: $res2[mean]";
Menggunakan PHP dan Pustaka GD
AVATAR
Avatar adalah file gambar yang dipakai sebagai identitas dari seseorang pada suatu board
atau forum.
Biasanya gambar ini berukuran maksimal 10 kilobyte dan berdimensi maksimal 100 x
100 pixel (meskipun ada juga yang lebih besar lagi).
Gambar random avatar ini akan muncul secara acak/berganti-ganti setiap halaman
tersebut diload/dibuka.
PERSIAPAN
Untuk membuat random avatar, kita membutuhkan:
- script php (ini yang akan kita buat)
- web server yang mendukung PHP
- pustaka (library) GD (untuk manipulasi gambar).
Bagi Anda yang kesulitan untuk mendapatkan free webserver yang mendukung PHP,
mungkin link-link berikut ini bisa membantu :
• http://www.lycos.co.uk
(PHP & MySQL, space 50 MB, iklan 1/4 halaman :P)
• http://www.t35.com
Created By Muhammad Syahrizal 74
(PHP, space no limit, iklan pop up)
• http://www.free-php.cjb.net
(situs daftar web server gratisan yang mendukung PHP)
Sedangkan untuk pustaka GD, silahkan download dari http://www.boutell.com/gd/
Bagaimana dengan yang menggunakan web server gratisan, apakah sudah tersedia
pustaka GD? Untuk itu Anda bisa mengeceknya dengan cara sebagai berikut :
1. Buat script php dengan nama (misalnya) info.php dengan isi:
<?
phpinfo();
?>
2. Upload ke web server Anda.
3. Panggil script tersebut : http://web.server.anda/info.php lewat web browser Anda,
kemudian carilah baris yang berisi penjelasan tentang GD. Jika tidak ada, berarti web
server tersebut tidak menyediakan pustaka GD.
MULAI MENYIAPKAN GAMBAR-GAMBAR
Siapkan gambar-gambar yang akan digunakan sebagai avatar. Sebelumnya, Anda harus
tahu bahwa tidak semua forum bisa menampilkan gambar hasil manipulasi dari GD/PHP.
Beberapa dari forum melakukan pengecekan terhadap tipe file yang digunakan sebagai
avatar. Agar lebih rapi, letakkan gambar-gambar tersebut dalam suatu folder, misalnya
image.
Ada baiknya Anda memberi nama yang berurutan untuk file-file gambar tersebut agar
lebih mudah dalam mengingatnya. Dalam contoh ini adalah pica.jpg, picb.jpg, picc.jpg
dst. Yang perlu Anda perhatikan bahwa saat ini GD tidak lagi mendukung file GIF, jadi
hindari pemakaian file GIF.
MENULISKAN SCRIPT PHP
Buka teks editor kesayangan Anda, pakai notepad juga sah-sah saja kok. Kemudian
tuliskan script berikut:
<?
Header("Content-type: image/jpeg"); // mengirim header
// menentukan waktu acak
srand ((float) microtime() * 10000000);
// tuliskan nama-nama file avatar Anda, tanpa ekstensi file.
$input = array ("pica", "picb", "picc", "picd", "pice", "picf","picg");
// mengacak urutan avatar yang tampil
$rand_keys = array_rand ($input, 2);
// memasukkan hasil acak ke variable $pic
$pic= $input[$rand_keys[0]];
// mulai membaca file menggunakan pustaka GD
$string=implode($argv," ");
// sesuaikan path file Anda
$im = imageCreateFromJpeg("image/$pic.jpg");
$color = ImageColorAllocate($im, 250, 52, 0);
Created By Muhammad Syahrizal 75
$px = (imagesx($im)-7.5*strlen($string))/2;
// tentukan ukuran dan posisi font
ImageString($im,2,$px,2,$string,$color);
ImageJpeg($im);
// menghentikan proses
ImageDestroy($im);
?>
Simpan script tersebut dengan nama (misalnya) avatar.php. Selanjutnya upload script ini
beserta gambargambar yang digunakan sebagai avatar ke web server Anda.
TES RANDOM AVATAR
Sebelum menggunakannya dalam forum, sebaiknya avatar yang baru saja dbuat ini dicek
dulu bisa jalan apa tidak. Buka browser web Anda, lalu panggilah script avatar.php
tersebut dengan alamat:
http://web.server.anda/avatar.php.
Jika sudah tampil, coba klik tombol refresh/reload atau tekan F5 di keyboard. Apakah
avatar Anda sudah berubah-rubah?
Dengan script tadi, Anda juga bisa menuliskan nama pada avatar, cukup tambahkan
?namaanda pada akhir
alamat avatar Anda:
http://web.server.anda/avatar.php?namaanda
MENGGUNAKAN RANDOM AVATAR
Penggunaannya sama saja dengan penggunaan avatar atau file gambar lainnya. Pada
forum, pilihan untuk merubah avatar biasanya ada pada control panel/option atau yang
lain. Pilih menu avatar. Kemudian pada kolom isian avatar, masukkan alamat avatar
tersebut sebagaimana Anda memanggilnya lewat web browser.
Konfersi Tanggal & Bulan ke
Bahasa Indonesia
Nah sekarang kita akan coba bermain dengan fungsi date() pada PHP, sekedar info fungsi date()
ini nilainya di ambil dari tanggal yang ada dalam web server. Berbeda dengan fungsi date() pada
javascript tanggalnya di ambil dari computer client :p
OK…. Lewat fungsi date() kita akan mengubah ke dalam bahasa Indonesia… karena defaultnya
adalah bahasa inggris… silahkan perhatikan script di bawah
<?php
$engDate=date("l F d, Y H:i:s A");
echo "
switch (date("w")) {
English Date : ". $engDate ."<p>";
case "0" : $hari="Minggu";break;
case "1" : $hari="Senin";break;
case "2" : $hari="Selasa break; ";
case "3" : $hari="Rabu";break;
Created By Muhammad Syahrizal 76
case "4" : $hari="Kamis";break;
case "5" : $hari="Jumat";break;
case "6" : $hari="Sabtu";break;
}
switch (date("m")) {
case "1" : $bulan="Januari";break;
case "2" : $bulan="Februari";break;
case "3" : $bulan="Maret";break;
case "4" : $bulan="April";break;
case "5" : $bulan="Mei";break;
case "6" : $bulan="Juni";break;
case "7" : $bulan="Juli";break;
case "8" : $bulan="Agustus";break;
case "9" : $bulan="September break; ";
case "10" : $bulan="Oktober";break;
case "11" : $bulan="November";break;
case "12" : $bulan="Desember";break;
}
$indDate="$hari ". date("d") ." $bulan". date(" Y H:i:s A");
echo "Tanggal Indonesia : ". $indDate ."<br>";
?>
Membatasi halaman website dari
browser tertentu dengan PHP
Sebelumnya penulis ingin memberitahukan bahwa tutorial ini saya tulis untuk tujuan pendidikan
(FOR EDUCATION PURPOSE ONLY). Tanpa ada maksud menjelekkan satu product tertentu ..
Browser yang dipakai untuk uji coba adalah Mozilla Firefox 1.5 dan Microsoft Internet Explorer 6.0
dimana Internet Explorer-lah yang bakal tidak dapat meng-access halaman situs. Untuk
pengembangan lebih lanjutnya silahkan Anda mencoba browser yang lainnya.
Nah agar website dapat mengenali browser, haruslah kita buat satu script yang bertugas mengenali
browser dari para pengunjung. Dan kemudian kita akan terus meng-include script tersebut di setiap
halaman lainnya.
Memang sih bisa saja script dibawah ini dituliskan disetiap halaman Anda, tapi hal ini akan banyak
menyita waktu ketimbang Anda meng-include-nya, maaf kalau defenisi saya salah.
Tanpa basi-basi karena nanti basi langsung aja kita kebagian script PHP-nya OK.
Berikut contoh script-nya:
config. php
<?
/* filename config. php */
// for metatag //
$author="pai";
$thn=date("Y");
$deskripsi="sharing my knowladge";
// end of metatag //
$sitename="Membatasi Akses Halaman Website dari Browser tertentu"; //for title//
//browser identity //
$surf02="Konqueror/3.3"; // Konqueror/3.3 is Konqueror 3.3(Linux) //
$surf03="MSIE 6.0"; // MSIE 6.0 is Internet Explorer and Windows Explorer(Win32)
//
$surf04="MSIE 5.0"; // MSIE 5.0 is Internet Explorer and Windows Explorer(Win32)
//
?>
config.browser.php
<?
Created By Muhammad Syahrizal 77
/* filename config.browser.php */
//Bagian ini untuk mendapatkan informasi UserAgent*/
$pageagent=$_SERVER["HTTP_USER_AGENT"];
$pageagent=str_replace("(","",$pageagent);
$pageagent=str_replace(")","",$pageagent);
/*Dibagian ini akan dipisahkan antara Browser dan operasi sistem*/
list($mozila,$bws,$osname,$dig)=explode(";",$pageagent);
$bws=trim($bws);
?>
OK, karena script pengenal browser telah dibuat maka selanjutnya kita beralih kebagian isi
website…
index.php
<?
// filename index.php //
@include("config.php");
@include_once("config.browser.php");
echo("<!-- Copyright (C) 2006 - $thn by $author --> ");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<?
echo("<meta name=author content=$author />");
echo("<meta name=description content=$deskripsi /> ");
/* $bws - nge-cek browser */
if (($bws==$surf03) OR ($bws==$surf04))
{
echo("<title>$sitename .:: for education purpose ONLY !!! ::.</title>");
echo("</head>¥n");
echo("<body>");
echo("<!--for education purpose ONLY -->");
echo("<center><br /><br /><br />");
echo("<H1>Access Denied !!!</H1>");
echo("<br /><a href='javascript:history.go(-1)'>Back</a></center>");
echo("<br />");
echo("</body> ");
echo("</html>");
}else{
?>
<title><? echo "$sitename"; ?> .:: for education purpose ONLY!!! ::.</title>
</head>
<body class="bodymain">
<center>
| <a href="index.php" title="ke index">Home</a> | <a href="link1.php"
title="buka
link pertama">Link#01</a> | <a href="link2.php" title="buka link
kedua">Link#02</a> |
<br><br><br>
Nah ini dia isi halaman kamu... mudahkan??!!!!!
</body>
</html>
<?
}
?>
Berikut contoh halaman pertama.
link1.php
<?
// filename link1.php //
@include("config.php");
@include_once("config.browser.php");
echo("<!-- Copyright (C) 2006 - $thn by $author -->");
Created By Muhammad Syahrizal 78
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<?
echo("<meta name=author content=$author />");
echo("<meta name=description content=$deskripsi />");
/* $bws - nge-cek browser */
if (($bws==$surf03) OR ($bws==$surf04))
{
echo("<title>$sitename .:: for education purpose ONLY !!! ::.</title>");
echo("</head>");
echo("<body class='bodymain'>");
echo("<!--for education purpose ONLY -->");
echo("<center><br /><br /><br />");
echo("<H1 class=big1>Access Denied !!!</H1>");
echo("<br /><a href='javascript:history.go(-1)'>Back</a></center>");
echo("<br />");
echo("</body>");
echo("</html>");
}else{
?>
<title><? echo "$sitename"; ?> - Link#01 .:: for education purpose
ONLY!!! ::.</title>
</head>
<body class="bodymain">
<center>
| <a href="index.php" title="ke index">Home</a> | <a href="link1.php"
title="buka
link pertama">Link#01</a> | <a href="link2.php" title="buka link
kedua">Link#02</a> |
<br><br><br><!-- bagian isinya-->
Halaman pertama...
</body>
</html>
<?
}
?>
Berikut contoh halaman kedua.
Link2.php
<?
// filename link2.php //
@include("config.php");
@include_once("config.browser.php");
echo("<!-- Copyright (C) 2006 - $thn by $author -->");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<?
echo("<meta name=author content=$author />");
echo("<meta name=description content=$deskripsi />");
/* $bws - nge-cek browser */
if (($bws==$surf03) OR ($bws==$surf04))
{
echo("<title>$sitename .:: for education purpose ONLY !!! ::.</title>");
echo("</head>");
echo("<body class='bodymain'>");
echo("<!--for education purpose ONLY -->");
echo("<center><br /><br /><br />");
echo("<H1 class=big1>Access Denied !!!</H1>");
echo("<br /><a href='javascript:history.go(-1)'>Back</a></center>");
echo("<br />");
echo("</body>");
echo("</html>");
}else{
?>
Created By Muhammad Syahrizal 79
<title><? echo "$sitename"; ?> - Link#02 .:: for education purpose
ONLY!!! ::.</title>
</head>
<body class="bodymain">
<center>
| <a href="index.php" title="ke index">Home</a> | <a href="link1.php"
title="buka
link pertama">Link#01</a> | <a href="link2.php" title="buka link
kedua">Link#02</a> |
<br><br><br><!--bagian isinya-->
Halaman kedua...
</body>
</html>
<?
}
?>
Jika kamu kreatif, dengan script config.php dan config.browser.php diatas, kamu bahkan dapat
membatasi akses Sistem Operasi !!! .
Membuat Buku Tamu Dengan Validasi E-mail
Tulisan ini terinspirasi dari kakak kelasku yang mengatakan bahwa sebagian besar
mahasiswa yang membuat website untuk tugas akhirnya sering melakukan kesalahan
dalam hal pembuatan buku tamu, khususnya pada penulisan e-mail. Seharusnya e-mail
yang beformat <username>@<host> sajalah yang akan ditampilkan, tetapi karena tidak
adanya script yang berfungsi untuk memvalidasi sebuah e-mail akhirnya penulisan
e-mail yang asal-asalanpun ditampilkan. Sehingga, akupun mencoba membuat sebuah
aplikasi bukutamu dengan validasi e-mail dalam sebuah artikel yang sederhana ini.
Hal pertama yang kita lakukan adalah membuat sebuah database yang bernama
bukutamu, dengan rancangan tabel basis data, sebagai berikut :
Setelah membuat database selanjutnya yang kita lakukan adalah membuat beberapa
Script untuk membuat buku tamu tersebut, yang terdiri dari 4 buah.
Berikut ini scriptnya :
1. Script Koneksi inc.php
<?php
mysql_connect("localhost","","");
mysql_select_db("bukutamu");
Created By Muhammad Syahrizal 80
</tr>
<tr bgcolor="#990000">
<td> <div align="right"><font color="#FFFFFF" size="2"
face="Verdana">Komentar</font></div></td>
<td> <div align="center"><font color="#FFFFFF" face="Verdana"><font
size="2">:</font></font></div></td>
<td> <div align="left"> <font color="#FFFFFF" size="2" face="Verdana">
<textarea name="komentar" rows="5" id="komentar"></textarea>
</font></div></td>
</tr>
<tr bgcolor="#990000">
<td colspan="3"> <div align="center"> <font color="#FFFFFF" size="2"
face="Verdana">
<br>
<input type="submit" name="Submit" value="Submit">
<input name="Reset" type="reset" id="Reset" value="Reset">
<br>
<br>
</font></div></td>
</tr>
<tr bgcolor="#990000">
<td colspan="3"> <div align="center"><font face="Verdana"><font
size="2"><font color="#FFFFFF"></font></font></font></div></td>
</tr>
<tr bgcolor="#990000">
<td colspan="3"> <div align="center"><font color="#FFFFFF" size="2"
face="Verdana"><a href="tampil.php">Lihat
Daftar Pengisi Buku Tamu</a><br>
<br>
</font></div></td>
</tr>
</table>
</div>
</form>
<div align="center"> </div>
</body>
</html>
3. Script kirim.php
<?php
include "koneksi.inc.php";
if (!empty($nama) AND !empty($lokasi) AND !empty($email)
AND !empty($komentar))
{
if (!empty($email))
{
Created By Muhammad Syahrizal 82
$karakter1=strstr($email,"^[_a-z0-9-]+(¥.[_a-z0-9-]+)*@[a-z0-9-]+(¥.[a-z0-9-]+)*(¥.[a
-z]{2,3})$");
if (strlen($karakter1)==0)
if (eregi("^[_a-z0-9-]+(¥.[_a-z0-9-]+)*@[a-z0-9-]+(¥.[a-z0-9-]+)*(¥.[a-z]{2,3})$",
$email)) {
$tanggal=date("l,d-F-Y");
$jam=date("H:i:s");
$perintah="INSERT INTO bukutamu VALUES
('$no','$nama','$lokasi','$email','$komentar','$tanggal','$jam')";
$hasil=mysql_query($perintah);
if ($hasil)
{
echo ("<body bgcolor=#990000>");
echo("<title>++Pesan Sukses++</title>");
echo("<FONT face=Verdana size=2 font color=white>");
echo("<div align=center>");
echo("Terima Kasih,<B> $nama </B>, Atas Pengiriman Komentarnya<BR><br>");
echo("Kamu Memang Sahabat Gue Yang Baik Man !<BR>");
echo("<br><A HREF=tampil.php>Lihat Daftar Pengisi Bukutamu</A>");
}
else
{
echo ("<body bgcolor=#990000>");
echo("<title>++Pesan Erorr++</title>");
echo("<div align=center>");
echo("<FONT face=Verdana size=2 font color=white>");
echo("Maaf!! Proses Pengiriman Bukutamu Gagal<br>");
echo("<br><A HREF=isi.php>Ulangi</A>");}
}
else
{
echo ("<body bgcolor=#990000>");
echo("<title>++Pesan Error++</title>");
echo("<div align=center>");
echo("<FONT face=Verdana size=2 font color=white>");
echo("Maaf !! Ada Kesalahan Dalam Penulisan Email!!<BR>");
echo("<br><A HREF=isi.php>Ulangi</A>");
}
}
}
else
{
echo ("<body bgcolor=#990000>");
echo("<title>++Pesan Erorr++</title>");
echo("<div align=center>");
echo("<FONT face=Verdana size=2 font color=white>");
Created By Muhammad Syahrizal 83
echo("Maaf!! Data Yang Anda Isikan Tidak Lengkap!!<BR>");
echo("<br><A HREF=isi.php>Ulangi</A>");
}
?>
4. Script tampil.php
<?php
echo("<FONT face=Verdana size=2 font color=#ffcc00>");
echo ("<br><STRONG><DIV ALIGN=CENTER>Daftar Pengisi Buku
Tamu<BR><br></STRONG></DIV><hr>");
include "koneksi.inc.php";
if (empty($awal))
$awal=0;
$perintah1="SELECT * from bukutamu ORDER BY no DESC LIMIT $awal,5";
$hasil1=mysql_query($perintah1);
$row=mysql_fetch_row($hasil1);
do{
list($id,$nama,$lokasi,$email,$komentar,$tanggal,$jam)=$row;
echo("<body bgcolor=#99000>");
echo("<FONT face=Verdana size=2 font color=white div align=left>");
echo "<font color=white>
Nama : $nama <br>
Lokasi : $lokasi <br>
E-mail : $email <br>
Komentar :</font> $komentar<br>
<font color=#ffcc00 size=1>
Posted : $tanggal,$jam <br> <br><hr><br>";
}
while ($row=mysql_fetch_row($hasil1));
$perintah2="SELECT * FROM bukutamu";
$hasil2=mysql_query($perintah2);
$jumlah=mysql_num_rows($hasil2);
$i=$jumlah/5;
$i=ceil($i);
echo("<font face='verdana' size='2' font color=white>");
echo("Halaman: ");
for($j=1;$j<=$i;$j++)
{
$awal=(($j-1)*4+$j)-1;
echo("<a href='tampil.php?awal=$awal&page=$j'>[$j]</a> ");
}
echo ("<p><p align=center><a href=isi.php>Isi Buku Tamu</a>");
?>
Created By Muhammad Syahrizal 84
Membuat Hit Counter rekursi
Sederhana dengan PHP
Dengan banyaknya situs yang setiap hari bermunculan di internet, maka situs-situs
itupun saling bersaing satu sama lain untuk mendapatkan perhatian para netter. Berbagai
macam hal bisa dilakukan oleh webmaster disebuah situs internet. Antara lain, mereka
bisa menambah topik yang hangat dibicarakan, game, diskusi, jejak pendapat, ataupun
menampilkan total pengunjung yang telah mengunjungi situs tersebut mulai awal
berdirinya situs sampai saat ini.
Hit counter awalnya digunakan untuk mendapatkan jumlah pengunjung pada suatu situs
dan rating situs tersebut. Jika suatu situs dibanjiri pengunjung, maka situs itupun
semakin popular.
Hitcounter adakalanya dibuat dengan berbagai macam bahasa pemrograman yang dapat
menarik para netter karena tampilannya. Pada pembahasan ini, saya akan mencoba
membuat hit counter yang simple, sederhana dan tentunya informative.
Algoritma
Misal file yang kita buat kita beri nama hitcounter.php, saya akan meletakkan nilai
inisialisasi hitcounter, yaitu $counter pada awal file. Nantinya akan otomatis di edit
dan ditambah satu pada awal file tersebut, jika ada yang mengunjungi situs. Hal ini
dilakukan secara otomatis oleh fungsi fopen(), fputs(), dan fungsi file lainnya.
Listing program
<?
$counter=0;
// $counter=0 adalah nilai inisialisasi awal perhitungan
// naikkan variabel counter sebesar 1
$counter++;
// edit file ini, letakkan kursor di awal file
$file = fopen(basename($PHP_SELF), "r+");
// ganti variabel counter yang lama dengan nilai baru, yaitu setelah
// dinaikkan sebesar 1
fputs($file, "<?n$counter = $counter;");
// tampilkan jumlah pengunjung
echo("<center><h2>$counter jumlah pengunjung!</h2></center>");
?>
Tampilan program waktu di jalankan :
setelah file hitcounter tersebut kita eksekusi, maka bukalah kembali file hitcounter.php
itu, Anda akan mendapati filenya sebagai berikut :
<?
$counter = 1;
// $counter=0 adalah nilai inisialisasi awal perhitungan
// naikkan variabel counter sebesar 1
Created By Muhammad Syahrizal 85
$counter++;
// edit file ini, letakkan kursor di awal file
$file = fopen(basename($PHP_SELF), "r+");
// ganti variabel counter yang lama dengan nilai baru, yaitu setelah
// dinaikkan sebesar 1
fputs($file, "<?n$counter = $counter;");
// tampilkan jumlah pengunjung
echo("<center><h2>$counter jumlah pengunjung!</h2></center>");
?>
Anda bisa menempelkan kode tersebut pada halaman web anda. Kelemahan dari
program ini yaitu apabila lalu lintas yang akan membuka situs Anda begitu padat, maka
akan berebut untuk membuka dan menyimpan file itu. Sehingga di mungkinkan terjadi
kemacetan. Silahkan Anda kembangkan program ini.
Membuat Kallender dengan PHP
<?php
//bulan sekarang
$month=date("m");
//Tahun sekarang
$year=date("Y");
//hari ini
$day=date("d");
//cek jumlah hari tahun sekarang
$endDate=date("t",mktime(0,0,0,$month,$day,$year));
//style untuk table
echo '
<style>
td {
font-size:11;
font-family:verdana;
}
</style>
';
//table untuk menulis tanggal sekarang
echo '<table align="center" border="0" width="100%"
cellpadding=2
cellspacing=1 style=""><tr><td align=center>';
echo date("D, d M Y ",mktime(0,0,0,$month,$day,$year));
echo '</td></tr></table>';
//table untuk menulis hari
echo '
<table align="center" border="0" width="100%" cellpadding=2
cellspacing=1
style="border:1px solid #CCCCCC">
<tr bgcolor="#EFEFEF">
<td align=center><font color=red>Su</font></td>
<td align=center>Mo</td>
<td align=center>Tu</td>
<td align=center>We</td>
Created By Muhammad Syahrizal 86
<td align=center>Th</td>
<td align=center>Fr</td>
<td align=center><font color=blue>Sa</font></td>
</tr>
';
/*
mengecek tanggal 1 bulan sekarang ada pada hari ke berapa
kemudian tambahkan cell td sebanyak var $s
*/
$s=date ("w", mktime (0,0,0,$month,1,$year));
for ($ds=1;$ds<=$s;$ds++) {
echo "<td style="font-family:arial;color:#B3D9FF"
width="15%"
align=center valign=middle bgcolor="#FFFFFF">
</td>";
}
//m
for ($d=1;$d<=$endDate;$d++) {
emulai penulisan tanggal
//
if (date("w",mktime (0,0,0,$month,$d,$year)) == 0) { echo
"<tr>"; }
jika nilai $d (tanggal) adalah hari minggu (0) dibuat baris
baru <tr>
//default warna huruf
$fontColor="#000000";
//
if (date("D",mktime (0,0,0,$month,$d,$year)) == "Sun")
{ $fontColor="red"; }
jika tanggal adalah hari minggu warna huruf merah
//
if (date("D",mktime (0,0,0,$month,$d,$year)) == "Sat")
{ $fontColor="blue"; }
jika tanggal adalah hari sabtu warna huruf biru
//menulis tanggal
echo "<td style="font-family:arial;color:#333333"
width="15%"
align=center valign=middle> <span
style="color:$fontColor">$d</span></td>";
//jika tanggal adalah hari sabtu (6) akhiri baris </tr>
if (date("w",mktime (0,0,0,$month,$d,$year)) == 6) { echo
"</tr>"; }
}
//akhir table
echo '</table>';
?>
Membuat Photo Gallllery
dengan PHP
Yang perlu disiapkan
1. PC (Personal Computer); spesifikasi apa saja
2. Operasi Sistem; terserah anda
Created By Muhammad Syahrizal 87
3. Web Server; IIS/PWS, apache atau apa saja
4. PHP Zend Engine 4.2+ atau 5.0+
5. Text Editor
Langkah 1.
Buat file dengan menggunakan text editor favorit anda, kemudian namakan file
gallery_config.php
Dan isi file adalah sebagai berikut :
<?php
$config['document_title'] = "My Gallery ";
//Gunakan format UNIX direktori dan harus dalam mode
writeable (777)
//hal ini sangat pengaruh untuk sistem operasi UNIX/LINUX
$config['root_direktori_image'] = "C:/Temp/";
$config['nama_direktori_image'] = "images";
$config['thumb_direktori_image'] = "thumbs";
$config['thumbs_width'] = 150;//pixel
//harus dalam mode readable (dapat diakases)
$config['user_database'] = "C:/Temp/user.txt";
$config['kolom_tabel'] = 3; //jumlah kolom perhalaman
$config['baris_tabel'] = 3; //jumlah baris perhalaman
?>
KETERANGAN
$config['document_title'] untuk Judul halaman HTML anda
$config['root_direktori_image'] Folder untuk database photo dan
thumbnail yang akan diupload
$config['nama_direktori_image'] Nama folder untuk menyimpan photo
master yang diupload
$config['thumb_direktori_image'] Nama folder untuk menyimpan
thumbnail photo
$config['thumbs_width'] Besar thumbnail dalam satuan pixel
$config['user_database'] Database user untuk akses mengupload photo
$config['kolom_tabel'] Banyaknya kolom dalam satu halaman
$config['baris_tabel'] Banyaknya baris dalam satu halaman
Langkah 2
Buat file dengan nama gallery_function.php
<?php
class myuser {
var $userdb = array();
function loaduser() {
global $config;
if (file_exists($config['user_database'])) {
Created By Muhammad Syahrizal 88
$fp=fopen($config['user_database'],"r");
while($fg=fgets($fp,1024)) {
$fg=trim($fg);
list($user,$pass)=explode("=",$fg);
$this->userdb[$user]=$pass;
}
fclose($fp);
}
else { die("File database {$config['user_database']} tidak
ditemukan"); }
}
function getuser($usr,$pswd) {$this -> loaduser();
while(list($user,$pass)=each($this->userdb)) {
if ($user==$usr and $pass == $pswd) { return true; }
}}}
function html_header() {
global $config;
echo "<html>
<head>
<title>{$config['document_title']}</title>
</head>
<style>
body,td,th { font-size:9pt; font-family:Tahoma, Arial,
Verdana; }
</style>
<body>";
}
function html_footer() {
echo "</body></html>";
}
function imgThumbs($FILESRC,$FILETHUMBS,$wm=75,$hws=75) {
if (file_exists($FILESRC)) {
list($imagewidth,$imageheight)=getimagesize($FILESRC);
$mw=$imagewidth;$hw=$imageheight;
if ($imagewidth > $wm) {
$imageheight=round(($wm/$imagewidth)*$imageheight,0);
$imagewidth=$wm;
}
if ($imageheight >= $hws) {
$imagewidth=round(($hws/$imageheight)*$imagewidth,0);
$imageheight=$hws;
}
$cc=floor(($hws-$imageheight)/2);$ch=floor(($wm-
$imagewidth)/2)
;
$img_src=imagecreatetruecolor($imagewidth,$imageheight);
$red01=imagecolorallocate($img_src,48,0,0);
$red=imagecolorallocate($img_src,0,0,0);
$wred= imagecolorallocate($img_src,255,255,0);
$des_src=imagecreatefromjpeg($FILESRC);
imagecopyresized($img_src,$des_src,0,0,0,0,$imagewidth,$imag
ehe
ight,$mw,$hw);
Created By Muhammad Syahrizal 89
@imagejpeg($img_src,$FILETHUMBS);
@imagedestroy($img_src);
}
}
function viewimages($imgdb,$page) {
global $config,$allpage;
$x=0;$l=0;
$page=($page-
1)*($config['kolom_tabel']*$config['baris_tabel'])
;
for($i=$page;$i<count($imgdb);$i++) {
$x++;$l++;
if ($x==1) { echo "<tr>"; }
echo "<td align="center">
<a href="imageview.php?master=1&source={$imgdb[$i]}"
target="_blank">
<img src="imageview.php?source=".$imgdb[$i].""
alt="{$imgdb[$i]}">
</a>
</td>";
if ($x==$config['kolom_tabel']) { echo "</tr>";$x=0; }
if ($l==($config['kolom_tabel']*$config['baris_tabel']))
break;
}
$allpage=round(count($imgdb)/($config['kolom_tabel']*$config
['b
aris_tabel']))." ";
$cp=$allpage*($config['kolom_tabel']*$config['baris_tabel'])
;
if (count($imgdb)>$cp) { $allpage=$allpage+1; }
}
function readdbimage($page=4) {
global $config;
$r=0;
if
(file_exists($config['root_direktori_image'].$config['nama_d
irektori_i
mage']) and
file_exists($config['root_direktori_image'].$config['thumb_d
irektori_i
mage'])) {
$od=@opendir($config['root_direktori_image'].$config['nama_d
ire
ktori_image']);
while($rd=@readdir($od)) {
if ($rd == ".." or $rd == "." or !eregi(".jpg$",$rd))
continue;
$imgdb[$r]=$rd;$r++;
}
fclose($od);
}
viewimages($imgdb,$page);
}
Created By Muhammad Syahrizal 90
?>
Langkah 3.
Buat file dengan nama imageview.php
<?php
include_once("config.php");
if ($_GET['master']) {
@readfile($config['root_direktori_image'].$config['nama_dire
kto
ri_image']."/".$_GET['source']); }
else {
@readfile($config['root_direktori_image'].$config['thumb_dir
ekt
ori_image']."/".$_GET['source']); }
?>
Langkah 4.
Buat file dengan nama gallery.php
<?php
/*
* Gallery Photo versi 1.0
* Script Source by Stieven R. Kalengkian
* http://stieven.kawanua.web.id/
*
*/
session_start();
$raw = phpversion();
list($v_Upper,$v_Major,$v_Minor) = explode(".",$raw);
if (($v_Upper == 4 && $v_Major < 1) || $v_Upper < 4) {
$_FILES = $HTTP_POST_FILES;
$_ENV = $HTTP_ENV_VARS;
$_GET = $HTTP_GET_VARS;
$_POST = $HTTP_POST_VARS;
$_COOKIE = $HTTP_COOKIE_VARS;
$_SERVER = $HTTP_SERVER_VARS;
$_SESSION = $HTTP_SESSION_VARS;
$_FILES = $HTTP_POST_FILES;
}
$file_name=$HTTP_POST_FILES["file"]["name"];
$file_size=$HTTP_POST_FILES["file"]["size"];
$file_tmp=$HTTP_POST_FILES["file"]["tmp_name"];
$file_type=$HTTP_POST_FILES["file"]["type"];
include_once("gallery_config.php");
include_once("gallery_function.php");
if (is_writeable(!$config['root_direktori_image'])) {
die("Folder
{$config['root_direktori_image']} harus writeble"); }
if
(!file_exists($config['root_direktori_image'].$config['nama_
direktori_
image']))
Created By Muhammad Syahrizal 91
{
@mkdir($config['root_direktori_image'].$config['nama_direkto
ri_image
']); }
if
(!file_exists($config['root_direktori_image'].$config['thumb
_direktori
_image']))
{
@mkdir($config['root_direktori_image'].$config['thumb_direkt
ori_imag
e']); }
if ($_GET['mode'] == "upload") {
if ($_POST['Submit']) {
$user = new myuser;
if ($user->getuser($_POST['username'],$_POST['password'])
and
$_POST['username'] and $_POST['password']) {
if (
($file_type == "image/pjpeg" or $file_type == "image/jpg" or
$file_type == "image/jpeg" or $file_type == "image/pjpg")
and $file_size < 256000
) {
$data=$config['root_direktori_image'].$config['nama_direktor
i_i
mage']."/".$file_name;
@move_uploaded_file($file_tmp,$data);
imgThumbs($data,$config['root_direktori_image'].$config['thu
mb_
direktori_image']."/$file_name");
echo "<script>location.replace('?')</script>";
}
else { echo "Error!<br>File type image/pjpeg your file
$file_type<br>File size maximum 256 KB your
file".round($file_size/1024)."
KB"; }
}
else { echo "Invalid Username or Password"; }
}
echo '
<form action="" method="post" enctype="multipart/form-data"
name="form1">
<table width="100%" border="0" cellspacing="1"
cellpadding="2">
<tr>
<td>File Photo</td>
<td><input type="file" name="file"></td>
</tr>
<tr>
<td>User </td>
<td><input name="username" type="text"></td>
</tr>
<tr>
Created By Muhammad Syahrizal 92
<td valign="top">Password</td>
<td><input name="password" type="password"></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="Submit" value="Submit">
<button
onClick="location.replace(''.$_SERVER['PHP_SELF'].'')">Can
cel</butto
n></td>
</tr>
</table>
</form>
';
}
else {
html_header();
//echo $_GET['page'];
if (!$_GET['page']){ $_GET['page']=1; };
echo "";
echo "<table width="100%"><tr><td width="50%"></td><td
align="right"><a
href="?mode=upload">Upload</a></td></tr></table>";
echo "<table width="100%">";
readdbimage($_GET['page']);
echo "</table>Halaman {$_GET['page']} dari $allpage : ";
for ($i=1;$i<=$allpage;$i++) { echo "<a
href="?page=$i">$i</a>
"; }
html_footer();
}
?>
Langkah terakhir
Apabila terjadi error. Silahkan periksa kembali script anda, ada kemungkinan terjadi
kesalahan dalam pengetikan.
User Info dengan PHP dan JavaScript
<html>
<head>
</head
<?php
>
/*Bagian ini untuk mengecek IP address apa user menggunakan
IP forward atau
direct*/
if (getenv(HTTP_X_FORWARDED_FOR)){
$IPaddr=getenv(HTTP_X_FORWARDED_FOR);
$ipVIAss=getenv(REMOTE_ADDR);
}
else {
$IPaddr=getenv(REMOTE_ADDR);
Created By Muhammad Syahrizal 93
}
/*Bagian ini adalah fungsi untuk mendapatkan Hostname
resolve dari
Ipaddress*/
function hostname($hostname) {
global $yourhost;
$yourhost=gethostbyaddr($hostname);
}
hostname($IPaddr);
/*Bagian ini untuk mengecek apakah Ipaddress merupakan IP
forwarad, jika
ya IP aslinya (diforward lewat mana)*/
if ($ipVIAss) {
$viasProxy="via $ipVIAss<br>" . getenv(HTTP_COMING_FROM)
."<br>";
}
/*Bagian ini untuk mengecek apakah nilai hostname (IP
resolve) dipenuhi
atau tidak*/
if (!$yourhost) { $yourhost="unknown"; }
//Bagian ini untuk mendapatkan informasi UserAgent*/
$pageagent=$_SERVER["HTTP_USER_AGENT"];
$pageagent=str_replace("(","",$pageagent);
$pageagent=str_replace(")","",$pageagent);
/*Bagian ini adalah untuk pemisahan antara Browser dan
operasi sistem*/
list($mozila,$bws,$osname,$dig)=explode(";",$pageagent);
$bws=trim($bws);
$osname=trim($osname);
$osname=strval($osname);
if (eregi("Windows NT 5.1",$osname)) { $osname="Microsoft
Windows XP"; }
if (eregi("Windows NT 5.0",$osname)) { $osname="Microsoft
Windows 2000"; }
if (eregi("Windows NT 5.2",$osname)) { $osname="Microsoft
Windows 2003"; }
if (eregi("Win 9x",$osname)) { $osname="Microsoft Windows
ME"; }
if (eregi("Windows 98",$osname)) { $osname="Microsoft
Windows 98"; }
/*Bagian ini untuk menampilkan hasilnya*/
echo "
IP Address <b>$IPaddr</b> resolve
<b>$yourhost</b><br><b>$viasProxy</b>
Browser <b>$bws</b> ($mozila) OS <b>$osname</b><br>";
//User Aget PHP Version
echo $_SERVER["HTTP_USER_AGENT"];
ech
?>
o "<hr size1=>";
<!—Bagian ini adalah dalam bentuk javascript -->
<script language="JavaScript">
//User Agent javascript version
Created By Muhammad Syahrizal 94
document.writeln('Screen Resolution '+ screen.width +'x'+
screen.height +'<br>');
UserAgent = navigator. ; userAgent
AgentName = UserAge substring(25,30); nt.
OsName = UserAgent.substring(34,42);
document.write('Browser '+ AgentName +' OS '+ OsName +
'<br>');
document.writeln(navigator.userAgent);
//hanya untuk Netscape 4.x Browsers dan Java enabled
baseAddress = java.net.InetAddress.getLocalHost();
userDomai aseAddress.getHostName(); n = b
write('<p>IP Address '+ baseAddress + ' resolve '+
userDomain); document.
</script>
</html>
Memproteksi Image dengan PHP
Anda ingin mempublish photo-photo anda lewat web site, namun kawatir photo koleksi anda di copy
orang tanpa izin. Ok disini saya akan mencoba membantu dengan memberikan beberapa tips
Langkah pertama adalah dengan cara memproteksi “right click menu” dan fungsi “drag” dan
“select” serta pada browser caranya pada tag BODY tambahkan attribute onselectstart="return false"
oncontextmenu="return false" ondragstart="return false"
<body onselectstart="return false" oncontextmenu="return false" ondragstart="return false">
Nah.. itu baru permulaan sekarang kita lanjut pada langkah berikutnya. Buat file php kita sepakati
saja nama filenya photo.php
Perhatikan script sourcenya :
<?php
#/*
# Image Protection by ipen
# Last modified 9 September 2003
#
# Kawanua Web Design
#
#
/* Nama domain kamu dimana photo hanya dapat di tampilkan lewat domain
asalnya. Untuk mencegah adanya image link dari domain lain */
$authreferrer="www.yourdomainname.com";// edit ganti dengan domain
kamu
/* Get HTTP_REFERER */
$referrer = getenv( "HTTP_REFERER" );
/* Global variable */
$file = $_GET['file'];
if (eregi( "^https?://$authreferrer/", $referrer )) {
/* direkori tempat image kamu berada */
$imagedir="/home/httpd/mydir/photo/";
$imagepath = $imagedir . $file ;
/* make info file, checking type*/
$imageinfo = getimagesize( $imagepath );
if ($imageinfo[2] == 1) {
Created By Muhammad Syahrizal 95
$imagetype = "gif" ;
}
elseif ($imageinfo[2] == 2) {
$imagetype = "jpeg" ;
}
elseif ($imageinfo[2] == 3) {
$imagetype = "png" ;
}
else {
header( "HTTP/1.0 404 Not Found" );
exit ;
}
/* read file and make image file */
readfile( $imagepath );
}
else {
header( "HTTP/1.0 404 Not Found" );
exit ;
}
?>
Ok… bagaimana ?? mudah bukan… tapi tunggu dulu bukan hanya sampai disini
Sekarang mari kita lanjut untuk langkah terakhir. Buat satu file php lagi, dan lagi-lagi kita sepakat
saja nama filenya myphoto.php
<body onselectstart="return false" oncontextmenu="return false"
ondragstart="return false">
Proteksi Image dengan PHP<br>
<!-- namaphoto.jpg masukan nama file photo ingat hanya yg bertipe jpg,
gif atau png -->
<img src="photo.php?file=namaphoto.jpg">
Selesai sudah kita memproteksi photo.
Sekarang bagaimana untuk photo yang lebih dari satu ? jawabannya mudah saja
<img src="photo.php?file=namaphoto1.jpg">
<img src="photo.php?file=namaphoto2.jpg">
<img src="photo.php?file=namaphoto3.jpg">
<img src="photo.php?file=namaphoto4.jpg">
<img src="photo.php?file=namaphoto1.gif">
<img src="photo.php?file=namaphoto2.gif">
<img src="photo.php?file=namaphoto3.gif">
<img src="photo.php?file=namaphoto1.png">
<img src="photo.php?file=namaphoto2.png">
<img src="photo.php?file=namaphoto3.png">
Mengecek Proxy dengan PHP
Proxy merupakan sebuah fasilitas untuk menghubungkan diri ke internet secara bersamasama/
sharing. Proxy dapat menyembunyikan IP Address kita, karena hanya IP kommputer proxy
yang terlihat dari internet. PHP mempunyai cara tersendiri untuk mendeteksi anda yang sedang
terhubung ke internet dengan menggunakan proxy. Bahkan PHP dapat mengetahui IP address
anda sebenarnya . IP Address disini bukan IP Address proxy server tetapi IP Address dari
Created By Muhammad Syahrizal 96
komputer anda yang terhubung ke proxy. Alangkah lebih jelasnya jika langsung menuju contoh :
proxy.php
<?
echo "<html><head><title>Mendeteksi Proxy</title></head>";
if ($HTTP_X_FORWARDED_FOR)
{
echo "Proxy yang anda gunakan...<br><br>";
echo "Terhubung melalui : " . $HTTP_VIA . " - " . $REMOTE_ADDR;
echo "<br>IP kamu: " . $HTTP_X_FORWARDED_FOR;
}
else
{
echo "Anda tidak menggunakan proxy<br>";
$host = gethostbyaddr($REMOTE_ADDR);
echo "IP kamu: " . $REMOTE_ADDR;
echo " ($host)";
}
?>
Penjelasan:
if ($HTTP_X_FORWARDED_FOR)
{
menyatakan jika memang benar-benar terhubung melalui proxy maka
echo "Proxy yang anda gunakan...<br><br>";
echo "Terhubung melalui : " . $HTTP_VIA . " - " . $REMOTE_ADDR;
echo "<br>IP kamu: " . $HTTP_X_FORWARDED_FOR;
$HTTP_VIA memberikan output informasi tentang proxy. Informasi tersebut berupa
hostname dari proxy, port proxy, serta software yang digunakan (biasanya menggunakan
squid).
$REMOTE_ADDR ialah menampilkan IP Address dari proxy server.
$HTTP_X_FORWARDED_FOR menampilkan IP Address komputer anda.
Apabila tidak terhubung dengan proxy maka :
echo "Anda tidak menggunakan proxy<br>";
$host = gethostbyaddr($REMOTE_ADDR);
echo "IP kamu: " . $REMOTE_ADDR;
echo " ($host)";
IP address 10.1.1.9 ialah ip address dari komputer yang penulis gunakan. Sedangkan
202.159.23.170 ialah proxy warnet lokal.
Menggunakan Fungsi Mail() di PHP
Syntax Penulisan
Syntax dari fungsi mail() ini adalah sebagai berikut:
bool mail (string to, string subject, string message, string
[additional_headers]);
Penjelasan dari parameter-parameter yang digunakan adalah sebagai berikut:
- String To, berisi alamat email tujuan yang akan dikirimi pesan
- String Subject, berisi judul pesan yang akan dikirim
- String Message, berisi pesan yang akan dikirimkan
- String [Additional Headers], berisi parameter tambahan, bilamana diperlukan
Created By Muhammad Syahrizal 97
Pengiriman Email Bertipe Teks
Email berbentuk teks adalah email yang paling mudah dan paling sederhana yang dapat
dikirim menggunakan fungsi mail() ini. Kode yang diperlukan untuk pengiriman juga sangat
sederhana. Berikut ini contoh kode PHP untuk pengiriman pesan sederhana yang ditujukan untuk
dia@disana.com dari pengirim saya@disini.com:
<?php
//Mengirimkan pesan untuk dia@disana.com dari saya@disini.com
mail(“dia@disana.com”, “Percobaan Fungsi Mail()”, “Hallo, saya
sedang latihan mengirim email menggunakan PHP.”, “From:
saya@disini.com”);
echo “Kirim email...”; //Ini untuk menulis pesan di layar
browser.
?>
Catatan: Kode didalam fungsi mail() diatas ditulis dalam satu baris.
Tulis kode diatas dalam suatu file teks. Coba ganti alamat email penerima dengan alamat
email anda. Beri nama dengan latihan_mail01.php dan kemudian upload/simpan ke server yang
mendukung PHP dan fungsi mail(). Cobalah untuk akses ke file tersebut dan jika tidak ada pesan
kesalahan, anda akan melihat tulisan “Kirim email...” di browser anda. Cek email anda. Anda akan
mendapat pesan baru yang berasal dari saya@disini.com seperti yang anda kirimkan diatas.
Untuk mengirim pesan teks yang lebih kompleks, dapat dilakukan dengan cara berikut:
<?php
$dari = “Tini <pengirim@pesan.com>”;
$untuk = “Budi <penerima@pesan.com>, penerima2@pesan.com”;
$judul = “Latihan Menggunakan Fungsi Mail() di PHP”;
$balas = “balasan@pesan.com”;
$pesan = “Yth. Pembaca IlmuKomputer.comn”
. “di tempat.nn”
. “Diberitahukan kepada pembaca semua bahwa situs webn”
. “IlmuKomputer.com telah memuat artikel-artikel barun”
. “dengan berbagai topik menarik, diantaranya:n”
. “- Pengenalan Komputern- Pemrograman Komputern”
. “- Aplikasi Komputern- Web dan Internetn”
. “- dan masih banyak lagi...nn”
. “Artikel-artikel tersebut dapat diperoleh secara gratisn”
. “hanya dengan mengunjungi alamat web IlmuKomputer.comn”
. “--rn”
. “Hormat kami,n”
. “Pengelola IlmuKomputer.com”;
$retur = “email_anda@server.com”; //Jika pesan tidak sampai tujuan
$salin = “salinan@pesan.com”; //Kirim salinan pesan ke alamat ini
$kepala= “From: $darinReply-To: $balasnX-Priority: 1n”
. “Return-Path: $returnCc: $salinn”;
//Sekarang saatnya untuk mengirimkan pesan
$kirim = mail($untuk, $judul, $pesan, $kepala);
//Cek keberhasilan pengiriman pesan
if($kirim){
echo “Pesan telah dikirim!”;
}else{
echo “Pesan gagal dikirimkan!”;
}
?>
Dari kode diatas dapat diketahui bahwa pesan tersebut berasal dari seseorang dengan nama
Tini dengan alamat email pengirim@pesan.com dan ditujukan ke dua alamat email, yaitu
penerima@pesan.com (Budi) dan penerima2@pesan.com yang didefinisikan di variabel “$untuk”
juga disertakan satu tembusan (Cc, Carbon Copy) kepada salinan@pesan.com yang didefinisikan di
Created By Muhammad Syahrizal 98
variabel “$salin”. Perhatikan pemberian batasan karakter koma “,” yang ada diantara email penerima
untuk membedakan kedua penerima.
$dari = “Tini <pengirim@pesan.com>”;
$untuk = “Budi <penerima@pesan.com>, penerima2@pesan.com”;
$salin = “salinan@pesan.com”;
Jika pesan dibalas oleh penerima, maka email yang digunakan untuk menerima balasan adalah
email yang ada di variabel “$balas”, yaitu balasan@pesan.com.
$balas = “balasan@pesan.com”;
Prioritas pesan ini di-set sebagai pesan yang mendesak (urgent) yang dinyatakan dengan
memberikan nilai “X-Priority: 1”. Jika pesan yang dikirimkan tidak sampai ke tujuan, maka pesan
akan dikembalikan ke alamat email yang ada di variabel “$retur”, yaitu email_anda@server.com,
sesuai dengan yang tertera di bagian “Return-Path:” di dalam variabel “$kepala”.
$retur = “email_anda@server.com”;
$kepala= “From: $darinReply-To: $balasnX-Priority: 1n”
. “Return-Path: $returnCc: $salinn”;
Karakter “n” (tanpa tanda kutip) yang ada di bagian variabel “$pesan” maupun bagian
variabel “$kepala” digunakan untuk membuat baris baru (new line) dan karakter “r” (tanpa tanda
kutip) digunakan untuk memberikan karakter Carriage Return/Enter. Karakter lain yang bisa
disisipkan di bagian pesan adalah karakter “t” (tanpa tanda kutip) yang mana akan mengahasilkan
karakter tabulasi (Tab) pada pesan yang dikirim.
Coba anda tulis kode diatas dalam file teks, beri nama dengan latihan_mail02.php kemudian
upload ke web server. Jika tidak ada kesalahan, sewaktu anda mengakses halaman tersebut anda
akan mendapatkan tampilan pesan bahwa pesan anda telah dikirim, atau sebaliknya bila pesan anda
gagal dikirim.
Pengiriman Email Bertipe HTML
Selain pengiriman email bertipe teks, PHP dapat pula melakukan pengiriman email bertipe
HTML. Aturan penulisannya pun sama dengan penulisan email bertipe teks, hanya saja pada bagian
header pesan (kepala) harus didefinisikan bahwa pesan yang dikirimkan tersebut bertipe HTML.
Berikut ini contohnya:
<?php
$dari = “Tini <tini@servermail.com>”;
$untuk = “Tono <tono@servermail.com>”;
$judul = “Latihan pengiriman email bertipe HTML”;
$pesan = “<html><head></head><body bgcolor=’#EEFFEE’>”
. “<p>Ini adalah pesan dengan format HTML</p>”
. “</body></html>”;
//Definisikan tipe mime isi pesan berupa kode HTML
$tipe = “text/html; charset=iso-8859-1”;
$kepala= “From: $darinContent-Type: $tipen”;
$kirim = mail($untuk, $judul, $pesan, $kepala);
if($kirim){
echo “Pesan HTML telah terkirim.”;
}else{
echo “Pesan HTML gagal dikirimkan!”;
}
?>
Tampak bahwa perbedaan yang ada hanya terletak pada bagian isi dari pesan (teks warna
hijau) dan penambahan tipe pesan yang dikirimkan (teks warna merah) di bagian header email. Hal
lainnya sama dengan cara pengiriman email teks.
Cobalah anda ketik kode untuk mengirimkan email bertipe HTML diatas di sebuah file teks,
Created By Muhammad Syahrizal 99
kemudian beri nama dengan latihan_mail03.php. Ganti alamat email tujuan di variabel “$untuk”
dengan alamat email anda. Simpan file tersebut dan upload ke web server yang mendukung PHP dan
fungsi mail(), kemudian akseslah file tersebut. Jika tidak ada kesalahan, anda akan mendapatkan
sebuah email baru yang berformat HTML di kotak inbox anda.
Pengiriman Email dengan Attachment
Sekarang akan kita coba membuat form-mail dengan kemampuan untuk mengirimkan pesan
teks maupun HTML dengan tambahan kemampuan untuk menyisipkan satu file sebagai attachment
email. Berikut ini kodenya:
<?php
echo “<html><head><title>Latihan Penggunaan Fungsi
Mail()</title>n”;
echo “</head><body bgcolor=‘#FFFFFF’>n”;
echo “<h1>Latihan Penggunaan Fungsi Mail() di PHP</h1>n”;
if(empty($submit)){
//Jika belum ada data yang dikirim, tampilkan form isian
echo “<form action=‘$PHP_SELF’ method=‘POST’ name=‘frm’ ”;
echo “enctype=‘multipart/form-data’>n”;
echo “<p>Dari: <input type=text name=dari size=25></p>n”;
echo “<p>Untuk: <input type=text name=untuk size=25></p>n”;
echo “<p>Judul: <input type=text name=judul size=30></p>n”;
echo “<p>Isi Pesan:<br> <textarea name=pesan cols=30 rows=5>”;
echo “</textarea></p>n”;
echo “<p>Tipe pesan: <select name=tipe><option value=teks>Teks”;
echo “</option><option value=html>HTML</option></select></p>n”;
echo “<p>Attachment: <input type=file name=att size=25></p>n”;
echo “<p><input type=submit name=submit
value=‘Kirimkan’></p>n”;
echo “</form>”;
}else{
//Data sudah ada, proses dan kirimkan ke email tujuan
if(!empty($att)){
//Ada attachmentnya, proses disini
$fp = fopen($att_name, “r”); //buka attachment dengan mode
baca
$fl = fread($fp, $att_size); //baca isi data attachment
//Enkode data
$fl = chunk_split(base64_encode($fl));
//Buat hash 32 karakter hexa untuk boundary/pembatas blok
$num= md5(time());
//Definisikan header pesan utama
$he = “From: $darirn”
. “MIME-Version: 1.0rn”
. “Content-Type: multipart/mixed; boundary=$numrn”
. “--$numrn”;
//Definisikan tipe pesan yang dikirim
if($tipe==“teks”){
//Tipe pesan plain teks
$he .=“Content-Type: text/plainrn”;
}else{
//Tipe pesan HTML
$he .=“Content-Type: text/html; charset=iso-8859-1rn”;
}
$he .=“Content-Transfer-Encoding: 8bitrnn”
. “$pesanrn”
. “--$numn”;
//Definisikan bagian attachment
$he .=“Content-Type: $att_type; name=“$att_name”rn”
. “Content-Transfer-Encoding: base64rn”
. “Content-Disposition: attachment; ”
Created By Muhammad Syahrizal 100
Mula-mula buatlah sebuah file yang berisi listing dari MySQL Monitor menggunakan Notepad,
melalui Start > Program > Accessories > Notepad. Atau anda dapat menggunakan HTML editor
yang lain sesuai dengan kebiasaan. Ada beberapa variabel yang harus anda rubah nilainya, yaitu:
$hostname ='localhost'; //Masukkan alamat lokasi server
$username ='root'; //User MySQL yang digunakan
$password ='password'; // Masukkan password
Varibel $hostname diisi dengan alamat server MySQL, dapat menggunakan alamat IP atau nama
dari server, $username adalah user yang digunakan untuk masuk ke MySQL server, perhatikan hak
akses user tersebut, semakin tinggi maka semakin besar kekuasaan dari MySQL Monitor. User ‘root’
adalah user dengan hak akses tertinggi dalam MySQL.Varibel $password diisi dengan password dari
user MySQL. Setelah itu, simpan file tersebut dengan nama mysql.php. Besar file tidak akan lebih
dari 3Kb.
File tersebut siap di upload ke server web, ingat anda harus mengupload file mysql.php pada web
server yang support PHP, contohnya Apache (http://www.apache.org). Untuk ujicoba dapat
digunakan paket web server yang berjalan under Windows, seperti Appsrv
(http://appserv.sourceforge.net/) atau PHPTriad (http://http://sourceforge.net/projects/phptriad).
Keduanya sudah didukung dengan server MySQL. Setelah diupload, cobalah buka menggunakan
web browser.
LISTING LENGKAP MYSQL MONITOR (mysql.php);
<html><head><title>MySQL Monitor oleh Bondan Muliawan </title></head>
<body>
<?php
$hostname ='localhost'; //Masukkan alamat lokasi server
$username ='root'; //User MySQL yang digunakan
$password ='password'; // Masukkan password
//Membuat koneksi dengan server MySQL
mysql_connect($hostname,$username,$password);
?>
<form action="<?=$PHP_SELF?>" method="POST">
<p>Perintah (SQL Query) untuk database :
<!-- MEMBUAT FORM UNTUK MEMASUKKAN PERINTAH SQL -->
<select name="database">
<?php
// Melihat list dari database dan membuat DROP DOWN LIST
$databases = mysql_list_dbs();
for ($i=0;$i<mysql_num_rows($databases);$i++)
{
$namadatabase = mysql_db_name($databases,$i);
if ($namadatabase == $database)
echo("<option selected> $namadatabase</option>");
else echo("<option>$namadatabase</option>");
}
?>
</select><br />
<textarea cols="60" rows="5" name="perintah">
<?php
$perintah_tampil=stripslashes(htmlspecialchars("$perintah", ENT_QUOTES));
echo "$perintah_tampil";
?>
</textarea></p>
<p><input name="masukkan" type="submit" accesskey="P" value="Masukkan Perintah <Alt-
Created By Muhammad Syahrizal 102
</html>
PENJELASAN LISTING
Pada awal program anda harus men-deklarasikan variabel yang mencatat informasi mengenai server.
$hostname ='localhost';
$username ='root';
$password ='password';
Lalu membuat hubungan ke server menggunakan perintah:
mysql_connect($hostname,$username,$password);
Dengan adanya koneksi ke server MySQL anda dapat melihat nama-nama dari database yang
tersimpan dalam server dengan perintah:
$databases = mysql_list_dbs();
Menyiapkan textarea untuk memasukkan query:
<textarea cols="60" rows="5" name="perintah">
<?php
$perintah_tampil=stripslashes(htmlspecialchars("$perintah", ENT_QUOTES));
echo "$perintah_tampil";
?>
</textarea>
Perintah PHP ‘stripslashes’ diguna-kan untuk menghilangkan backslash () pada perintah yang di
Post. Sedangkah ‘htmlspecialchars’ ber-fungsi untuk merubah beberapa karakter ke HTML entiti,
seperti '&' (ampersand) menjadi '&'.
Kemudian membuat tombol untuk mengirim query:
<input name="masukkan" type="submit" accesskey="P" value="Masukkan Perintah <Alt-P>"
/>
Untuk menampilkan hasil dari eksekusi query digunakan bantuan tag tabel. Sebelum dibentuk tabel
query harus dieksekusi terlebih dahulu dengan perintah:
$result=mysql_db_query($database,$perintah);
Jika query benar maka $result akan berisi data yang diminta. Untuk menampilkan jumlah kolom
yang diminta menggunakan perintah:
for($i=0;$i<mysql_num_fields($result);$i++)
{...................}
Sedangkan jumlah baris, mengguna-kan perintah :
while($row=mysql_fetch_row($result))
{...................}
Jumlah baris yang terpengaruh oleh hasil dari query dapat diperoleh dengan perintah
‘mysql_affected_rows()’, sedangkan untuk menampilkan pesan kesalahan jika query tidak benar
dapat menggunakan perintah ‘mysql_error()’.
Tips Membuat Messages Board
dengan PHP dan MySQL
Messages board dalam website dewasa ini sudah mulai ngetrend untuk itu saya mencoba
membagi beberapa tips dan
trik untuk membuatnya dengan fitur emoticons (smiles).
Created By Muhammad Syahrizal 104
Sudah tentu jika ada ingin mencoba tips dan trik ini harus sudah mengusai dasar-dasar
HTML, JavaScript, PHP dan MySQL. Namun saya berusaha untuk memberikan
kemudahan untuk mereka yang baru pertama kali atau baru belajar dengan PHP dan
MySQL ini.
Oke! Mari kita mulai…
Langkah pertama… siapkan MySQL server anda
Setelah MySQL server disiapkan langkah berikut adalah kita menyiapkan database dan
table yang akan digunakan untuk menyimpan data messages board. Gunakan mysql client
untuk membuat database dan table. Dan biasanya dalam pake mysql server sudah
terdapat mysql clientnya, tapi anda juga dapat menggunakan mysql client dengan
dukungan GUI sepert MySQLFront yang dapat di download di
http://mysqlfront.venturemedia.de/
Jika anda menggunakan mysql client standard (console) berikut langkah-langkahnya :
root: mysql –h localhost –u root –ppassword
Berikut penjelasannya untuk tulisan yang bercetak tebal :
Localhost, adalah alamat host dari MySQL server
Root, adalah user untuk akses ke MySQL server
Password, adalah password untuk akses ke MySQL server
Dan jika anda berhasil mengakses ke MySQL server maka akan muncul pesan seperti :
Welcome to the MySQL monitor. Commands end with ; or Welcome to the MySQL
monitor.
Commands end with ; or g.
Your MySQL connection id is 35901 to server version: 4.0.12-standard-log
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql>
Setelah anda berhasil mengakses kedalam MySQL server buatlah satu database, caranya
mysql> CREATE DATABASE namadatabase
Atau jika sudah memiliki database dan anda ingin menggunakan database tersebut untuk
menyimpan datanya :
mysql > use namadatabase
Selanjutnya buatlah satu table untuk menyimpan data messages board
CREATE TABLE sms (
id bigint(5) unsigned NOT NULL auto_increment,
sms_from varchar(60) default NULL,
sms_msg varchar(255) default NULL,
sms_date varchar(30) default NULL,
sms_email varchar(60) default NULL,
host enum('minahasa','knet') default NULL,
PRIMARY KEY (id)
Created By Muhammad Syahrizal 105
) TYPE=MyISAM;
Setelah database disiapkan sekarang kita akan beralih ke PHP scriptnya. Disini kita akan
membuat 4 file php
1. config.php (untuk mengatur semua config terutama untuk koneksi ke database server
MySQL)
2. tampilan.php (tampilan utama dari messages board)
3. smile.php (untuk menampilkan emoticons/smiles)
4. sms.php (untuk menampilkan hasil/data messages board)
config.php
<?php
//host dari mysql server
$sqlhost="localhost";
//user dari mysql server
$sqluser="root";
//password dari mysql server
$sqlpasswd="";
//database dimana data messages board di simpan
$sqldb="namadatabase";
$conn=mysql_connect("$sqlhost","$sqluser","$sqlpasswd") or die("<p
align=center>CAN NOT CONNECT TO MYSQL SERVER");
mysql_query("use $sqldb");
extract($_SERVER,"EXTR_PREFIX_SAME");
extract($HTTP_ENV_VARS,"EXTR_PREFIX_SAME");
extract($HTTP_GET_VARS,"EXTR_PREFIX_SAME");
extract($HTTP_POST_VARS,"EXTR_PREFIX_SAME");
?>
File : Tampilan.php
<html>
<head>
<title>Messages boar by ipen</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<table width="165" border="0" align="center" cellpadding="0"
cellspacing="0">
<tr>
<td><table width="100%" border="0"
style="background:#FAE852;border-bottom:1px solid
Created By Muhammad Syahrizal 106
<body bgcolor="#FFE401" text="#000000" link="#000000" vlink="#000000"
alink="#000000" leftmargin="0" topmargin="0" marginwidth="0"
marginheight="0">
<?php
include("config.php");
function smiles($msgsmiles) {
global $smsmsg;
$msgsmiles=str_replace(":)","<img src="smilies/smile.gif">",$msgsmiles);
$msgsmiles=str_replace(":com:","<img src="smilies/playcom.gif">",$msgsmiles);
$msgsmiles=str_replace(":kiss:","<img src="smilies/kiss.gif">",$msgsmiles);
$msgsmiles=str_replace(":fight:","<img src="smilies/fight.gif">",$msgsmiles);
$msgsmiles=str_replace(":(","<img src="smilies/sad.gif">",$msgsmiles);
$msgsmiles=str_replace(":o","<img src="smilies/shocked.gif">",$msgsmiles);
$msgsmiles=str_replace(":D","<img src="smilies/biggrin.gif">",$msgsmiles);
$msgsmiles=str_replace(";)","<img src="smilies/wink.gif">",$msgsmiles);
$msgsmiles=str_replace(":p","<img src="smilies/tongue.gif">",$msgsmiles);
$msgsmiles=str_replace(":artist:","<img
src="smilies/artist.gif">",$msgsmiles);
$msgsmiles=str_replace(":bowling:","<img
src="smilies/bowl.gif">",$msgsmiles);
$msgsmiles=str_replace(":mad:","<img src="smilies/mad.gif">",$msgsmiles);
$msgsmiles=str_replace(":dizzy:","<img src="smilies/dizzy.gif">",$msgsmiles);
$msgsmiles=str_replace(":nono:","<img src="smilies/nono.gif">",$msgsmiles);
$msgsmiles=str_replace(":eyepatch:","<img
src="smilies/pirate.gif">",$msgsmiles);
$msgsmiles=str_replace(":sick:","<img src="smilies/sick.gif">",$msgsmiles);
$msgsmiles=str_replace(":cry:","<img src="smilies/cry.gif">",$msgsmiles);
$msgsmiles=str_replace(":uhh:","<img src="smilies/uhh.gif">",$msgsmiles);
$msgsmiles=str_replace(":wacko:","<img src="smilies/wacko.gif">",$msgsmiles);
$msgsmiles=str_replace(":yinyang:","<img
src="smilies/yin-yang.gif">",$msgsmiles);
$msgsmiles=str_replace(":frog:","<img src="smilies/frog.gif">",$msgsmiles);
$smsmsg=$msgsmiles;
}
if ($sendsms) {
$smsdate=date("d Y F H:i");
if (($smspesan) and ($smsnama)) {
$smsnama=strip_tags($smsnama);
$smspesan=strip_tags($smspesan);
$getSMS=mysql_query("select * from ". $prefix ."sms where host='minahasa' and
sms_msg='$smspesan'");
$SMSold=mysql_fetch_array($getSMS);
if (!$SMSold[sms_msg]) {
mysql_query("insert into ". $prefix ."sms
(sms_from,sms_date,sms_msg,host) values
('$smsnama','$smsdate','$smspesan','minahasa')
Created By Muhammad Syahrizal 110
");
}
}
}
$getSMS=mysql_query("select * from ". $prefix ."sms where host='minahasa' order
by id desc limit 0,50");
while ($sms=mysql_fetch_array($getSMS)) {
unset($smsfrom);
unset($smsmsg);
unset($smspesanexp);
$smsnamaexp=explode(" ",$sms[sms_from]);
$smspesanexp=explode(" ",$sms[sms_msg]);
for ($in=0;$in<=count($smsnamaexp);$in++) {
if (strlen($smsnamaexp[$in]) > 15) {
$smsnamaexp[$in]=substr($smsnamaexp[$in],0,15). "
" .substr($smsnamaexp[$in],16,strlen($smsnamaexp[$in]));
}
$smsfrom .=" " .$smsnamaexp[$in];
}
for ($ip=0;$ip<=count($smspesanexp);$ip++) {
if (strlen($smspesanexp[$ip]) > 15) {
$smspesanexp[$ip]=substr($smspesanexp[$ip],0,15). "
" .substr($smspesanexp[$ip],16,strlen($smspesanexp[$ip]));
}
$smsmsg.=" " .$smspesanexp[$ip];
}
$smsmsg=str_replace("..","., ",$smsmsg);
smiles($smsmsg);
echo "
<table border=0 cellpadding=0 width=100% cellspacing=0 align=center><tr><td>
<b><font color=#996633>$smsfrom</font></b><br>
$smsmsg
</td></tr>
</table><br>
";
}
?>
</body>
</html>
PHP User Online
Created By Muhammad Syahrizal 111
Ya… kali ini kita akan bermain dengan session… kita akan membuat satu program untuk
mendeteksi berapa user yang online, baik itu yang sudah terdaftar jadi member maupun
yang bukan member.
Ok kalau sudah mari kita mula..
Langkah pertama adalah menyiapkan databasenya
CREATE TABLE dy_sessions (
session_id varchar(70) NOT NULL default '',
session_username varchar(40) default NULL,
session_usermode varchar(5) default NULL,
session_time varchar(40) default NULL,
session_visit varchar(40) default NULL,
session_address varchar(125) default NULL,
session_page varchar(255) default NULL,
PRIMARY KEY (session_id)
) TYPE=MyISAM;
sekarang kita buat script PHPnya
<?php
/*
MySQL Host, User and Password Access
Ganti nilainya sesuai dengan konfigurasi di server database
kamu
*/
$sqlhost="localhost"; //MySQL host
$sqluser="user"; //MySQL user
$sqlpasswd="password"; //MySQL password
/* MySQL Database and Table Prefix
Database ganti dengan nama database kamu
*/
$sqldb="stieven"; //database
$prefix="dy_"; //table prefix
// Sekarang lakukan Koneksi ke database MySQL
$conn=mysql_connect("$sqlhost","$sqluser","$sqlpasswd") or
die("<p
align=center>CAN NOT CONNECT TO MYSQL SERVER");
mysql_select_db($sqldb) or die("Warning database not
exists!");
//Global Variable
/* register global untuk variable terutama jika
register_global=off */
extract($_SERVER,"EXTR_PREFIX_SAME");
extract($HTTP_ENV_VARS,"EXTR_PREFIX_SAME");
extract($HTTP_GET_VARS,"EXTR_PREFIX_SAME");
extract($HTTP_POST_VARS,"EXTR_PREFIX_SAME");
//timezone format
$gmt=date("Z");
//Session Time
$session_time=date("U");
//session ID
$session_id=session_id();
//cek apakah sudah login atau belum
if (!$HTTP_SESSION_VARS["userakses"]) {
$session_user="Guest";
$session_mode="-1";
Created By Muhammad Syahrizal 112
//Hapus session yang sudak ekspire
mysql_query("delete from ". $prefix ."sessions where
session_time<'$cekSess'");
echo "Online $session_crt[0] : Member $session_crtss[0] -
Non Member
$session_crts[0]";
?>
Tips Membuat Polling lewat PHP
tanpa MySQL
Buat juga satu file dengan nama hasil_polling.dat dan biarkan kosong, file ini untuk menyimpan hasil
dari polling. Kemudian buat satu script php dalam file yang namanya polling.php
Berikut adalah script dalam polling.php
<?
/* ini berfungsi untuk register global variable PHP
terutama mereka yang menggunakan register_global = off
bila register_global = on tidak perlu menggunkan script ini
untuk mengatur register_global periksa pada php.ini
/*
extract($_SERVER,"EXTR_PREFIX_SAME");
extract($HTTP_ENV_VARS,"EXTR_PREFIX_SAME");
extract($HTTP_GET_VARS,"EXTR_PREFIX_SAME");
extract($HTTP_POST_VARS,"EXTR_PREFIX_SAME");
?>
<HTML>
<HEAD>
<TITLE>Polling</TITLE>
</HEAD>
<BODY>
<?
//variable file
$data_pilihan="pilihan.dat";
$hasil_polling="hasil_polling.dat";
if (!file_exists($hasil_polling)) {
$fopen=fopen($hasil_polling,"w+");
fclose($hasil_polling);
}
/* gambar/image untuk hasil polling
kamu bisa mengganti sesuka kamu dengan syarat ukuran file harus lebar 100x10
pixel
*/
$gambar="persen.gif";
$judul="Peraih scudetto 2000/2001 ?";
//proses polling
$file_data=file("pilihan.dat");
//tampilan form polling jika tombol poling belum di pilih
if ($go !=1)
{
echo "<center><i>$judul</i></center><br>n";
echo "<form method=post>";
for ($i=0; $i<=count($file_data)-1; $i++)
Created By Muhammad Syahrizal 114
{
echo "<input type=radio name="vote" value="$i">
$file_data[$i]<br>n";
}
echo "<input type=hidden name=go value=1>";
echo "<p><center><input type=submit value=Polling>";
echo "</form>";
echo "<a href='polling.php?result=1&go=1'>Hasil Polling</a></center>";
}
else
{
//membaca hasil poling sebelumnya
$file_hasil=fopen($hasil_polling, "r");
$baris=fgets($file_hasil, 255);
$pisah=explode("|", $baris);
fclose($file_hasil);
if ($result!=1)
{
//menambah dan memasukan nilai polling
$ficdest=fopen($hasil_polling, "w");
for ($i=0; $i<=count($file_data)-1; $i++)
{
if ($i == $vote)
{
$pisah[$i]+=1;
}
fputs($ficdest, "$pisah[$i]|");
}
fclose($ficdest);
$result=1;
}
if ($result==1)
{
//menampilkan hasil polling
echo "<table cellpadding=10>";
echo "<tr><td align=center><font face=Verdana size=2>";
echo "<i>Pilihan</i></font>";
echo "</td><td align=center><font face=Verdana size=2>";
echo "<i>%</i></font></td>";
echo "<td align=center><font face=Verdana size=2>";
echo "<i>Jumlah Pemilih</i></font></td></tr>";
for ($i=0; $i<=count($file_data)-1; $i++)
{
$jumlah_pemilih+=$pisah[$i];
}
for ($i=0; $i<=count($file_data)-1; $i++)
{
$persen[$i]=$pisah[$i]/$jumlah_pemilih*100;
echo "<tr><td><li><font face=Verdana size=2>";
echo "$file_data[$i]</font></td><td align=left><font face=Verdana
size=2>";
echo "<img src="$gambar" height=10 width=$persen[$i]
align=middle> ";
printf("%.1f", "$persen[$i]");
echo "%</font></td><td align=center><font face=Verdana size=2>";
echo "$pisah[$i]</font>";
Created By Muhammad Syahrizal 115
echo "</td></tr>";
}
echo "</table><p>";
echo "<center>Total: $jumlah_pemilih pemilih</center>";
}
}
?>
</BODY>
</HTML>
Tips Menyembunyikan Halaman dengan PHP
Contoh Kasus :
Misal saja Anda membuat web pribadi anda sendiri dengan ingin membuat link ke
halaman :
• Halaman utama : index.php
• Halaman tentang diri Anda : about.php
• Halaman buku tamu : guestbook.php
• Halaman dokumentasi : documentation.php
• Dst
Pada menu index.php, anda bisa memotong bagian website Anda yang kemudian Anda
jadikan sebagai default template, tetapi hal ini akan di bahas pada pembahasan
selanjutnya, untuk saat ini saya akan memberikan penjelasan singkat dengan bentuk
template sederhana.
Source code :
<html>
<body>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="25%” align=”center”><a href="?menu=home>Home</a></td>
<td width="25%” align=”center”><a href="?menu=about>About</a></td>
<td width="25%” align=”center”><a href="?menu=guestbook">Guest Book</a></td>
<td width="25%” align=”center”><a
href="?menu=document”>Documentation</a></td>
</tr>
<tr>
<td colspan="4">
// nah disini anda menyelipkan kodingan anda
</td>
</tr>
</table>
</body>
</html>
Maka selipkanlah code berikut ini pada website Anda
<?
Created By Muhammad Syahrizal 116
require “config.inc.php”; // ini merupakan pemanggilan untuk
koneksi
ke server dan database
if (($_GET[menu]==’’) || ($_GET[menu]==’home’)){
include “default.php”;
}
else if ($_GET[menu]==’about’){
include “about.php”;
else if ($_GET[menu]==’guestbook’){
include “guestbook.php”;
else if ($_GET[menu]==’document’){
include “documentation.php”;
else {
include “default.php”;
}
?>
Pembahasan :
1. Pada coding awal dalam menu penyembunyian halaman yaitu :
<? require “config.inc.php”; ?>
ini merupakan pemanggilan untuk koneksi ke server dan database yang di simpan pada
halaman config.inc.php dengan detail sebagai berikut :
<?
$dbhostname = <YOUR SERVER HERE>;
$dbusername = <YOUR USER NAME HERE>;
$dbpassword = <YOUR PASSWORD HERE>;
$dbdatabase = <YOUR DATA BASE NAME HERE>;
// perlu diingat bahwa jika anda membuatnya di local maka settingnya menjadi :
// $dbhostname =”localhost”;
// $dbusername = “root”;
mysql_connect($dbhostname,$dbusername,$dbpassword) or die
("Error
Connection");
mysql_select_db($dbdatabase) or die ("Cannot Find
Database");
?>
2. Pada coding
if (($_GET[menu]==’’) || ($_GET[menu]==’home’)){{include
“default.php”;}
ketika kita memanggil web pertama kali berarti menu kosong maka di set menjadi
$_GET[menu]==’’ -> menu pada file default.php
dan ketika pada link <a href="?menu=home>Home</a> maka ini merupakan
perintah pemanggilan untuk menu home yang memanggil file yaitu default.php. Perlu
diingat Anda perlu menyiapkan file-file yang diperlukan. Seperti default.php, about.php,
guestbook.php, documentation.php.
3. Pada coding yang lain juga sama dengan kondisi yang kedua dan anda bisa melihat
website anda nantinya akan lebih sulit untuk ditebak dimanakah Anda menyimpan
halaman sebenarnya.
Created By Muhammad Syahrizal 117
Contoh :
http://www.domainanda.com/?menu=home -> untuk memanggil halaman utama
http://www.domainanda.com/?menu=about -> untuk memanggil halaman tentang
http://www.domainanda.com/?menu=guestbook -> untuk memanggil halaman buku tamu
http://www.domainanda.com/?menu=document -> untuk memanggil halaman
dokumentasi
Nah dari hasil yang bisa Anda lihat di atas Anda telah bisa membuat halaman yang
sebenarnya menghilang dari pandangan pengunjung website Anda ketika mereka
berselancar di website Anda.
PHP Form Regiister & Login untuk Member
Kali ini saya memberikan tips dan trik bagaimana cara membuat form untuk meregister
sekaligus login untuk member terdaftar, dan sudah tentu kita akan menggunakan database
MySQL untuk menyimpan data para member terdaftar.
Perlu diingat source PHP yang saya tulis ini berjalan pada PHP 4.2.3 atau lebih
disarankan untuk menggunakan PHP
versi 4.3 atau lebih.
Mari kita mulai!
Pertama-tama siapkan terlebih dulu databasenya. Silahkan jalankan mysql Client kamu.
Masih bingung atau lupa menjalankan mysql client ? Ok saya coba ingat-ingatkan
kembali…
Mysql client yang digunakan disini adalah yang berbasis teks dan di eskusi pada shell.
Dengan kata lain mysql client dijalankan dengan perintah sebagai berikut :
Mysql
Perintah ini dlakukan jika server MySQL berada pada localhost dan tidak ada password
untuk user yang sedang aktif pada saat itu.
Untuk perintah yang lebih kompleks dapat menggunakan perintah sebagai berikut
mysql –h hosttarget –u username –ppasswordaccess
hosttarget adalah lokasi server MySQL berada, username adalah user untuk mengakses
kedalam database dan passwordaccess adalah password username untuk mengakses
kedalam database. Setelah itu shell akan berganti seperti :
mysql>
Nah selanjutnya silahkan pilih database yang akan digunakan. Jika belum memiliki
database atau ingin menggunakan database lain dari yang sudah ada berarti harus
membuat database baru.
Cara membuat database :
mysql> create database namadatabase;
Query OK, 1 row affected <0.00 sec>
sedangkan untuk menggunakan database yang sudah ada
Created By Muhammad Syahrizal 118
mysql> use namadatabase;
database changed
Sebagai catatan, dalam pembuatan database jangan menggunakan tanda “-“ atau spasi
untuk nama database yang terdiri lebih dari dua kata sebaiknya gunakan tanda “_”
Contoh nama database yang salah : ilmu-komputer ilmu computer ilmu^computer
Contoh nama database yang benar : ilmu_komputer ilmukomputer
Setalah database sudah disiapkan kita akan membuat tablenya. Berikut cara membuat
tablenya, ingat ini masih pada shell MySQL.
CREATE TABLE phpschool_user (
id bigint(20) unsigned NOT NULL auto_increment,
user_name varchar(255) NOT NULL default '',
user_pass varchar(80) default NULL,
user_mode varchar(5) default NULL,
admin enum('yes','no') default 'no',
user_email varchar(60) default NULL,
user_fullname varchar(80) default NULL,
user_address varchar(120) default NULL,
user_telepon varchar(30) default NULL,
tempat_lahir varchar(60) default NULL,
tgl_lahir varchar(12) default NULL,
date_register varchar(70) default NULL,
user_ipaddress varchar(20) default NULL,
user_hostname varchar(120) default NULL,
note tinytext,
last_login varchar(60) default NULL,
PRIMARY KEY (user_name),
KEY id (id)
) TYPE=MyISAM;
Query OK, 0 row affected <0.00 sec>
Selesai sudah persiapan database sekarang kita pindah ke bagian PHP sourcenya. Disini
kita akan membuat beberapa file untuk proses pendaftaran dan login yang sudah
terdaftar.
1. daftar.php, adalah file yang berisi form untuk pendaftaran bagi yang belum terdaftar
2. login.php, adalah file yang berisi form untuk proses login bagi yang sudah terdaftar
sekarang kita mulai dengan daftar.php
lumayan panjang sih… disini saya juga memberikan beberapa tips untuk javascript
bagaimana untuk validasi penulisan email yang benar.
<?php
session_start();
//your mysql access for host user password, database and
table prefix
$prefix="phpschool_";
$sqlhost="localhost";
$sqluser="ipen";
$sqlpasswd="n0limited";
$sqldb="stieven";
Created By Muhammad Syahrizal 119
$conn=mysql_connect("$sqlhost","$sqluser","$sqlpasswd") or
die("<p align=center>CAN NOT
CONNECT TO MYSQL SERVER");
mysql_query("use $sqldb");
//Global variable register PHP 4.23 or more only
extract($_SERVER,"EXTR_PREFIX_SAME");
extract($HTTP_ENV_VARS,"EXTR_PREFIX_SAME");
extract($HTTP_GET_VARS,"EXTR_PREFIX_SAME");
extract($HTTP_POST_VARS,"EXTR_PREFIX_SAME");
$file_name=$HTTP_POST_FILES["file"]["name"];
$file_size=$HTTP_POST_FILES["file"]["size"];
$file_tmp=$HTTP_POST_FILES["file"]["tmp_name"];
$file_type=$HTTP_POST_FILES["file"]["type"];
if ($logout) {
unset($HTTP_SESSION_VARS["userakses"]);
unset($HTTP_SESSION_VARS["userfullname"]);
unset($HTTP_SESSION_VARS["usermode"]);
unset($HTTP_SESSION_VARS["useremail"]);
unset($HTTP_SESSION_VARS["useradmin"]);
unset($HTTP_SESSION_VARS["userlastlogin"]);
}
$thisVersion=phpversion();
$php_version=explode(".",$thisVersion);
$phpversion=$php_version[0] . $php_version[1];
$gmt=date("Z");
$namaBulan=array("null","Januari","Februari","Maret","April"
,"Mei","Juni","Juli","Agustu
s","September","Oktober","November","Desember");
if (!$HTTP_SESSION_VARS["userakses"]) {
if ($submitdaftar) {
$user_name=strtolower(strip_tags(trim($user_name)));
$user_pass=strip_tags(trim($user_pass));
$user_fullname=strip_tags(trim($user_fullname));
$user_address=strip_tags(trim($user_address));
$user_telepon=strip_tags(trim($user_telepon));
$tempat_lahir=strip_tags(trim($tempat_lahir));
$nama_status=strip_tags(trim($nama_status));
$alamat_status=strip_tags(trim($alamat_status));
$hostname=gethostbyaddr($REMOTE_ADDR);
$note=strip_tags(trim($note));
//ceking
$getUser=mysql_query("insert into ". $prefix ."user
(user_name, user_pass, user_mode, user_email, user_fullname,
user_address,
user_telepon, tempat_lahir,
tgl_lahir, date_register, user_ipaddress, user_hostname,
note, last_login)
values
('$user_name','$user_pass','$mode','$user_email','$user_full
name','$user_address','$user
_telepon','$tempat_lahir',
'$thn_lahir-$bln_lahir-$tgl_lahir','". date("U") ."','".
$REMOTE_ADDR ."',
Created By Muhammad Syahrizal 120
'$hostname','$note', '". date("U") ."'
)
");
if ($getUser) {
$regOK="ok";
$msgError="<br><p align=center>$user_fullname Selamat
Bergabung dengan
Kami<p>";
}
else {
$fname=str_replace(".","",$user_fullname);
$fname=str_replace(",","",$fname);
$fname=explode(" ",$fname);
$username[0]=strtolower($user_name . rand(1000,2000));
$username[1]=strtolower($fname[0]. "_" .$fname[1]);
$username[2]=strtolower($fname[count($fname)-1]. "_"
.$fname[0]);
$msgError="
<br><p align=center><b>$user_name</b> tidak dapat di
daftar<br>Kemungkinan terbesar sudah pernah didaftar Coba
Pilih yang lain misalkan<br>
<ul>
<li>$username[0]
<li>$username[1]
<li>$username[2]
</ul>
<p>";
unset($user_name);
}
}
?>
<script>
function cekuser() {
if ((document.daftar.user_name.value.length < 4) ||
(document.daftar.user_name.value.length > 255)) {
alert('Panjang Karakter untuk username harus minimal 4');
document.daftar.user_name.focus();
return false;
}
else {
if (document.daftar.user_name.value.indexOf(" ") >= 0) {
alert('Jangan ada spasi pada isian username dan password');
document.daftar.user_name.focus();
return false;
}
else { return emailbenar(document.daftar.user_email.value);
}
}
}
function ceknotchar(ftr) {
var charnot=new Array
('*','%','@','`','"',"'",'$','#','~','(',')','!','^','&','.'
,',','*',';',':','<','>','['
Created By Muhammad Syahrizal 121
,']','{','}','|','','+','=','?','/');
for (i=0;i<=charnot.length;i++) {
charsek1=ftr.indexOf(charnot[i]);
if (charsek1 >= 0) { alert('Tidak di ijinkan menggunakan
karakter "' +
charnot[i] + '"');document.daftar.user_name.focus();return
false; }
}
return cekFmValid();
}
function cekFmValid() {
if (
(document.daftar.user_fullname.value.length < 1) ||
(document.daftar.user_address.value.length < 1) ||
(document.daftar.nama_status.value.length < 1) ||
(document.daftar.alamat_status.value.length < 1) ||
(document.daftar.tempat_lahir.value.length < 1) ||
(document.daftar.status.value
== "")
) {
alert('Ada form yang belum diisi, kamu harus mengisi semua
form');
return false;
}
else {
if (document.daftar.mode.value == "none") {
alert('Mode Daftar belum di pilih');
document.daftar.mode.focus();
return false;
}
}
}
function emailbenar(str) {
var cek1=str.indexOf("@");
if (cek1 <= 0) {
alert('Alamat Email harus disi dengan benar. Kesalahan pada
tanda "@"');
document.daftar.user_email.focus();
return false;
}
else {
var cek2=str.lastIndexOf(".");
//alert(cek2 + '-' + cek1);
if (cek2 <= cek1+1) {
alert('Alamat Email harus disi dengan benar. Kesalahan pada
tanda
"."');
document.daftar.user_email.focus();
return false;
}
else {
cek3=document.daftar.user_email.value.length;
if (cek2 == cek3-1) {
Created By Muhammad Syahrizal 122
alert('Anda masih salah dalam penulisan email setalah tanda
"."
masih belum lengkap!');
document.daftar.user_email.focus();
return false;
}
else {
if (str.indexOf(" ") >= 0) {
alert('Tidak boleh ada spasi dalam penulisan
email');
return false;
}
}
//alert('True');
return ceknotchar(document.daftar.user_name.value);
}
return false;
}
return false;
}
function setMode() {
if (document.daftar.mode.value >=1) {
document.daftar.tahun_masuk.disabled=false;
}
else {
document.daftar.tahun_masuk.disabled=true;
document.daftar.tahun_lulus.disabled=true;
}
}
function setTahunlulus(defTahun) {
if (document.daftar.tahun_masuk.value < defTahun) {
document.daftar.tahun_lulus.disabled=false;
}
else {
document.daftar.tahun_lulus.disabled=true;
}
if ((document.daftar.mode.value == "none") ||
(document.daftar.mode.value == ""))
{
document.daftar.tahun_lulus.disabled=true;
}
}
</script>
<table width="98%" border="0" align="center" cellpadding="4"
cellspacing="2">
<tr>
<td align="left" valign="top" style="border:1px solid
#363635;text-align:justify">
<?php
echo $msgError;
if ($regOK != "ok") {
?>
Created By Muhammad Syahrizal 123
<form name="daftar" method="post" action="" onSubmit="return
cekuser();">
<table width="100%" border="0" cellspacing="1"
cellpadding="3">
<tr align="left" valign="top">
<td width="25%">Username</td>
<td width="75%"><input name="user_name" value="<?php echo
$user_name; ?>"
type="text" id="user_name" style="width:180" maxlength="12">
<br> <font color="#666666">Minimal 4 karakter, gunakan
kombinasi
huruf dan angka dan tanda "_"
(underline)</font></td>
</tr>
<tr align="left" valign="top">
<td>Password</td>
<td><input name="user_pass" type="password" id="user_pass"
style="width:180">
<br> <font color="#666666">Minumal 8 karakter, case sensitif
(Huruf
besar/Kapital) memiliki perbedaan dengan huruf
kecil</font></td>
</tr>
<tr align="left" valign="top">
<td>Email</td>
<td><input name="user_email" type="text" id="user_email"
value="<?php echo
$user_email; ?>" style="width:180">
<br> <font color="#666666">Penulisan bentuk email harus
tepat Contoh
: ipen22@yahoo.com dan email harus yang masih
aktif</font></td>
</tr>
<tr align="left" valign="top">
<td> </td>
<td> </td>
</tr>
<tr align="left" valign="top">
<td>Nama Lengkap</td>
<td><input name="user_fullname" value="<?php echo
$user_fullname; ?>"
type="text" id="user_fullname" style="width:180"></td>
</tr>
<tr align="left" valign="top">
<td>Alamat</td>
<td><input name="user_address" type="text" value="<?php echo
$user_address; ?>" id="user_name6" style="width:180"></td>
</tr>
<tr align="left" valign="top">
<td>Telepon</td>
<td><input name="user_telepon" type="text" value="<?php echo
$user_telepon; ?>"
id="user_name7" style="width:180"></td>
Created By Muhammad Syahrizal 124
<td><input name="submitdaftar" type="submit"
id="submitdaftar" value="D A F T
A R"></td>
</tr>
</table>
</form>
<script>
setTahunlulus(<?php echo date("Y"); ?>);
setMode();
</script>
<?php
}
?>
</td>
</tr>
</table>
<?php
}
else {
echo "<p align=center>Kamu sudah terdaftar dengan akses ".
$HTTP_SESSION_VARS["userakses"] ."! <p align=center> <a
href="?logout=1">Logout</a>";
}
?>
Sekarang kita beralih ke login.php
<?php
session_start();
//your mysql access for host user password, database and
table prefix
$prefix="phpschool_";
$sqlhost="localhost";
$sqluser="ipen";
$sqlpasswd="n0limited";
$sqldb="stieven";
$conn=mysql_connect("$sqlhost","$sqluser","$sqlpasswd") or
die("<p align=center>CAN NOT
CONNECT TO MYSQL SERVER");
mysql_query("use $sqldb");
//Global variable register PHP 4.23 or more only
extract($_SERVER,"EXTR_PREFIX_SAME");
extract($HTTP_ENV_VARS,"EXTR_PREFIX_SAME");
extract($HTTP_GET_VARS,"EXTR_PREFIX_SAME");
extract($HTTP_POST_VARS,"EXTR_PREFIX_SAME");
$file_name=$HTTP_POST_FILES["file"]["name"];
$file_size=$HTTP_POST_FILES["file"]["size"];
$file_tmp=$HTTP_POST_FILES["file"]["tmp_name"];
$file_type=$HTTP_POST_FILES["file"]["type"];
$thisVersion=phpversion();
$php_version=explode(".",$thisVersion);
$phpversion=$php_version[0] . $php_version[1];
$gmt=date("Z");
$namaBulan=array("null","Januari","Februari","Maret","April"
,"Mei","Juni","Juli","Agustu
Created By Muhammad Syahrizal 126
s","September","Oktober","November","Desember");
if ($logout) {
unset($HTTP_SESSION_VARS["userakses"]);
unset($HTTP_SESSION_VARS["userfullname"]);
unset($HTTP_SESSION_VARS["usermode"]);
unset($HTTP_SESSION_VARS["useremail"]);
unset($HTTP_SESSION_VARS["useradmin"]);
unset($HTTP_SESSION_VARS["userlastlogin"]);
}
if ($login) {
if (!$HTTP_SESSION_VARS["userakses"]) {
$getLogin=mysql_query("select * from ". $prefix ."user where
user_name='$user_name'");
$thisLogin=mysql_fetch_array($getLogin);
if (!$thisLogin[user_name]) {
$errorLogin="<script>alert('$user_name
tidak terdaftar')</script>"; }
else {
if ($user_pass == $thisLogin[user_pass]) {
$HTTP_SESSION_VARS["userakses"]=$thisLogin[user_name];
$HTTP_SESSION_VARS["userfullname"]=$thisLogin[user_fullname]
;
$HTTP_SESSION_VARS["usermode"]=$thisLogin[user_mode];
$HTTP_SESSION_VARS["useremail"]=$thisLogin[user_email];
$HTTP_SESSION_VARS["useradmin"]=$thisLogin[admin];
$HTTP_SESSION_VARS["userlastlogin"]=$thisLogin[last_login];
$HTTP_SESSION_VARS["userhostname"]=$thisLogin[user_hostname]
;
$HTTP_SESSION_VARS["useripaddress"]=$thisLogin[user_ipaddres
s];
$hostname=gethostbyaddr($REMOTE_ADDR);
mysql_query("update ". $prefix ."user set
user_hostname='$hostname', user_ipaddress='". $REMOTE_ADDR
."', last_login='".
date("U") ."' where user_name='$user_name'");
}
else { $errorLogin="<script>alert('$user_name password tidak
tepat')</script>"; }
}
}
}
?>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1">
</head>
<body>
<?php
echo $errorLogin;
if (!$HTTP_SESSION_VARS["userakses"]) {
?>
Created By Muhammad Syahrizal 127
<form name="form1" method="post" action="">
<p align="center">Username<br>
<input name="user_name" type="text" id="user_name"
style="width:180">
<br>
Password <br>
<input name="user_pass" type="password" id="user_pass"
style="width:180">
</p>
<p align="center">
<input type="submit" name="login" value="Submit"
style="border-bottom:2px solid
#363635;border-right:2px solid #363635;border-top:2px solid
#82817F;border-left:2px solid
#82817F;">
</p>
</form>
<center><a href="daftar.php">Daftar
Disini</a></center>
<?php
}
else {
echo "Kamu sudah login dengan akses ".
$HTTP_SESSION_VARS["userakses"] ." <p> <a
href="?logout=1">Logout</a>";
}
?>
</body>
</html>
untuk download source lengkapnya silahkan download di
www.php.wox.org/ipen_v2/tutor/php/daftar_login.zip
jika ada kesulitan bisa hubungi di http://www.php.wox.org
PDF? Pakai PHP saja!
Benarkah Perlu PDF?
Kecuali jika Anda hanya ingin bekerja dengan dokumen-dokumen non presisi dan tidak
menginginkan kemudahan bertukar dokumen, maka Anda kemungkinan besar
membutuhkan format dokumen PDF.
Jika Anda ingin:
• membuat invoice, order pembelian, surat pengangkutan, tanda terima, dan dokumen
komersial untuk situs e-commerce atau aplikasi berbasis web
• membuat laporan dari aplikasi berbasis web dengan format yang presisi yang tidak
memperkenankan variasi hasil cetakan
• membuat cetakan form isian dari web dengan hasil yang seragam
• membuat dokumen lain yang membutuhkan pengendalian baik terhadap distribusi
dokumen maupun presisi dan kualitas cetakan, serta dapat dipertukarkan secara mudah,
Pilih Yang Mana...
Created By Muhammad Syahrizal 128
Cukup banyak ekstensi PHP tersedia yang memungkinkan Anda membuat dokumen PDF
melalui PHP. Beberapa yang dapat Anda pilih:
• PDFLib. Aladdin Free Public License memperkenankan penggunaan PDFLib untuk
penggunaan non komersial. Untuk lisensi komersial, termasuk penggunaan dalam
layanan web komersial, dikenakan harga lisensi yang dapat dilihat pada
http://pdflib.com.
• FreePDFlib oleh Thomas Szadel (open source).
• ClibPDF menggunakan model lisensi yang sama dengan PDFLib.
Dalam tulisan ini, kita akan menggunakan fungsi-fungsi yang ada pada PDFLib. Sebelum
memulai semuanya, sebaiknya Anda pastikan dulu ekstensi PDFLib telah terpasang pada
sistem PHP Anda. Jangan lupa juga, Anda juga harus memastikan browser Anda telah
terinstalasi plug-in untuk membaca dokumen PDF.
Untuk lebih memudahkan Anda, maka telah tersedia source code dan hasilnya (dalam
dokumen PDF) dalam bentuk file .zip. Anda tinggal download saja file artpdf.zip ini.
Jika Anda telah siap, mari kita lanjutkan dengan membuat dokumen PDF paling
sederhana.
PDF Pertamaku, Tak Terlupakan...
Sesungguhnya saya tidak menyukai memulai sesuatu dengan rutinitas. Ketika Anda
belajar bahasa pemrograman apa pun, selalu kita dipaksa untuk mengucapkan, "Hello,
World!" dalam bahasa pemrograman baru. Saya juga akan mengajak Anda untuk
melakukannya lagi saat ini, namun untuk sedikit mengurangi kejenuhan, mari kita ubah
program ini menjadi program "PDF Pertamaku".
Coba Anda buat skrip seperti di bawah ini, dan coba jalankan di PHP melalui browser
favorit Anda.
<?php
$halaman = pdf_new();
pdf_open_file($halaman);
pdf_set_info($halaman,"Creator","pdf-ku.php");
pdf_set_info($halaman,"Author","Mr. Dodol");
pdf_set_info($halaman,"Title","PDF Pertamaku");
pdf_begin_page($halaman,595,842);
$huruf = pdf_findfont($halaman,"Helvetica-Bold","host",0);
pdf_setfont($halaman,$huruf,38.0);
pdf_show_xy($halaman,"Inilah PDF Pertamaku!",50,700);
pdf_end_page($halaman);
pdf_close($halaman);
$buf = pdf_get_buffer($halaman);
$panjangbuffer = strlen($buf);
Header("Content-type: application/pdf");
Header("Content-Length: $panjangbuffer");
Header("Content-Disposition: inline; filename=pdf-ku.pdf");
echo $buf;
pdf_delete($halaman);
?>
Tentukan Letak Bintang di Langit
Membuat dokumen PDF, sebenarnya mirip dengan proses menggambar pada kanvas.
Agar Anda mampu menempatkan gambar maupun tulisan di tempat yang sesuai dengan
keinginan Anda, maka Anda perlu mengetahui cara penentuan letak pada dokumen PDF.
Pada dokumen PHP berlaku sistem koordinat dua dimensi (x,y), dimana titik asal atau
koordinat (0,0) ada di pojok kiri bawah dokumen. Arah koordinat x adalah arah horisontal
Created By Muhammad Syahrizal 129
(dari kiri ke kanan) dan arah koordinat y adalah arah vertikal (dari bawah ke atas). Sistem
ukuran dasar/skala yang digunakan adalah point atau disingkat pt, dengan konversinya:
1 pt = 1/72 inch = 0.35277777778 mm, atau dengan kata lain
1 inch = 72 pt.
Pembuatan dokumen PHP, dikerjakan per halaman. Pada saat awal membuat halaman,
Anda harus menentukan terlebih dahulu lebar dan panjang kertas yang akan digunakan
dalam satuan pt. Tabel berikut ini akan memberikan informasi ukuran jenis kertas dalam
satuan pt.
Mari Anda coba skrip di bawah ini untuk belajar bermain dalam koordinat halaman
berukuran A4.
<?php
$halaman = pdf_new();
pdf_open_file($halaman);
pdf_set_info($halaman,"Creator","koord.php");
pdf_set_info($halaman,"Author","Mr. Dodol");
pdf_set_info($halaman,"Title","Test Koordinat PDF");
pdf_begin_page($halaman,595,842); //ukuran kertas A4
//membuat tulisan pada halaman
$huruf = pdf_findfont($halaman,"Helvetica-Bold","host",0);
pdf_setfont($halaman,$huruf,38.0);
pdf_show_xy($halaman, "Kiri Bawah", 10, 10);
pdf_show_xy($halaman, "Kanan Bawah", 335, 10);
pdf_show_xy($halaman, "Kiri Atas", 10, 802);
pdf_show_xy($halaman, "Kanan Atas", 375, 802);
pdf_show_xy($halaman, "Tengah",595/2-60,842/2-20);
// membuat garis di pinggir halaman
pdf_setrgbcolor_stroke($halaman,1,0,0);
pdf_moveto($halaman,10,10);
pdf_lineto($halaman,10,832);
pdf_lineto($halaman,585,832);
pdf_lineto($halaman,585,10);
pdf_lineto($halaman,10,10);
pdf_stroke($halaman);
pdf_setrgbcolor_stroke($halaman,0,0,0);
pdf_end_page($halaman);
pdf_set_parameter($halaman, "openaction", "fitpage");
pdf_close($halaman);
$buf = pdf_get_buffer($halaman);
$panjangbuffer = strlen($buf);
Header("Content-type:application/pdf");
Header("Content-Length:$panjangbuffer");
Header("Content-Disposition:inline; filename=koord.pdf");
echo $buf;
pdf_delete($halaman);
?>
Anda memiliki kemungkinan untuk mengubah titik asal (0,0) dan membalik arah
koordinat, sebagai contoh, Anda dapat membuat pojok kiri atas sebagai titik asal
koordinat dan memiliki nilai positif untuk arah dari atas ke bawah dan dari kiri ke kanan.
Anda dapat mencoba skrip berikut ini.
<?php
$halaman = pdf_new();
pdf_open_file($halaman);
pdf_set_info($halaman,"Creator","koordbalik.php");
pdf_set_info($halaman,"Author","Mr. Dodol");
pdf_set_info($halaman,"Title","Mengubah Titik Asal dan Arah
Koordinat (PHP)");
pdf_begin_page($halaman,595,842);
// Mengubah Titik Asal
Created By Muhammad Syahrizal 130
pdf_translate($halaman,0,842);
// Membalik Arah Sumbu Mendatar
pdf_scale($halaman, 1, -1);
// Mencerminkan skala horisontal
pdf_set_value($halaman,"horizscaling",-100);
$huruf = pdf_findfont($halaman,"Helvetica-Bold","host",0);
pdf_setfont($halaman,$huruf,-38.0);
pdf_show_xy($halaman, "Top Left", 10, 40);
pdf_end_page($halaman);
pdf_set_parameter($halaman, "openaction", "fitpage");
pdf_close($halaman);
$buf = pdf_get_buffer($halaman);
$panjangbuffer = strlen($buf);
Header("Content-type:application/pdf");
Header("Content-Length:$panjangbuffer");
Header("Content-Disposition:inline;
filename=koordbalik.pdf");
echo $buf;
pdf_delete($halaman);
?>
Bicara dengan Tulisan
Dalam contoh-contoh skrip di atas, Anda telah mencoba menulis pada halaman PDF. Kali
ini Anda akan mendapatkan penjelasan mengenai fungsi-fungsi dasar yang digunakan
untuk membuat tulisan pada dokumen PDF. Sebagian dari fungsi-fungsi ini telah pernah
Anda gunakan.
pdf_show_xy()
Fungsi ini digunakan untuk menuliskan text pada posisi tertentu yang diberikan. Contoh:
<? pdf_show_xy($halaman,"Tulisan Saya",50,100); ?>
Contoh di atas akan menuliskan text "Tulisan Saya" mulai pada koordinat (50,100) pada
halaman PDF yang didefinisikan oleh variabel $halaman.
pdf_show()
Fungsi ini digunakan untuk menuliskan text pada posisi tertentu yang telah diset terlebih
dahulu dengan fungsi pdf_set_text_pos(). Contoh:
<? pdf_set_text_pos($halaman, 50,100);
pdf_show($halaman,"Text"); ?>
pdf_continue_text()
Fungsi ini digunakan untuk menuliskan text pada posisi baris berikutnya.
pdf_show_boxed()
Fungsi ini digunakan untuk memformat text dalam suatu box/kotak tertentu. Contoh skrip
berikut ini akan memberi kesempatan bagi Anda untuk mengerti maksud penggunaan
fungsi pdf_show_boxed().
<?php
$halaman = pdf_new();
pdf_open_file($halaman);
pdf_begin_page($halaman,595,842);
$font = pdf_findfont($halaman,"Helvetica-Bold","host",0);
pdf_setfont($halaman,$font,24.0);
$text = <<<TEKS
Contoh beberapa text di dalam kotak text pada dokumen PDF.
TEKS;
pdf_show_boxed($halaman, $text, 50, 630, 300, 200, "left");
pdf_rect($halaman,50,630,300,200); pdf_stroke($halaman);
pdf_show_boxed($halaman, $text, 50, 420, 300, 200, "right");
pdf_rect($halaman,50,420,300,200); pdf_stroke($halaman);
pdf_show_boxed($halaman, $text, 50, 210, 300, 200, "justify");
pdf_rect($halaman,50,210,300,200);
pdf_stroke($halaman);
Created By Muhammad Syahrizal 131
pdf_show_boxed($halaman, $text, 50, 0, 300, 200,
"fulljustify");
pdf_rect($halaman,50,0,300,200);
pdf_stroke($halaman);
pdf_show_boxed($halaman, $text, 375, 250, 200, 300, "center");
pdf_rect($halaman,375,250,200,300);
pdf_stroke($halaman);
pdf_end_page($halaman);
pdf_set_parameter($halaman, "openaction", "fitpage");
pdf_close($halaman);
$buf = pdf_get_buffer($halaman);
$panjangbuffer = strlen($buf);
Header("Content-type:application/pdf");
Header("Content-Length:$panjangbuffer");
Header("Content-Disposition:inline;
filename=kotakteks.pdf");
echo $buf;
pdf_delete($halaman);
?>
Skrip di atas jika dijalankan, akan menghasilkan dokumen PDF seperti gambar berikut
ini.
Kusuka Bentuknya
PDFLib yang Anda gunakan menyediakan 14 pilihan huruf built-in, yaitu:
• Courier
• Courier-Bold
• Courier-Oblique
• Courier-BoldOblique
• Helvetica
• Helvetica-Bold
• Helvetica-Oblique
• Helvetica-BoldOblique
• Times-Roman
• Times-Bold
• Times-Italic
• Times-BoldItalic
• Symbol
• ZapfDingbats.
Berikut beberapa contoh dari jenis huruf standar tersebut di atas.
Anda juga dapat menggunakan jenis huruf AFM, Postscript Type-1, dan TTF. Mari kita
coba lihat cara menggunakan jenis huruf TTF atau True Type Font.
<?php
pdf_set_parameter($halaman,"FontOutline",
"Arial==/usr/fonts/arial.ttf");
$font = pdf_findfont($halaman,"Arial","host",1);
?>
Jenis huruf (font) dapat pula didefinisikan pada file pdflib.upr. Contoh berikut ini
menunjukkan caranya.
<?php
// Ubah nilai variabel ini sesuai dengan path file pdflib.upr
// di sistem PHP Anda.
$file_upr = "/usr/share/fonts/pdflib/pdflib.upr";
Created By Muhammad Syahrizal 132
$halaman = pdf_new();
pdf_open_file($halaman);
pdf_set_info($halaman,"Creator","hurufttf.php");
pdf_set_info($halaman,"Author","Mr. Dodol");
pdf_set_info($halaman,"Title","Test Jenis Huruf (PHP)");
pdf_set_parameter($halaman, "resourcefile", $file_upr);
pdf_begin_page($halaman,595,842);
pdf_set_text_pos($halaman,25,800);
// Buat Array Nama Font dan jenisnya
$fonts = array('Arial'=>1,'Comic Sans MS'=>1,'Impact'=>1);
// Cetak Font ke Dokumen PDF
foreach($fonts as $f=>$embed) {
$font = pdf_findfont($halaman,$f,"host",$embed);
pdf_setfont($halaman,$font,25.0);
pdf_continue_text($halaman,"$f (".chr(128)." Ç à á â ã
ç è é ê)");
}
pdf_end_page($halaman);
pdf_close($halaman);
$buf = pdf_get_buffer($halaman);
$len = strlen($buf);
Header("Content-type:application/pdf");
Header("Content-Length:$len");
Header("Content-Disposition:inline;
filename=hurufttf.pdf");
echo $buf;
pdf_delete($halaman);
?>
File pdflib.upr harus terisi dengan entri sebagai berikut.
FontOutline
Arial=arial.ttf
Comic Sans MS=comic.ttf
Impact=IMPACT.ttf
.
Jika muncul pesan kesalahan, kemungkinan Anda harus mengisikan entri nama file pada
FontOutline lengkap dengan path dari file .ttf. Jika berhasil, Anda akan memperoleh
hasil sebagai berikut.
Enkonding karakter yang tersedia pada PDFLib yaitu
• winansi (superset dari ISO 8859-1)
• macroman (Enkoding standar Macintosh)
• ebcdic (Digunakan pada IBM AS/400 dan S/390)
• biltin (Enkoding asli yang digunakan oleh huruf teks non latin)
• host (macroman di Mac, ebcdic di sistem EBCDIC, dan winasi di windows)
Gambar Bermakna Seribu Kata...
Anda telah mendapatkan dasar yang cukup mengenai cara menulis teks pada halaman
dokumen PDF. Kali ini kita akan mempelajari cara penempatan gambar pada dokumen
PHP. PDFLib mampu menangani beberapa format gambar untuk dijadikan dokumen
PDF, antara lain:
• PNG (tanpa alpha-channel)
• JPEG (Progressive jpegs didukung mulai versi Acrobat 4)
• GIF (non-interlacing diperbolehkan, untuk animasi GIF hanya gambar pertama yang
ditampilkan)
• TIFF
• CCITT compressed image data
• Raw image data
Created By Muhammad Syahrizal 133
Anda dapat menyisipkan gambar pada dokumen PDF dengan perintah pdf_open_jpeg()
untuk membuka file gambar dan diikuti dengan perintah pdf_place_image() untuk
meletakkan gambarnya pada dokumen PDF. Untuk menutup file gambar, digunakan
perintah pdf_close_image(). Kode berikut ini adalah contohnya.
<?php
$halaman = pdf_new();
pdf_open_file($halaman);
pdf_begin_page($halaman,595,842);
// Load file gambar php-big.jpg
$im = pdf_open_jpeg($halaman, "php-big.jpg");
pdf_place_image($halaman, $im, 200, 700, 1.0);
pdf_place_image($halaman, $im, 200, 600, 0.75);
pdf_place_image($halaman, $im, 200, 535, 0.50);
pdf_place_image($halaman, $im, 200, 501, 0.25);
pdf_place_image($halaman, $im, 200, 486, 0.10);
$x = pdf_get_value($halaman, "imagewidth", $im);
$y = pdf_get_value($halaman, "imageheight", $im);
pdf_close_image ($halaman,$im);
$huruf = pdf_findfont($halaman,"Helvetica-Bold","host",0);
pdf_setfont($halaman,$huruf,14.0);
pdf_show_xy($halaman,"$x X $y"." (100%)",25,750);
pdf_show_xy($halaman, $x*0.75 . " X " . $y*0.75 . "
(75%)",25,650);
pdf_show_xy($halaman, $x*0.50 . " X " . $y*0.50 . "
(50%)",25,570);
pdf_show_xy($halaman, $x*0.25 . " X " . $y*0.25 . "
(25%)",25,525);
pdf_show_xy($halaman, $x*0.10 . " X " . $y*0.10 . "
(10%)",25,490);
pdf_end_page($halaman);
pdf_set_parameter($halaman, "openaction", "fitpage");
pdf_close($halaman);
$buf = pdf_get_buffer($halaman);
$panjangbuffer = strlen($buf);
Header("Content-type:application/pdf");
Header("Content-Length:$panjangbuffer");
Header("Content-Disposition:inline;
filename=sisipgambar.pdf");
echo $buf;
pdf_delete($halaman);
?>
Hasil tampilan program di atas kurang lebih seperti gambar berikut.
Kita dapat pula menerapkan skala non linier kepada gambar yang akan kita sisipkan pada
dokumen PDF. Untuk melakukan itu, kita harus mengatur skala koordinat.
<?php
$halaman = pdf_new();
pdf_open_file($halaman);
pdf_begin_page($halaman,595,842);
$im = pdf_open_jpeg($halaman, "php-big.jpg");
pdf_place_image($halaman, $im, 200, 700, 1.0);
pdf_save($halaman); // Simpan Setting Sistem Koordinat yang
ada
$nx = 50/pdf_get_value($halaman,"imagewidth",$im);
$ny = 100/pdf_get_value($halaman,"imageheight",$im);
pdf_scale($halaman, $nx, $ny);
pdf_place_image($halaman, $im, 200/$nx, 600/$ny, 1.0);
pdf_restore($halaman); // Kembalikan ke sebelumnya
pdf_close_image ($halaman,$im);
pdf_end_page($halaman);
pdf_set_parameter($halaman, "openaction", "fitpage");
pdf_close($halaman);
$buf = pdf_get_buffer($halaman);
$panjangbuffer = strlen($buf);
Header("Content-type:application/pdf");
Created By Muhammad Syahrizal 134
Header("Content-Length:$panjangbuffer");
Header("Content-Disposition:inline;
filename=sisipgambar2.pdf");
echo $buf;
pdf_delete($halaman);
?>
Mari Menggambar Bersama
Selain menggunakan gambar yang telah ada untuk disisipkan ke dokumen PDF, Anda
dapat juga langsung menggambar pada dokumen PDF dengan beberapa perintah gambar
sederhana. Pada dasarnya, menggambar di dokumen PDF adalah menentukan atau
mendefinisikan path untuk kemudian ditampilkan pada dokumen PDF. Sebuah path
terdiri dari bentuk-bentuk dasar grafis sepeti garis, kurva, persegi panjang, lingkaran,
elips, dan lain-lain. Sebagai contoh:
<?php
$halaman = pdf_new();
pdf_open_file($halaman);
pdf_begin_page($halaman,595,342);
// Menggambar path garis diikuti kurva
pdf_moveto($halaman,150,250);
pdf_lineto($halaman,450,250);
pdf_lineto($halaman,100,300);
pdf_curveto($halaman,80,50,70,50,250,150);
// Menggambar lingkaran
pdf_circle($halaman,450,100,50);
// Menggambar persegi panjang
pdf_rect($halaman,350,25,200,150);
// Memplot semua path/kurva yang telah dibuat
// pada dokumen PDF
pdf_stroke($halaman);
pdf_end_page($halaman);
pdf_close($halaman);
$buf = pdf_get_buffer($halaman);
$panjangbuffer = strlen($buf);
Header("Content-type:application/pdf");
Header("Content-Length:$panjangbuffer");
Header("Content-Disposition:inline;
filename=menggambar1.pdf");
echo $buf;
pdf_delete($halaman);
?>
Anda dapat menggunakan perintah pdf_closepath() untuk menutup path secara
otomatis dan pdf_fill_stroke() untuk mengisi kurva tertutup tersebut dengan warna
isian.
<?php
$halaman = pdf_new();
pdf_open_file($halaman);
pdf_begin_page($halaman,595,342);
// Set warna isian
pdf_setcolor($halaman,"fill","rgb", 1.0, 0.8, 0.1);
// Menggambar path garis diikuti kurva
pdf_moveto($halaman,150,250);
pdf_lineto($halaman,450,250);
pdf_lineto($halaman,100,300);
pdf_curveto($halaman,80,50,70,50,250,150);
// Menutup kurva/path
pdf_closepath($halaman);
// Memplot dengan isian warna
pdf_fill_stroke($halaman);
// Set warna isian
pdf_setcolor($halaman,"fill","rgb", 1.0, 0.0, 0.0);
// Menggambar lingkaran
Created By Muhammad Syahrizal 135
pdf_circle($halaman,450,100,50);
// Memplot dengan isian warna
pdf_fill_stroke($halaman);
// Menggambar persegi panjang
pdf_rect($halaman,350,25,200,150);
// Memplot tanpa isian warna
pdf_stroke($halaman);
pdf_end_page($halaman);
pdf_close($halaman);
$buf = pdf_get_buffer($halaman);
$panjangbuffer = strlen($buf);
Header("Content-type:application/pdf");
Header("Content-Length:$panjangbuffer");
Header("Content-Disposition:inline;
filename=menggambar2.pdf");
echo $buf;
pdf_delete($halaman);
?>
Mari kita coba contoh menggambar berikutnya. Anda dapat membuat garis putus-putus
dengan perintah pdf_setdash().
<?php
$halaman = pdf_new();
pdf_open_file($halaman);
pdf_begin_page($halaman,595,342);
// Lingkaran
pdf_setcolor($halaman,"fill","rgb", 0.8, 0.5, 0.8);
pdf_circle($halaman,400,150,75);
pdf_fill_stroke($halaman);
// Funky Arc
pdf_setcolor($halaman,"fill","rgb", 0.8, 0.5, 0.5);
pdf_moveto($halaman,200,150);
pdf_arc($halaman,300,150,50,0,120);
pdf_closepath($halaman);
pdf_fill_stroke($halaman);
// kotak dengan garis putus-putus
pdf_setcolor($halaman,"stroke","rgb", 0.3, 0.8, 0.3);
pdf_setdash($halaman,4,6);
pdf_rect($halaman,50,50,500,250);
pdf_stroke($halaman);
pdf_end_page($halaman);
pdf_close($halaman);
$buf = pdf_get_buffer($halaman);
$panjangbuffer = strlen($buf);
Header("Content-type:application/pdf");
Header("Content-Length:$panjangbuffer");
Header("Content-Disposition:inline;
filename=menggambar3.pdf");
echo $buf;
pdf_delete($halaman);
?>
Satu Untuk Semua, Semuanya Dari Satu
Adakalanya kita ingin mencetak bentuk, gambar atau tulisan secara berulang pada
beberapa halaman PDF yang kita akan buat. Naluri kepemalasan kita akan berontak. Bisa
tidak semua perulangan ini dibuat lebih ringkas dan mudah?
Pada kondisi ini maka kita membutuhkan pola baku alias template. Dalam dunia PDF,
template dikenal sebagai form XObjects. Dokumen PDF yang dibuat akan menjadi lebih
kecil ukurannya dengan memanfaatkan template. Contoh skrip berikut ini dapat coba
Anda pahami.
<?php
$halaman = pdf_new();
pdf_open_file($halaman);
Created By Muhammad Syahrizal 136
// Muat Gambar/Logo PHP
$gambar = pdf_open_jpeg($halaman, "php-big.jpg");
// Memulai Template
$template = pdf_begin_template($halaman,595,442);
pdf_save($halaman);
pdf_place_image($halaman, $gambar, 4, 403, 0.25);
pdf_place_image($halaman, $gambar, 525, 403, 0.25);
pdf_moveto($halaman,10,395);
pdf_lineto($halaman,585,395);
pdf_lineto($halaman,585,10);
pdf_lineto($halaman,10,10);
pdf_closepath($halaman);
pdf_stroke($halaman);
pdf_moveto($halaman,10,375);
pdf_lineto($halaman,585,375);
pdf_stroke($halaman);
$font = pdf_findfont($halaman,"Times-Bold","host",0);
pdf_setfont($halaman,$font,38.0);
pdf_show_xy($halaman,"Contoh Template PDF",100,407);
pdf_restore($halaman);
pdf_end_template($halaman);
// Tutup Gambar/Logo PHP
pdf_close_image ($halaman,$gambar);
// Halaman Pertama
pdf_begin_page($halaman,595,442);
pdf_place_image($halaman, $template, 0, 0, 1.0);
pdf_setfont($halaman,$font,14.0);
pdf_show_xy($halaman,"Contoh Template PDF Halaman 1",15,380);
pdf_end_page($halaman);
// Halaman Kedua
pdf_begin_page($halaman,595,442);
pdf_place_image($halaman, $template, 0, 0, 1.0);
pdf_setfont($halaman,$font,14.0);
pdf_show_xy($halaman,"Contoh Template PDF Halaman 2",15,380);
pdf_end_page($halaman);
pdf_close($halaman);
$buf = pdf_get_buffer($halaman);
$panjangbuffer = strlen($buf);
Header("Content-type:application/pdf");
Header("Content-Length:$panjangbuffer");
Header("Content-Disposition:inline;
filename=template.pdf");
echo $buf;
pdf_delete($halaman);
?>
Contoh aplikasi dalam dunia nyata adalah untuk dokumen atau pencetakan invoice,
kuitansi, packing list, dan dokumen-dokumen lain yang berbentuk form baku.
Mewarnai dengan Pola
Pola isian mirip dengan pola baku/templates, hanya saja pola isian digunakan untuk
pengganti warna isian. Anda dapat menggambar kurva/path, garis atau bentuk primitif
kurva lainnya (stroke), dan mengisi warna kurva/path tersebut dengan sebuah pola isian.
Contoh berikut ini akan mengobarkan kembali semangat PHP kita.
<?php
$halaman = pdf_new();
pdf_open_file($halaman);
// Muat gambar untuk pola isian
$gambar = pdf_open_jpeg($halaman, "php-big.jpg");
// Membuat pola
$pola = pdf_begin_pattern($halaman,21,14,25,18,1);
pdf_save($halaman);
pdf_place_image($halaman, $gambar, 0,0,0.08);
pdf_restore($halaman);
pdf_end_pattern($halaman);
// Tutup gambar
Created By Muhammad Syahrizal 137
pdf_close_image ($halaman,$gambar);
pdf_begin_page($halaman,595,842);
// Gunakan pola untuk isian dan garis gambar
pdf_setcolor($halaman, "fill", "pattern", $pola);
pdf_setcolor($halaman, "stroke", "pattern", $pola);
pdf_setlinewidth($halaman, 60.0);
pdf_circle($halaman,200,680,100);
pdf_stroke($halaman);
pdf_end_page($halaman);
pdf_close($halaman);
$buf = pdf_get_buffer($halaman);
$panjangbuffer = strlen($buf);
Header("Content-type:application/pdf");
Header("Content-Length:$panjangbuffer");
Header("Content-Disposition:inline;
filename=polaisian.pdf");
echo $buf;
pdf_delete($halaman);
?>
Tandai Yang Penting
Anda dapat menandai bagian-bagian yang penting dalam dokumen PDF dengan
bookmark, sehingga navigasi dokumen menjadi lebih mudah. Bookmark ini bisa
berbentuk struktur pohon (tree structure) menyerupai daftar isi. Selain berupa bookmark,
Anda dapat juga mempermudah navigasi dokumen dengan membuat daftar thumbnail
halaman-halaman yang ada pada dokumen PDF. Contoh berikut ini akan membantu
untuk mempelajari caranya.
<?php
$halaman = pdf_new();
pdf_open_file($halaman);
// Halaman Pertama
pdf_begin_page($halaman,595,842);
// Set Bookmark Awal dan Jenis Huruf
$top = pdf_add_bookmark($halaman, "Sistem Operasi");
$font = pdf_findfont($halaman,"Helvetica-Bold","host",0);
$gambar = pdf_open_jpeg($halaman, "freebsd.jpg");
pdf_add_thumbnail($halaman, $gambar);
pdf_setfont($halaman, $font, 20);
pdf_add_bookmark($halaman, "FreeBSD", $top);
pdf_show_xy($halaman, "Ini adalah halaman tentang FreeBSD",
50, 670);
pdf_place_image($halaman, $gambar, 50, 700, 1);
pdf_close_image($halaman,$gambar);
pdf_end_page($halaman);
// Halaman Kedua
pdf_begin_page($halaman,595,842);
$gambar = pdf_open_jpeg($halaman, "linux.jpg");
pdf_add_thumbnail($halaman, $gambar);
pdf_setfont($halaman, $font, 20);
pdf_add_bookmark($halaman, "Linux", $top);
pdf_show_xy($halaman, "Ini adalah halaman tentang Linux", 50,
670);
pdf_place_image($halaman, $gambar, 50, 700, 1);
pdf_close_image($halaman,$gambar);
pdf_end_page($halaman);
// Halaman Ketiga
pdf_begin_page($halaman,595,842);
$gambar = pdf_open_jpeg($halaman, "mac.jpg");
pdf_add_thumbnail($halaman, $gambar);
pdf_setfont($halaman, $font, 20);
pdf_add_bookmark($halaman, "Mac", $top);
pdf_show_xy($halaman, "Ini adalah halaman tentang Mac", 50,
670);
pdf_place_image($halaman, $gambar, 50, 700, 1);
pdf_close_image($halaman,$gambar);
Created By Muhammad Syahrizal 138
pdf_end_page($halaman);
pdf_close($halaman);
$buf = pdf_get_buffer($halaman);
$panjangbuffer = strlen($buf);
Header("Content-type:application/pdf");
Header("Content-Length:$panjangbuffer");
Header("Content-Disposition:inline;
filename=tandabuku.pdf");
echo $buf;
pdf_delete($halaman);
?>
Habis Ini, Terus...
Jika Anda telah mempelajari artikel ini sampai pada tahap ini, maka Anda telah memiliki
dasar yang cukup untuk membuat dokumen PDF dengan PHP dan PDFLib. Keterangan
mengenai fungsi-fungsi PDF yang digunakan dalam skrip contoh di artikel ini dapat
Anda pelajari lebih detil pada Manual PHP yang tersedia di http://www.php.net. Selamat
menjadi PDF Maker!
Created By Muhammad Syahrizal 139
1 comments
Comments 1 - 1 of 1 previous next Post a comment