Mahir Php Dan My Sql

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

1 comments

Comments 1 - 1 of 1 previous next Post a comment

Post a comment
Embed Video
Edit your comment Cancel

Favorites, Groups & Events

Mahir Php Dan My Sql - Presentation Transcript

  1. 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.
  2. Mahir dan Professional PHP dan MySQL vize@telkom.net IlmuKomputer.Com Mahir dan professional PHP dan MySQL Penulis : Muhammad Syahrizal
  3. 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).
  4. Mahir dan Professional PHP dan MySQL Muhammad Syahrizal ©2007, Gratech Media Perkasa, Medan Hak cipta dilindungi undang-undang Diterbitkan pertama kali oleh Penerbit Gratech Media Perkasa Dilarang keras menerjemahkan, memfotokopi, atau memperbanyak sebagian atau seluruh isi buku ini tanpa izin tertulis dari penerbit.
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. berfungsi untuk mengkoneksikan database pada “localhost” dengan username “abe” dan passwordnya “poetra”. Lihat, username dan password berdasarkan apa yang telah anda isikan pada “winmysqladmin” • Sedangkan variabel $db=mysql_select_db (‘test’); • Berfungsi untuk memilih database yang telah anda buat pada MySQL. Secara default di dalam MySQL telah ada 2 database yaitu “mysql” dan “test”. Sekarang jelas kenapa penulis Artikel Populer IlmuKomputer.Com Copyright © 2003 IlmuKomputer.Com pakai database “test” bukan? • If.. dan ..else, ini merupakan sebuah perulangan dan tentunya bukan penulis lagi yang menjelaskannya. MySQL Command Line! Laiknya database SQL (Structured Query Language) yang lain, MySQL juga dilengkapi dengan perintah-perintah dan sintaks-sintaks SQL. Di bawah ini kita tidak akan membahas perintah keseluruhan dari SQL tersebut, akan tetapi kita akan membahasnya secara umum. Penulis harapkan anda mengerti dan mampu untuk menggunakannya. Sekarang anda pasti masih bingung bagaimana menjalankan console MySQL pada PHPTriad? Tidak perlu bingung karena ada 2 cara untuk mengaktifkannya • Sekarang anda cari aja “mysql.exe” pada direktori C:ApacheMySQLbinmysql.exe! Jka sudah ketemu klik 2 kali. Maka anda akan langsung mendapati console yang anda inginkan . (lihat gambar 6) • Cara yang kedua adalah melalui DOS Command. Start – Run – ketikkan “cmd” – ketikkan “C:>apachemysqlbinmysql.exe”. maka anda akan langsung mendapati console yang anda inginkan. Note: Penulis menggunakan Windows 2000, bagi anda yang menggunakan Windows 9x, pada Run ketikkan perintah “command”. Jika sekarang anda telah masuk ke dalam console mysql, coba ketikkan perintah di bawah ini! mysql> show databases; Created By Muhammad Syahrizal 6
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. 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
  17. 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
  18. 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
  19. 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
  20. 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
  21. 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
  22. 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
  23. Gambar 9. Diagram Alir Penggunaan Aplikasi E-Commerce Created By Muhammad Syahrizal 19
  24. Gambar 10. Rancangan Layar Halaman Depan Contoh Web E-Commerce Gambar 11. Rancangan Layar Halaman Contoh Daftar Barang Created By Muhammad Syahrizal 20
  25. Gambar 12. Rancangan Layar Halaman Contoh Daftar Pesanan Gambar 13. Rancangan Layar Halaman Contoh Pemrosesan Kartu Kredit Created By Muhammad Syahrizal 21
  26. 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
  27. Tabel 1. Tabel Alamat Tabel 2. Tabel Jenis_Kartu Tabel 3. Tabel Pesanan Created By Muhammad Syahrizal 23
  28. Tabel 4. Tabel Pengiriman Tabel 5. Tabel Status Created By Muhammad Syahrizal 24
  29. 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
  30. 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
  31. 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
  32. 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
  33. 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
  34. 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
  35. 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
  36. } ?> 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
  37. 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
  38. 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
  39. 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
  40. 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
  41. 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
  42. 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
  43. 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
  44. 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
  45. File formulir1.php: <html> <head> <title> Formulir Online </title> </head> <body bgcolor="#FFFFFF"> <form action=formulir2.php method=POST> <font face=verdana size=2 color="#000000"> <h3 align=left> FORMULIR ONLINE </h3> </font> <pre> Nama : <input type=text name=nama size=15> E-Mail : <input type=text name=email size=20> Alamat : <input type=text name=alamat size=20> Kota : <input type=text name=kota size=12> Telepon : <input type=text name=telepon size=12> Tulis pesanan Anda dibawah ini: <textarea name=pesanan rows=5 cols=30> </textarea> <input type=submit value="Kirim"> <input type=reset value="Hapus"> </pre> </form> </body> </html> File formulir2.php: <html> <head> <title> Formulir Online </title> </head> <body bgcolor="#FFFFFF"> <font face=verdana size=2 color="#000000"> <h3 align=left> FORMULIR ONLINE </h3> </font> <pre> <?php // ----- buat header email $to="anonkuncoro@yahoo.com"; $subject="Formulir Online"; $from="From: $nama <$email>"; // ----- isi email $content=""; $content.="Formulir Onlinen"; $content.="Nama : $naman"; $content.="E-Mail : $emailn"; $content.="Alamat : $alamatn"; $content.="Kota : $kotan"; $content.="Telepon : $teleponn"; $content.="Pesanan Anda:n"; $content.="$pesanann"; // ----- kirim ke email mail($to,$subject,$content,$from); // ----- tampilkan pesan di browser Created By Muhammad Syahrizal 41
  46. 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
  47. 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
  48. 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
  49. 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
  50. 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
  51. 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
  52. 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
  53. 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
  54. 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
  55. <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
  56. 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
  57. </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
  58. 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
  59. Pilih Menu Administrative Tools (Untuk Windows 2000 Prof, XP) Created By Muhammad Syahrizal 55
  60. 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
  61. 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
  62. 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
  63. 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
  64. 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
  65. <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
  66. $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
  67. 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
  68. <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
  69. 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 &nbsp;) 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
  70. // 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
  71. 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
  72. 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
  73. 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
  74. 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
  75. 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
  76. 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
  77. 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
  78. $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
  79. (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
  80. $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
  81. 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
  82. /* 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
  83. ?> <!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
  84. <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
  85. ?> 2. Script isi.php <html> <head> <title>++form buku tamu++</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="#FFCC00"> <form name="form1" method="post" action="kirim.php"> <div align="center"> <table width="70%" border="0" cellpadding="0" cellspacing="0" bgcolor="#990000"> <tr bgcolor="#990000"> <td colspan="3"> <div align="center"><font color="#FFFFFF" size="3" face="Verdana"><strong><br> FORM PENGISIAN BUKUTAMU </strong></font></div> <hr align="center"></td> </tr> <tr bgcolor="#990000"> <td width="37%"> <div align="right"><font color="#FFFFFF" size="2" face="Verdana">Nama</font></div></td> <td width="3%"> <div align="center"><font color="#FFFFFF" size="2" face="Verdana">:</font></div></td> <td width="60%"> <div align="left"> <font color="#FFFFFF" size="2" face="Verdana"> <input name="nama" type="text" id="nama"> </font></div></td> </tr> <tr bgcolor="#990000"> <td> <div align="right"><font color="#FFFFFF" size="2" face="Verdana">Lokasi</font></div></td> <td> <div align="center"><font color="#FFFFFF" size="2" face="Verdana">:</font></div></td> <td> <div align="left"> <font color="#FFFFFF" size="2" face="Verdana"> <input name="lokasi" type="text" id="lokasi"> </font></div></td> </tr> <tr bgcolor="#990000"> <td> <div align="right"><font color="#FFFFFF" size="2" face="Verdana">E-mail</font></div></td> <td> <div align="center"><font color="#FFFFFF" size="2" face="Verdana">:</font></div></td> <td> <div align="left"> <font color="#FFFFFF" size="2" face="Verdana"> <input name="email" type="text" id="email"> </font></div></td> Created By Muhammad Syahrizal 81
  86. </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
  87. $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
  88. 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
  89. 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
  90. $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
  91. <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
  92. 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
  93. $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
  94. @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
  95. ?> 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
  96. { @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
  97. <td valign="top">Password</td> <td><input name="password" type="password"></td> </tr> <tr> <td>&nbsp;</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
  98. } /*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
  99. 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
  100. $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
  101. 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 "&nbsp;($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 "&nbsp;($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
  102. 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
  103. 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
  104. 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
  105. . “filename=“$att_name”rnn” . “$filern” . “--$num--”; //Tutup attachment fclose($fp); }else{ //Proses sebagai pesan biasa $he = “From: $darin”; //Definisikan tipe pesan yang dikirim if($tipe==“teks”){ //Tipe pesan plain teks $he .= “Content-Type: text/plainn”; }else{ //Tipe pesan HTML $he .= “Content-Type: text/html; charset=iso-8859-1n”; } } //Kirim email $kirim = mail($untuk, $judul, $pesan, $he); //Beri komentar untuk status pengiriman pesan if($kirim){ echo “Pesan telah terkirim.”; }else{ echo “Pesan gagal dikirimkan!”; } } echo “<br><br><p>Copyright &copy; 2005, IlmuKomputer.com<br>n”; echo “All right reserved.</p></body></html>”; ?> MySQL Monitor dengan PHP MySQL adalah salah satu database server yang cukup populer dan tangguh. Sifatnya yang Free (GPL) membuat MySQL cepat berkembang dan digunakan banyak server di internet. MySQL Monitor sendiri adalah sebuah tool kecil yang menjadi paket dalam server MySQL yang digunakan untuk administrasi database. Skrip ini masih sangat sederhana, perlu dikembangkan lagi jika anda ingin benar-benar menggunakannya. Ada beberapa hal yang perlu diperhatikan sebelum anda menggunakannya yang berhubungan dengan keamanan server MySQL: 1. Dengan menggunakan script ini maka pengguna interface akan dengan leluasa berinteraksi dengan server database anda, perhatikan user yang anda masukkan pada $username. Jika user tersebut mempunyai akses full maka server MySQL anda sangat terbuka. 2. Selain itu dengan perintah SQL: SELECT ... INTO OUTFILE berarti pengguna dapat memasukkan file ke server hosting Anda. Oleh sebab itu sebaiknya skrip ini diberikan password pengaman sebelum mengaksesnya. Tapi dalam tutorial ini tidak dibahas cara bagaimana membuat password pengaman tersebut. Pemasangan Skrip Pada Server Created By Muhammad Syahrizal 101
  106. 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 &lt;Alt- Created By Muhammad Syahrizal 102
  107. P&gt;" /></p> </form> <!-- MEMBUAT HASIL TAMPILANNYA --> <?php echo('<hr />'); if ($masukkan) { if (get_magic_quotes_gpc()) $perintah = stripslashes($perintah); echo('<p><b>Perintah :</b> '.nl2br($perintah).'</p>'); $result = mysql_db_query($database,$perintah); if ($result) { if (@mysql_num_rows($result)) { ?> <p><b>Hasil :</b></p> <table border="1"><thead> <tr> <?php for ($i=0;$i<mysql_num_fields($result);$i++) echo('<th>'.mysql_field_name($result,$i).'</th>'); ?> </tr> </thead><tbody> <?php while ($row = mysql_fetch_row($result)) { echo('<tr>'); for ($i=0;$i<mysql_num_fields($result);$i++) { echo('<td>'.$row[$i].'</tr>'); } echo('</tr>'); } ?> </tbody> </table> <?php echo('<p><b>Query Berhasil:</b> '.mysql_affected_rows().' baris terpengaruh.</p>'); } else { echo('<p><b>Query Berhasil:</b> '.mysql_affected_rows().' baris terpengaruh.</p>'); Tips dan Trik IlmuKomputer.Com Copyright © 2003 IlmuKomputer.Com 5 } } else { echo('<p><b>Perintah salah:</b> '.mysql_error().'</p>'); } } ?> <!-- AKHIR DARI HASIL --> </body> Created By Muhammad Syahrizal 103
  108. </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 '&amp;'. Kemudian membuat tombol untuk mengirim query: <input name="masukkan" type="submit" accesskey="P" value="Masukkan Perintah &lt;Alt-P&gt;" /> 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
  109. 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
  110. ) 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
  111. #FCF29A;border-top:1px solid #FCF29A" align="center" cellpadding="1" cellspacing="1"> <tr> <td><strong> Messages Board</strong></td> </tr> </table></td> </tr> <tr> <td> <script language="JavaScript"> function clrTh() { document.sms.smsnama.value=""; } function clrThs() { document.sms.smspesan.value=""; } function opnsmile() { window.open('smile.php','smile',"scrollbars=yes,toolbar=no,resizable=n o,screenX=1,screenY=1,menubar=no,location=no,width=300,height=400,stat us=no"); } </script> <table width="100%" border="0" style="border-right:1px solid #FCF29A;border-left:1px solid #FCF29A;border-bottom:1px solid #FCF29A" align="center" cellpadding="3" cellspacing="1"> <tr> <td><iframe frameborder="0" height="150" width="98%" marginheight="0" name="ifr" scrolling="auto" marginwidth="0" src="sms.php"></iframe> </td> </tr> <tr> <td height="255"> <form action="sms.php" method="post" name="sms" target="ifr"> Nama<br> <input name="smsnama" type="text" id="smsnama" style="border:1px solid #CCCCCC;background:#FFFFFF;color:#000000;width:150;font-size:10;font-f amily:verdana" onFocus="clrTh();"> <br> Pesan<br> <textarea name="smspesan" rows="5" id="smspesan" style="border:1px solid #CCCCCC;background:#FFFFFF;color:#000000;width:150;font-size:10;font-f amily:verdana"></textarea> <br> (<a href="javascript:opnsmile();">smilies</a>) <p></p> <p> <input name="sendsms" type="submit" id="sendsms" Created By Muhammad Syahrizal 107
  112. style="background:#FFD800;color:#000000" value="SEND"> <input name="sendsms2" type="reset" id="sendsms2" style="background:#FFD800;color:#000000" value="CLEAR"> </p> </form></td> </tr> </table> </td> </tr> </table> </body> </html> File : smile.php <html><head><title>messages board Smilies - ipen</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <style> BODY{ scrollbar-highlight-color:#000000; scrollbar-shadow-color:#000000; scrollbar-track-color:#250512; scrollbar-face-color:#250512; scrollbar-arrow-color:#FFFFFF; scrollbar-darkshadow-color:#868584; scrollbar-3dlight-color:#555555; } </style> <STYLE>.nounder{text-decoration:none;font-family:verdana; font-size:12}</STYLE> <SCRIPT lang="Javascript" type="text/javascript"> function add_smilie(a_smilie){ if(window.opener.document.sms!=window.undef){ window.opener.document.sms.smspesan.value+=" "+a_smilie+" "; //window.opener.document.sms.smspesan.focus(); } } function wc(ty, sp, w, pic){ document.write('<tr align="center"><td bgcolor="#DDDDDD"><a href="javascript:add_smilie(''+ty+'')" class="nounder"><B>'+ty+'</B></a></td><TD bgcolor="#FFFFFF"></TD><td bgcolor="#DDDDDD">'+sp+'<a href="javascript:add_smilie(''+ty+'')"><img src="smilies/'+pic+'.gif" width="'+w+'" border=0></a></td></tr>'); } </SCRIPT></HEAD> Created By Muhammad Syahrizal 108
  113. <body bgcolor="#FFD800" text="#000000" link="#000000" vlink="#000000"> <table width="0%" border="0" RULES=NONE cellspacing="1" cellpadding="2" align="center"><tr bgcolor="#a4acb8" valign="center" align="center"><td nowrap><b>Smilie Code</b></td><TD bgcolor="#FFFFFF"></TD><td nowrap><b>Image<BR>Replacement</b></td></tr><SCRIPT> wc(":fight:","",33,"fight"); wc(":kiss:","",34,"kiss"); wc(":com:","",40,"playcom"); wc(":)","",15,"smile"); wc(":(","",15,"sad"); wc(":o","",15,"shocked"); wc(":D","",15,"biggrin"); wc(";)","",15,"wink"); wc(":p","",15,"tongue"); wc(":artist:","",15,"artist"); wc(":bowling:","",15,"bowl"); wc(":mad:","",15,"mad"); wc(":dizzy:","",15,"dizzy"); wc(":nono:","",15,"nono"); wc(":eyepatch:","",15,"pirate"); wc(":sick:","",15,"sick"); wc(":cry:","",15,"cry"); wc(":uhh:","",15,"uhh"); wc(":wacko:","",15,"wacko"); wc(":yinyang:","",15,"yin-yang"); wc(":frog:","&nbsp;&nbsp;",25,"frog"); </SCRIPT></TABLE></BODY></HTML> File : sms.php <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>messages board by ipen</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <style> BODY{ scrollbar-highlight-color:#FFD800; scrollbar-shadow-color:#FFD800; scrollbar-track-color:#FFE401; scrollbar-face-color:#FFE401; scrollbar-arrow-color:#000000; scrollbar-darkshadow-color:#868584; scrollbar-3dlight-color:#FFD800; } </style> </head> Created By Muhammad Syahrizal 109
  114. <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
  115. "); } } } $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
  116. 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
  117. } else { $session_user=$HTTP_SESSION_VARS["userakses"]; $session_mode=$HTTP_SESSION_VARS["usermode"]; } //mengambil record lama session dari database $sesGet=mysql_query("select * from ". $prefix ."sessions where session_id='$session_id'"); $session=mysql_fetch_array($sesGet); //IP address $ipaddress=$REMOTE_ADDR; //update user session jika suda ada dan jika tidak ada bikin baru if ($session[session_id]) { mysql_query("update ". $prefix ."sessions set session_time='$session_time', session_page='". $REQUEST_URI ."' ,session_username='$session_user', session_address='$ipaddress' ,session_usermode='$session_mode' where session_id='$session_id'"); } else { mysql_query("insert into ". $prefix ."sessions (session_time,session_visit,session_username,session_usermod e,session_ id,session_address,session_page) values('$session_time','$session_time','$session_user','$ses sio n_mode','$session_id','$ipaddress','". $REQUEST_URI ."') Tips dan Trik IlmuKomputer.Com Copyright © 2003 IlmuKomputer.Com 3 "); } //Batas Session Time $cekSess=$session_time-300; //Total Semua yang online $sesGets=mysql_query("select count(*) from ". $prefix ."sessions where session_time>='$cekSess'"); $session_crt=mysql_fetch_row($sesGets); //Total online non member $sesGetss=mysql_query("select count(*) from ". $prefix ."sessions where session_time>='$cekSess' and session_usermode<=0"); $session_crts=mysql_fetch_row($sesGetss); //Total Online Member $sesGetsss=mysql_query("select count(*) from ". $prefix ."sessions where session_time>='$cekSess' and session_usermode>=1"); $session_crtss=mysql_fetch_row($sesGetsss); Created By Muhammad Syahrizal 113
  118. //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
  119. { 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>&nbsp;"; printf("%.1f", "$persen[$i]"); echo "%</font></td><td align=center><font face=Verdana size=2>"; echo "$pisah[$i]</font>"; Created By Muhammad Syahrizal 115
  120. 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
  121. 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
  122. 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
  123. 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
  124. $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
  125. '$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
  126. ,']','{','}','|','','+','=','?','/'); 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
  127. 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
  128. <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 &quot;_&quot; (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>&nbsp;</td> <td>&nbsp;</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
  129. </tr> <tr align="left" valign="top"> <td>Tempat Lahir</td> <td><input name="tempat_lahir" type="text" value="<?php echo $tempat_lahir; ?>" id="user_name8" style="width:180"> </td> </tr> <tr align="left" valign="top"> <td>Tanggal Lahir</td> <td><select name="tgl_lahir"> <?php for ($t=1;$t<=31;$t++) { $tt=date("d"); $tt=$tgl_lahir; if ($t == $tt) { echo "<option value="$t" selected>$t</option>"; } else { echo "<option value="$t">$t</option>"; } } ?> </select> <select name="bln_lahir"> <?php for ($t=1;$t<=12;$t++) { $tt=date("m"); $tt=$bln_lahir; if ($t == $tt) { echo "<option value="$t" selected>$namaBulan[$t]</option>"; } else { echo "<option value="$t">$namaBulan[$t]</option>"; } } ?> </select> <select name="thn_lahir"> <?php for ($t=1940;$t<=date("Y")-10;$t++) { $tt=date("Y")-22; $tt=$thn_lahir; if ($t == $tt) { echo "<option value="$t" selected>$t</option>"; } else { echo "<option value="$t">$t</option>"; } } ?> </select> </td> </tr> <tr align="left" valign="top"> <td>Note</td> <td><textarea name="note" id="note" style="width:180;height:70"><?php echo $note; ?></textarea></td> </tr> <tr align="left" valign="top"> <td>&nbsp;</td> Created By Muhammad Syahrizal 125
  130. <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
  131. 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
  132. <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
  133. 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
  134. (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
  135. 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
  136. 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
  137. $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
  138. 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
  139. 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
  140. 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
  141. // 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
  142. 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
  143. 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

+ Bravo OSBravo OS, 3 months ago

custom

893 views, 0 favs, 2 embeds more stats

Mahir Php Dan My Sql

More info about this document

© All Rights Reserved

Go to text version

  • Total Views 893
    • 886 on SlideShare
    • 7 from embeds
  • Comments 1
  • Favorites 0
  • Downloads 47
Most viewed embeds
  • 6 views on http://ikhwancyber.wordpress.com
  • 1 views on http://ompusunggu.page.tl

more

All embeds
  • 6 views on http://ikhwancyber.wordpress.com
  • 1 views on http://ompusunggu.page.tl

less

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

Cancel
File a copyright complaint
Having problems? Go to our helpdesk?

Categories

Tags