1. PHP? Siapa Takut! 1Bagian 1: Captains Log Stardate 41153.7Kisah Sang PHPWeb pada kisah awalnya sangat menjemukan bagi orang-orang yang dinamis. Bagaimanatidak, pemakainya hanya dicekoki oleh isi (content) halaman web yang meskipun bersifatsaling terhubung dengan halaman web yang lain (hyperlink) tetap saja tidak memberikansaluran bagi pengguna yang ingin mengemukakan pendapatnya. Tidak ada demokrasi,karena pengguna hanya bersifat pasif dan tidak bisa berinteraksi secara aktif dalam web.Ketika akhirnya ditemukan tag <FORM> barulah kejemuan dan kebuntuan yang adamenjadi sirna. Pengguna menjadi bisa secara aktif berinteraksi dengan halaman web, danmulailah era aplikasi berbasis web yang dinamis. Secara tradisi, bahasa script Perlmenjadi bahasa utama yang digunakan oleh programmer web untuk menanganipemrosesan form dalam berinteraksi dengan pengguna web. Tidak diragukan lagikedigjayaan dari Perl dalam menangani urusan ini, hal ini juga didukung dengan begitudominannya bahasa ini digunakan di situs-situs web yang ada.Perl bisa menjadi alat bantu yang sangat hebat di tangan ahlinya, namun akan berubahmenjadi mimpi paling buruk bagi seorang programmer web pemula yang dikejar waktudan bosnya untuk segera merilis halaman webnya. Tidak mudah memang, mempelajaribahasa Perl, dan seringkali dibutuhkan langkah panjang dan rumit untuk sebuah maksudyang sederhana saja. Pendek kata, dibutuhkan suatu bahasa yang lebih praktis dan mudahdipelajari serta adidaya untuk memudahkan dalam membangun sebuah aplikasi yangberbasis web.Di rimba belantara web, tersebutlah dua bahasa yang paling kondang yang mampumenggantikan tugas-tugas Perl namun dengan tingkat kesulitan belajar yang rendah, ASP(Active Server Page) dan PHP (PHP: Hypertext Preprocessor). ASP yang dijagokan olehPak Bill Gates tentu saja berjalan di lingkungan sistem operasi Windows dan sampai saatini belum terlihat akan di-porting ke platform yang lain. Padahal dunia web saat ini masihdidominasi oleh platform UNIX dan variant-nya termasuk sistem operasi like UNIXseperti Linux. Selain itu, untuk dapat menggunakan ASP yang resmi, kita juga harusmerelakan sebagian uang kita untuk menambah isi kantong Pak Bill Gates.PHP sebagai alternatif lain memberikan solusi sangat murah (karena gratis digunakan)dan dapat berjalan di berbagai jenis platform. Awalnya memang PHP berjalan di sistemUNIX dan variant-nya, namun kini dapat berjalan dengan mulus di lingkungan sistemoperasi Windows. Suatu nilai tambah yang luar biasa karena proses development programberbasis web dapat dilakukan lintas sistem operasi. Pak Fulan, misalnya, bisa mencuriwaktu memrogram aplikasi untuk usaha pribadinya di kantor yang menggunakan sistemoperasi Windows dan meneruskannya di rumahnya dengan komputer yang menggunakansistem operasi Linux.Last update 5/5/2012
2. PHP? Siapa Takut! 2Dengan luasnya cakupan sistem operasi yang mampu menjalankan PHP dan ditambahbegitu lengkapnya fungsi-fungsi program (tersedia lebih dari 400 fungsi di PHP yangsangat berguna) tidak heran jika PHP ini semakin menjadi trend di kalangan programmerweb. Konon, saat ini lebih dari satu juta situs web menggunakan PHP sebagai scriptpemrogramannya.Pak Rasmus Lerdorf adalah bapak penemu awal bahasa PHP ini, yang bermula darikeinginan sederhana Pak Lerdorf untuk mempunyai alat bantu (tools) dalam memonitorpengunjung yang melihat situs web pribadinya. Inilah sebabnya pada awalpengembangannya, PHP merupakan singkatan dari Personal Home Page tools, sebelumakhirnya dipaksakan menjadi singkatan rekursif dari PHP: Hypertext Preprocessor.Pertengahan tahun 1995 dirilis PHP/FI (FI adalah singkatan dari Form Interpreter) yangmemiliki kemampuan dasar membangun aplikasi web, memproses form, dan mendukungdatabase mSQL.Antusias komunitas internet terhadap bahasa PHP ini begitu besar, sehingga Pak RasmusLerdorf akhirnya menyerahkan pengembangan PHP ini kepada sebuah teampemrograman dalam kerangka gerakan open source. Team ini membangun kembali PHPdari awal dengan menulis ulang program parser PHP Hasilnya adalah PHP 3.0 yangmemiliki dukungan lebih luas lagi terhadap database yang ada termasuk MySQL danOracle. PHP 4.0 sebagai versi lanjutan dari PHP 3.0 dirilis setelah itu denganmenggunakan mesin scripting Zend (akronim dari pengembangnya, Zeev Suraski danAndi Gutmans) untuk memberikan kinarja yang lebih cepat dan lebih baik Versi terakhirini mampu mendukung server web selain Apache dan secara built-in telah mampumenangani manajemen session.Nah, dongeng ini kita cukupkan di sini dulu. Singkat kata, PHP kita pilih sebagai bahasauntuk pengembangan web yang akan kita pelajari di bagian selanjutnya. Sebelummemulainya, ada baiknya Anda mengetahui kebutuhan-kebutuhan dasar yang akanmembantu Anda memahami tulisan ini. Anda diasumsikan telah memiliki sebuah sistemyang telah terinstalasi dan terkonfigurasi dengan baik Apache Web Server, PHP 4, dandatabase MySQL. Ketiganya adalah program open source yang tersedia secara gratis diInternet dan dapat berjalan di berbagai platform (Windows maupun UNIX/Linux). Andajuga harus merupakan seorang pemula di dunia PHP, karena kalau tidak Anda akanmengalami keadaan mirip anak SMA yang masuk ke kelas 1 SD. Tulisan ini tidakmembahas pengenalan format HTML, sehingga diharapkan Anda telah memilikipengetahuan dasar mengenai hal ini, karena bagaimana pun Anda akan menggunakanPHP untuk membangun aplikasi web yang pasti tidak lepas dari urusan tag HTML. Satuhal lagi, Anda juga perlu memiliki rasa humor yang cukup tinggi, dan menyukai StarTrek.Apakah Anda sudah siap dan memenuhi syarat? Baik, mari kita teruskan.Last update 5/5/2012
3. PHP? Siapa Takut! 3Saya Piccard, Jean Luc PiccardJika sistem Apache Web Server, PHP4, dan MySQL kita telah siap dan terkonfigurasidengan benar, sekarang adalah saatnya yang paling tepat untuk memulai perjalanan ini.Program "Hello World!" yang legendaris untuk memulai belajar sebuah bahasapemrograman, sengaja tidak dipakai karena kita tidak ingin meneruskan tradisi kuno ini.Ada hal yang lebih berguna yang dapat kita pakai sebagai contoh. Anda bisa mulaimemilih text editor favorit Anda (yang jelas vi bukan sebuah program nyaman bagipemula). Jika Anda bekerja di sistem operasi Windows, Anda bahkan dapat memilihLingkungan Pengembangan Terpadu/IDE (Integrated Development Environment) khususuntuk PHP seperti : • PHP Coder buatan Jerman (http://www.phpide.de), yang saat ini kodenya telah diakuisisi oleh Maguma (http://www.maguma.com) • PHPEd yang buatan Turki (http://www.soysal.com/PHPEd), terakhir kodenya dibeli oleh NuSphere (http://www.nusphere.com) • PHPEdit, program open source yang dapat didownload dari http://www.phpedit.netSilakan coba kode di bawah ini dan simpan sebagai file dengan ekstension .php,misalkan coba.php. <?php phpinfo(); ?>Untuk menjalankannya, kita bisa mulai membuka browser web kesukaan kita, kemudianarahkan alamat pada file coba.php yang telah kita buat, misalkan alamatnya adalah http://localhost/coba.php, maka Anda akan mendapatkan tampilan browser Anda berisikanparameter-parameter yang diset untuk PHP yang kita miliki. Anda dapat mengubahparameter ini dengan memodifikasi file php.ini. Jika Anda memang benar-benar masihpemula, jangan kaget melihat begitu banyaknya parameter yang harus diset untuk PHPAnda, karena akan saya beri tahu sebuah rahasia kecil bahwa nilai parameter yang defaultsebenarnya sudah sangat lebih dari cukup untuk memulai belajar pemrograman PHP 4.Konsep pemrograman dengan PHP ini sedikit berbeda dengan pemrograman denganmenggunakan script CGI yang memaksa kita untuk selalu menulis kode yangmenghasilkan keluaran dalam format HTML. Pada PHP, kita diberikan kebebasan untukmenyisipkan kode PHP di mana pun pada halaman HTML biasa dan menjalankan kodePHP tersebut setiap ada permintaan terhadap halaman tersebut.Last update 5/5/2012
4. PHP? Siapa Takut! 4Interpreter PHP dalam mengeksekusi kode PHP pada sisi server (disebut server-side) danberbeda dengan mesin maya Java yang mengeksekusi program pada sisi client (client-side). Proses eksekusi kode PHP yang disisipkan pada halaman HTML secara diagramdapat digambar sebagai berikut.Berikut ini adalah cara menyisipkan kode PHP pada halaman HTML biasa. <script language="php"> . . . . kode PHP . . . . </script>Cara yang lebih singkat adalah: <?php . . . . kode PHP . . . . ?>Last update 5/5/2012
5. PHP? Siapa Takut! 5Atau bisa juga <? . . . . kode PHP . . . . ?>Bahkan jika Anda memiliki waktu yang cukup mengubah parameter pada php.ini, Andabisa membuat kode penyisipan PHP menjadi mirip seperti pada ASP yaitu dengan: <% . . . . kode PHP . . . . %>Sampai di sini ada keraguan? Jika tidak, mari kita lanjutkan dengan contoh nyata caramengkombinasikan kode PHP dengan file HTML biasa. Cobalah Anda ketik kode dibawah ini, lalu simpan dengan nama misalnya coba1.php. Panggil melalui browser danamati hasilnya. <html> <head> <title>Test Penyisipan PHP Pada HTML</title> </head> <body> Kapal Asing, Silakan identifikasikan diri Anda! <br> <?php // Berikut ini adalah kode PHP yang disisipkan echo "<b>Ini adalah kapal Federasi Planet USS Enterprise.<br>"; echo "Saya Piccard, Jean Luc Piccard, kapten kapal.</b>"; ?> </body> </html>Setelah Anda panggil file ini lewat browser, Anda dapat mencoba melihat kode asaldokumen HTML yang kurang lebih akan nampak seperti ini. <html> <head> <title>Test Penyisipan PHP Pada HTML</title> </head> <body> Kapal Asing, Silakan identifikasikan diri Anda! <br> <b>Ini adalah kapal Federasi Planet USS Enterprise.<br> Saya Piccard, Jean Luc Piccard, kapten kapal.</b> </body> </html>Last update 5/5/2012
6. PHP? Siapa Takut! 6Terlihat bahwa dokumen yang tampil di browser pengguna adalah murni HTML tanpakode PHP satu pun. Pengguna tidak dapat melihat kode PHP yang ditulis olehprogrammer karena kode tersebut telah diproses menjadi format HTML oleh interpreterPHP pada server asal kode PHP.Pada setiap akhir perintah PHP selalu diakhiri dengan tanda titik-koma (";"), seperti jugaPerl dan C. Bagi seorang pemula, keharusan ini seringkali dilupakan dan menjadi sebuahkesalahan umum terjadi. Programmer PHP dapat menyisipkan komentar yang tidak akandieksekusi oleh mesin PHP dengan dua cara seperti pada contoh dibawah ini. <?php // Ini adalah komentar dalam satu baris /* Kalau yang ini, komentar dalam banyak baris, yang baru akan selesai setelah diakhiri dengan */ ?>Pencarian Jati DiriVariabel/Peubah adalah bagaikan garam dan sayur dalam bahasa pemrograman, dankabar baiknya adalah PHP pun memilikinya. Variabel dapat dibayangkan sebagai sebuahtempat penyimpanan data bagi nilai numeris maupun non numeris, agar dapat digunakanpada bagian lain dari script program PHP.PHP mendukung berbagai jenis variabel yaitu: • integer(bilangan bulat), • bilangan floating point (presisi tunggal, ganda) • boolean • null (untuk variabel yang belum diset). • string • array • object • resource • unknown.Jika Anda terbiasa menggunakan C atau Pascal, maka Anda harus bersiap-siapkehilangan sebuah kewajiban, karena pada PHP Anda tidak perlu mendefinisikan terlebihdahulu jenis variabel sebelum menggunakannya. PHP memiliki kepandaian untukmembedakan jenis variabel secara otomatis berdasarkan konteks yang sedang berlakubagi variabel tersebut.Last update 5/5/2012
7. PHP? Siapa Takut! 7Setiap variabel dalam PHP selalu dimulai dengan tanda dolar ("$") dan harus dimulaidengan huruf dan dapat diikuti oleh huruf dan angka. Dengan demikian, $warpspeed,$impuls_speed, $LCAR dan $Dilithium1 adalah contoh penamaan variabel PHP yangvalid.Setiap variabel dalam PHP peka terhadap perbedaan huruf kapital dan non kapital,sehingga $subspace, $SubSpace, dan $SUBSPACE adalah tiga buah variabel yangberbeda.Mari kita coba latih sedikit penggunaan variabel PHP dengan contoh di bawah ini yangmerupakan modifikasi dari contoh coba1.php. <html> <head> <title>Test Penyisipan PHP Pada HTML</title> </head> <body> Kapal Asing, Silakan identifikasikan diri Anda! <br> <?php // Berikut ini adalah inisiasi beberapa variabel $namad = "Jean"; $namat = "Luc"; $namab = "Piccard"; ?> <b>Ini adalah kapal Federasi Planet USS Enterprise.<br> <?php echo "Saya $namab, $namad $namat $namab, kapten kapal.</b>"; ?> </body> </html>Variabel $namad, $namat, $namab adalah variabel yang dari awal diset sebagai variabelstring dan kemudian isinya digunakan pada pemanggilan fungsi PHP echo(). Fungsiecho() merupakan fungsi yang sangat populer di PHP dan umumnya digunakan untukmembentuk keluaran tampilan. Saudara kembar dari fungsi echo() ini adalah fungsiprint(). Kode berikut ini dapat digunakan sebagai contoh penggunaan fungsi print()untuk menggantikan fungsi echo(). Anda bisa menyimpan kode ini dengan namaLast update 5/5/2012
8. PHP? Siapa Takut! 8coba2.php. <html> <head> <title>Test Penyisipan PHP Pada HTML</title> </head> <body> Kapal Asing, Silakan identifikasikan diri Anda! <br> <?php // Berikut ini adalah inisiasi beberapa variabel $namad = "Jean"; $namat = "Luc"; $namab = "Piccard"; ?> <b>Ini adalah kapal Federasi Planet USS Enterprise.<br> <?php print("Saya $namab, $namad $namat $namab, kapten kapal.</b>"); ?> </body> </html>Berikut ini adalah sebuah contoh mengenai betapa luwesnya penggunaan variable dalamPHP. Simpan kode ini dalam nama coba3.php. <?php // Contoh variabel $a $a = "Testing"; // Kini $a adalah variable jenis String echo "Nilai a adalah $a (string)<br>"; $a = 55; // Kini $a adalah variable jenis Integer echo "Nilai a berubah menjadi $a (Integer)<br>";Last update 5/5/2012
9. PHP? Siapa Takut! 9 $a = 7.5; // Kini $a adalah variable jenis floating point echo "Nilai a sekarang menjadi $a (floating point)<br>"; ?>Daftar Peralatan Geordi LaForge Yang Akan DibeliKita telah mengenal dasar-dasar penggunaan variabel dalam PHP. Sekarang kita teruskanperjalanan kita dengan mempelajari penggunaan beberapa operator matematika yangpaling berguna untuk menyusun sebuah daftar, katakanlah Geordi LaForge akanmenyusun daftar belanja peralatan di markas Federasi Planet untuk ekspedisi di DeepSpace 9.Geordi berencana membeli peralatan: • Senjata Phaser 2 buah • Tricorder 5 buah • Visor Cadangan 1 buah • Analyzer Photonik 3 buahSenjata phaser berharga 7.500 dolar, Tricorder 12.500 dolar, Visor 16.000 dolar danAnalyzer Photonik berharga 2.300 dolar. Sebagai langganan, Geordi mendapatkan diskon5% dari seluruh jenis peralatan yang dibeli. Bagaimanakah kita menyusun halamanHTML untuk menampilkan tabel daftar peralatan Geordi beserta harga dan totalharganya? Anda bisa mencoba mempelajari kode di bawah ini yang dapat Anda simpandengan nama coba4.php. <?php // inisiasi variable yang digunakan // nama peralatan $alat_geordi1 = "Phaser"; $alat_geordi2 = "Tricorder"; $alat_geordi3 = "Visor"; $alat_geordi4 = "Analyzer Photonik"; // harga per unit peralatan $harga_alat_geordi1 = 7500; $harga_alat_geordi2 = 12500; $harga_alat_geordi3 = 16000; $harga_alat_geordi4 = 2300; // jumlah peralatan yang ada $jumlah_alat_geordi1 = 2;Last update 5/5/2012
10. PHP? Siapa Takut! 10 $jumlah_alat_geordi2 = 5; $jumlah_alat_geordi3 = 1; $jumlah_alat_geordi4 = 3; // total harga per jenis peralatan $total_alat_geordi1 = $jumlah_alat_geordi1 * $harga_alat_geordi1; $total_alat_geordi2 = $jumlah_alat_geordi2 * $harga_alat_geordi2; $total_alat_geordi3 = $jumlah_alat_geordi3 * $harga_alat_geordi3; $total_alat_geordi4 = $jumlah_alat_geordi4 * $harga_alat_geordi4; // hitung grand total nilai peralatan Geordi $total_ harga = $total_alat_geordi1 + $total_alat_geordi2 + $total_alat_geordi3 + $total_alat_geordi4; // besar diskon untuk Geordi $diskon = 5; // jumlah total diskon yang diberikan kepada Geordi $nilai_diskon = ($diskon * $total_harga)/100; // jumlah yang harus dibayar Geordi $total_harga_dibayar = $total_harga - $nilai_diskon; ?> <html> <head> <title>Geordi dan Daftar Peralatan Yang Dibeli</title> </head> <body> <center> <table border="1" cellspacing="0" cellpadding="3"> <tr> <td colspan="4" align="center" valign="middle"> <b>Daftar Pemesanan Peralatan Geordi La Forge - NCC1701D</b> </td> </tr> <tr> <td><b>Nama Peralatan</b></td> <td><b>Jumlah</b></td> <td><b>Harga Satuan</b></td> <td><b>Jumlah Harga</b></td> </tr> <?phpLast update 5/5/2012
11. PHP? Siapa Takut! 11 // Mulai untuk mengisi tabel daftar dengan data yang ada ?> <tr> <td align="left"><?php echo $alat_geordi1; ?></td> <td align="right"><?php echo $jumlah_alat_geordi1; ?></td> <td align="right"><?php echo $harga_alat_geordi1; ?></td> <td align="right"><?php echo $total_alat_geordi1; ?></td> </tr> <tr> <td align="left"><?php echo $alat_geordi2; ?></td> <td align="right"><?php echo $jumlah_alat_geordi2; ?></td> <td align="right"><?php echo $harga_alat_geordi2; ?></td> <td align="right"><?php echo $total_alat_geordi2; ?></td> </tr> <tr> <td align="left"><?php echo $alat_geordi3; ?></td> <td align="right"><?php echo $jumlah_alat_geordi3; ?></td> <td align="right"><?php echo $harga_alat_geordi3; ?></td> <td align="right"><?php echo $total_alat_geordi3; ?></td> </tr> <tr> <td align="left"><?php echo $alat_geordi4; ?></td> <td align="right"><?php echo $jumlah_alat_geordi4; ?></td> <td align="right"><?php echo $harga_alat_geordi4; ?></td> <td align="right"><?php echo $total_alat_geordi4; ?></td> </tr> <tr> <td colspan="3" align="right">Total Harga</td> <td align="right"><?php echo $total_harga; ?></td> </tr> <tr> <td colspan="3" align="right"> Diskon <?php echo "( $diskon % )"; ?></td> <td align="right"><?php echo $nilai_diskon; ?></td> </tr> <tr> <td colspan="3" align="right">Jumlah harus dibayar</td> <td align="right"><?php echo $total_harga_dibayar; ?></td> </tr> </table> </center> </body> </html>Last update 5/5/2012
12. PHP? Siapa Takut! 12Kelihatan seperti program yang panjang dan kompleks? Sebenarnya program inisederhana saja, hanya karena kita belum menginjak pada cara mengatur aliran danpengulangan program maka program ini menjadi panjang. Pada saatnya nanti kita akanmampu membuat program dengan maksud yang sama namun dengan cara yang lebihsingkat. Sampai di sini, terpaksa Anda relakan saja harus mengetik kode yang cukuppanjang terlebih dahulu. Hitung-hitung latihan membiasakan diri dalam struktur kalimatdan penyisipan kode PHP pada format HTML.Tampilan hasil kode di atas adalah seperti di bawah ini. Daftar Pemesanan Peralatan Geordi La Forge - NCC1701D Nama Peralatan Jumlah Harga Satuan Jumlah Harga Phaser 2 7500 15000 Tricorder 5 12500 62500 Visor 1 16000 16000 Analyzer Photonik 3 2300 6900 Total Harga 100400 Diskon ( 5 % ) 5020 Jumlah harus dibayar 95380Dalam contoh di atas, kita telah belajar cara melakukan operasi matematis untukbilangan. Kita telah mencoba mengalikan, menjumlahkan, membagi dan mengurangi.Untuk jenis data string, kita dapat menggabungkan/menyambung dua buah string denganoperator titik ("."). Contoh berikut ini akan membantu kita untuk lebih mengerti. <?php // inisiasi variabel $a = "USS Enterprise"; $b = "Menurut catatan kapten"; $c = "Mengunjungi Planet Vulcan; // alternatif pertama $alt1 = $a . " " . $c . ", " . $b . "."; // alternatif kedua $alt2 = $b . ", " . $a . " " . $c . "."; ?>Last update 5/5/2012
13. PHP? Siapa Takut! 13 <html> <head> <title>Menggabungkan String</title> </head> <body> String yang pertama adalah: <br> <?php echo $alt1; ?> <br><br> String yang kedua adalah: <br> <?php echo $alt2; ?> </body> </html>Simpan kode di atas sebagai coba5.php, dan cobalah menjalankannya dari browser.Maka di layar akan muncul hasil seperti ini: String yang pertama adalah: USS Enterprise Mengunjungi Planet Vulcan, Menurut catatan kapten. String yang kedua adalah: Menurut catatan kapten, USS Enterprise Mengunjungi Planet Vulcan.USS Enterprise menghadapi Romulan WarbirdJika Anda berpengalaman dalam bahasa pemrograman C, Anda pasti familiar denganperintah include yang hampir selalu muncul di awal kode program C. PHP memiliki duamacam fungsi untuk maksud yang sama, namun dengan karakteristik yang khas untukmasing masing fungsi. Fungsi yang pertama adalah fungsi include() dan yang keduaadalah fungsi require(). Anda dapat mencoba contoh berikut ini sebagai gambarannya. <html> <head> <title>Persenjataan dan Perlengkapan Perang Enterprise</title> </head> <?php // Standar Senjata Kapal Perang Kelas Galaxy require("torpedo.php"); require("laser.php");Last update 5/5/2012
14. PHP? Siapa Takut! 14 // Standar Perisai Kapal Perang Kelas Galaxy include("shielding.php"); // Standar Mesin Penggerak Kapal Perang Kelas Galaxy include("impuls.php"); include("warp.php"); ?> <body> LCAR: Cek kesiapan perlengkapan perang USS Enterprise NCC-1701-D <ol type="1"> <li> Torpedo : <?php echo $torpedo; ?> <li> Laser : <?php echo $laser; ?> <li> Perisai : <?php echo $shielding; ?> <li> Mesin Impuls : <?php echo $impuls; ?> <li> Mesin Warp : <?php echo $warp; ?> </ol> <br> Commander La Forge, segera laporkan semua sistem persenjataan telah dicek dan berfungsi dengan baik. USS Enterprise siap menghadapi Kapal Romulan. <br> </body> </html>Simpan kode di atas dengan nama coba6.php dan panggil melalui browser. Hopla, akankita dapatkan begitu banyak pesan kesalahan (error). Tentu saja, karena kita belummembuat file-file torpedo.php, laser.php, shielding.php, impuls.php, danwarp.php. Berikut ini adalah kode program untuk file-file tersebut.[torpedo.php] <?php $torpedo = "Four Bays Photon Torpedo"; ?>[laser.php] <?php $laser = "Six Laser Canons"; ?>[shielding.php]Last update 5/5/2012
15. PHP? Siapa Takut! 15 <?php $shielding = "EM Polarization Shielding"; ?>[impuls.php] <?php $impuls = "Federation Impulse Power System"; ?>[warp.php] <?php $warp = "Matter/Antimatter Reactor (Warp Core)"; ?>Setelah Anda menuliskan semua file yang dibutuhkan seperti contoh di atas, maka jikaAnda memanggil program utamanya (coba6.php), PHP secara otomatis akanmengikutsertakan program-program lain yang ditentukan melalui require() daninclude(), membaca variabel $torpedo, $laser, $shielding, $impuls, dan $warp,serta menampilkan isi atau nilai dari variabel tersebut pada halaman yang kita panggil.Apakah require() dan include() itu benar-benar sama cara kerjanya? Tentu saja tidak,sebab jika sama fungsinya tentu tidak selayaknya dibedakan fungsinya. Perbedaanmendasar antara kedua fungsi ini adalah: • Fungsi require() akan selalu digantikan oleh isi dari file yang ditunjuk dalam fungsi ini dan tidak dapat digunakan dalam percabangan/perkondisian (seperti perkondisian "jika ini maka require file anu") , karena file yang ditunjuk akan selalu direferensi tanpa peduli kondisi struktur/aliran script. • Fungsi include() akan mengatur pembacaan file yang ditunjuk dapat sesuai dengan kondisi struktur/aliran script, sehingg fungsi ini dapat digunakan pada percabangan/perkondisian.Melihat ciri-ciri di atas, require() akan sesuai digunakan untuk mereferensi file yangberisikan variabel dan fungsi-fungsi global yang digunakan pada seluruh bagian dariscript utama. Sementara include() umumnya digunakan untuk menyisipkan kodeprogram/script atau tag HTML pada program/script utama, misalkan untuk header ataufooter setiap halaman dalam sebuah situs.Last update 5/5/2012
16. PHP? Siapa Takut! 16Catatan yang penting untuk kedua fungsi ini, parser PHP akan meninggalkan mode PHPdan kembali ke mode HTML standar pada saat membaca file yang ditunjukkan olehkedua fungsi ini. Itu sebabnya pada contoh di atas, semua file yang ditunjuk oleh fungsi-fungsi ini selalu dimulai dengan tag <?php dan diakhiri dengan tag ?> untukmengembalikan mode file ke mode script PHP.Contoh penggunaan fungsi include() yang umum untuk header dan footer padahalaman HTML. <html> <head> <title>Title Halaman</title> </head> <body> <?php include("header.html"); ?> . . . . . isi halaman HTML . . . . . <br> <?php include("footer.html"); ?> </body> </html>Dengan misalnya header.html berisi: <table width="100%" bgcolor="#A0A0A0"> <tr> <td bgcolor="#0000F0" align="center">LCAR : USS Enterprise</ td> </tr> </table>dan footer.html berisi misalkan: <table width="100%" bgcolor="#A0A0A0"> <tr> <td bgcolor="#0000F0" align="center"> <font size="-1">(c) United Federation of Planets.</font> </td>Last update 5/5/2012
17. PHP? Siapa Takut! 17 </tr> </table>Dengan struktur halaman web seperti dicontohkan ini, maka kita dapat dengan mudahmembuat keseragaman pada halaman-halaman situs/aplikasi yang kita bangun. Perubahanpada header dan footer dapat dilakukan dengan mengedit kedua file ini saja, tanpa perlumengganti semua halaman situs/aplikasi yang telah dibangun. Bayangkan jika ada 100halaman, tentu akan sangat memberikan kita waktu luang untuk bersantai daripada jikakita harus melakukan update halaman satu persatu untuk perubahan ini.Sampai di sini, kita telah belajar konsep membangun blok PHP, sedikit perintah dasarPHP untuk tampilan layar di browser, dasar-dasar variabel, operasi matematis sederhana,cara penyisipan file pada script PHP. Pengetahuan ini akan dipakai sebagai dasar untukmelanjutkan pelajaran bagaimana membuat dan mengoperasikan masukan lewat formHTML. Anda perlu bersabar menantikan bagian kedua dari tulisan ini.Last update 5/5/2012
18. PHP? Siapa Takut! 18Bagian 2: Holodeck di USS Enterprise NCC-1701DPada bagian 1 dari artikel ini, kita telah belajar mengenai variabel dan operasimatematika sederhana terhadap variabel di PHP. Konsep dasar require() daninclude() juga sudah kita kenal. Kali ini kita akan mencoba untuk melanjutkan sedikitmengenai cakupan variabel, sebelum berlanjut pada pengolahan form HTML.Bar Ten-FourtyDalam pemrograman, seringkali kita ingin menggunakan variabel dengan cakupan yangberbeda-beda. Ada variabel yang kita inginkan untuk digunakan di seluruh program atausering disebut variable global, ada variabel yang hanya ingin kita gunakan di dalamcakupan sebuah fungsi atau prosedur.Variabel dalam PHP memiliki cakupan dalam konteks variabel itu didefinisikan.Umumnya variabel PHP hanya memiliki cakupan tunggal saja. Anda tidak perlu khawatirdengan keterbatasan ini, karena ternyata kita dapat memperluas cakupan variabel denganmemanfaatkan fungsi require() dan include() yang telah kita pelajari. Untuk lebihjelas, mari kita lihat contohnya pada program coba7.php di bawah ini. <?php $bartender = "Guinan"; include ("ten_fourty_bar.inc"); ?>Dalam contoh di atas, variabel $bartender akan memiliki cakupan pada file skripten_fourty_bar.inc (atau dapat pula dilihat secara sebaliknya). Jika kita membuat fileskrip ten_fourty_bar.inc berisi perintah php seperti di bawah ini. <?php echo "Bartender di Bar Ten-Fourty saat ini adalah : $bartender"; ?>Last update 5/5/2012
19. PHP? Siapa Takut! 19Maka, hasil eksekusi program coba7.php adalah sebagai berikut Bartender di Bar Ten-Fourty saat ini adalah : GuinanNamun jika pada program ten_fourty_bar.inc dibuat sebuah fungsi, maka variabel$bartender tidak dapat mencakup ke dalam fungsi tersebut, kecuali jika $bartenderdimasukkan sebagai argumen dalam fungsi tersebut atau $bartender dalam fungsitersebut dideklarasikan sebagai variabel global dengan perintah deklarasi global ataulewat variabel $GLOBALS[]. Lebih detail mengenai penggunaan variabel dalam fungsiakan kita bahas lagi pada saat kita membicarakan mengenai perancangan fungsi.Kode program PHP disimpan sebagai sebuah file skrip. Jika aplikasi web yang kitabangun memperlakukan file-file skrip itu sebagai modul dari aplikasi, maka mungkin kitaakan mendapatkan masalah jika kita ingin menggunakan variabel lintas file skriptersebut.Kita dapat saja membuat sebuah file yang berisi nilai variabel yang akan dipanggil lintasfile. File ini kemudian selalu di-include() pada modul-modul yang membutuhkanvariabel tersebut. Namun solusi semacam ini tidak memungkinkan kita untuk melakukanperubahan dinamis pada variabel tersebut. Cara ini lebih tepat digunakan untuk konstantaglobal.Cara lain adalah dengan melewatkan (passing thru) nilai variable dari satu fileskrip/dokumen ke file skrip/dokumen lain yang dipanggil setelahnya. Terdapat dua carauntuk melakukan ini yaitu dengan: • Menambahkan langsung variabel dan nilainya pada URL file skrip atau dokumen yang dipanggil. Contohnya kita memiliki host localhost dan file yang akan dipanggil adalah deep_space_9_bar.php terletak pada direktori root. Variable $bartender dapat dikenali nilainya oleh file deep_space_9_bar.php jika kita memanggil file tersebut dengan URL : http://localhost/deep_space_9_bar.php? bartender=Guinan. Jika kita ingin melewatkan variabel lain selain $bartender, misalkan $pengisiacara="Data", maka kita dapat menambahkan URL tersebut sehingga menjadi http://localhost/deep_space_9_bar.php? bartender=Guinan&pengisiacara=Data. Antar variabel dipisahkan dengan karakter "&". • Menggunakan cara form HTML baik dengan metode POST/GET yang akan melewatkan nilai dari tag <INPUT> untuk ditangkap sebagai variabel oleh file yang dituju dalam ACTION. Lebih jelas lagi mengenai hal ini akan kita bicarakan pada saat membahas tentang form HTML.Last update 5/5/2012
20. PHP? Siapa Takut! 20PHP memiliki keunikan lain karena dapat membuat nama variabel dari nilai variabelyang lain. Lihatlah contoh berikut ini. <?php $bartender = "Guinan"; $$bartender = "Bartender Misterius"; echo "$bartender, ${$bartender}n"; echo "$bartender, $Guinann"; ?>Baris pertama adalah deklarasi variabel $bartender sekaligus pengisian nilainya dengan"Guinan", sedangkan baris yang kedua sebenarnya adalah deklarasi variabel dengan nama$Guinan yang diisi nilai "Bartender Misterius". Sekalipun perintahnya berbeda, barisketiga dan keempat memberikan hasil keluaran yang sama yaitu. Guinan, Bartender MisteriusPenulisan $$bartender dan ${$bartender} adalah variasi cara untuk menyebut variabelyang sama (dalam konteks ini adalah variabel $Guinan). Tanda kurung kurawal "{...}"akan banyak gunanya jika kita telah mulai menggunakan nama variabel dari nilai variabellain dalam larik (array) variabel. Misalnya variabel ${$bartender[1]} artinya variabeldengan nama dari isi variabel indeks 1 dari larik variabel $bartender, sedangkanvariabel ${$bartender}[1] adalah variabel indeks 1 dari larik variabel dengan namadari isi variabel $bartender.Ketika saya menuliskan paragraf di atas, saya menjadi sedikit mengkhawatirkan kondisiAnda setelah membaca kalimat terakhir saya. Pegang kening Anda, dan jika panas, Andadapat mencoba lagi membaca dan mengerti paragraf tersebut di kesempatan yang lainatau bisa juga Anda membaca keterangan berikut ini.Notasi ${$bartender[1]} artinya kita memiliki larik variabel $bartender, misalkan isi$bartender[1]="Guinan", $bartender[2]="Q", $bartender[3]="Riker", danseterusnya. Maka notasi ${$bartender[1]} yang kita maksudkan adalah variabel$Guinan bukan $Q atau pun $Riker. Pada notasi kedua yakni ${$bartender}[1] artinyakita memiliki variabel non larik $bartender yang misalkan berisi nilai "Guinan",sehingga notasi ${$bartender}[1] secara implisit berarti kita memiliki variabel larik$Guinan[1], $Guinan[2], dan seterusnya.Last update 5/5/2012
21. PHP? Siapa Takut! 21Apakah Anda telah cukup puas dengan pembahasan mengenai variabel? Jika belum puasmaka dengan sangat menyesal saya katakan bahwa saat ini tiba-tiba mood saya untukmembahas variabel telah hilang. Mood saya sekarang adalah membicarakan masalahform.Pintu Masuk Holodeck di USS EnterpriseForm merupakan cara termudah, terumum, dan tercepat untuk membuat situs web Andalebih hidup dan mampu berinteraksi dengan pengunjung yang mengaksesnya. Banyakkeuntungan yang bisa Anda dapatkan dari penggunaan form dalam dokumen HTML,misalkan Anda dapat menanyakan apakah pengunjung situs Anda menyukai produk Andaatau bahkan Anda dapat meminta kepada pengunjung wanita yang cantik untukmenuliskan nomor teleponnya bagi Anda. Tentu saja jika mereka bersedia. Mungkintidak banyak hasilnya, namun tidak ada salahnya berharap akan ada yang jatuh dalamperangkap Anda.PHP membuat hidup kita menjadi lebih mudah karena PHP dapat membuat pemrosesanform untuk mengambil data masukan dari pengguna menjadi lebih sederhana dan cepat.Jangan pernah membayangkan Anda saat ini dapat menemukan kemudahan ini padabahasa Perl atau C/C++, misalnya. Jika kebetulan suatu saat Anda menemukankemudahan ini pada Perl, sebenarnya ini bukan salah PHP, namun hanya karenakebetulan Perl yang berkembang terlalu pesat.Sebagai permulaan, Anda dapat mencoba membuat file HTML berikut ini yang dapatAnda simpan dengan nama login.html. <html> <head> <basefont face="Arial"> </head> <body> <center> <form method="GET" action="proseslogin.php"> <table cellspacing="5" cellpadding="5" border="1"> <tr> <td colspan="2" align="center"> NCC-1701D USS Enterprise<br> Fasilitas Holodeck </td> </tr> <tr> <td> <font size="-1">Silakan Masukkan Nama Anda </td>Last update 5/5/2012
22. PHP? Siapa Takut! 22 <td> <input type="text" name="namaofficer" size="20"> </td> </tr> <tr> <td colspan="2" align="center"> <input type="submit" name="loginofficer" value="Login"> </td> </tr> </table> </form> </center> </body> </html>Hal kritikal pada file di atas yang akan kita bahas adalah adalah tag <FORM>. <form method="GET" action="proseslogin.php"> ........ </form>Atribut action pada tag <FORM> menunjukkan nama dari file skrip di sisi server, yangdalam kasus kita ini akan bertugas untuk memproses informasi yang dimasukkan keform. Sementara itu atribut method akan menentukan tata cara informasi akan dilewatkanke file skrip yang ditunjuk oleh atribut action.Dalam standar HTML, dikenal dua macam method untuk memproses informasi yangdimasukkan ke form agar dapat diproses oleh file skrip yang dituju, yaitu GET dan PUT.Penggunaan GET akan menyebabkan seluruh isian form dilewatkan ke file skrip yangdituju dengan cara ditambahkan pada URL file skrip yang dituju, sementara PUT tidakakan menambahkan URL file skrip yang dituju dengan hasil isian form. Untuk lebihjelasnya, Anda bisa kembali membuka referensi standar HTML yang Anda miliki.File ini jika dipanggil lewat browser akan memberikan tampilan sebagai berikut. NCC-1701D USS Enterprise Fasilitas Holodeck Silakan Masukkan Nama AndaLast update 5/5/2012
23. PHP? Siapa Takut! 23Untuk kasus kita saat ini, kita baru setengah jalan. Kita harus membuat fileproseslogin.php yang akan menerima data isian dari file login.html. File skrip yangakan kita buat ini akan bertugas melakukan pengecekan nama officer yang akanmemasuki ruang holodeck. Berhubung sampai saat ini kita belum mempelajari mengenaipernyataan kondisional (conditional statement) dan operator logika, maka sementara inifile proseslogin.php hanya akan kita buat untuk menunjukkan kepada Anda bagaimanadata dikirimkan oleh form pada file login.html dan diproses atau digunakan pada fileproseslogin.php.Inilah file proseslogin.php yang kita akan kita buat. <html> <head> <basefont face="Arial"> </head> <body> <center> <font face="Arial" size="-1"> Hmm, pernahkah Anda berimajinasi, <? echo $namaofficer; ?> ? <P> Holodeck mampu membuat Anda berimajinasi dan menjalaninya hampir tanpa batas. <P> Anda siap memasuki holodeck? </font> </center> </body> </html> Misalkan Anda mengisikan data pada form, misalkan saja "Parto", kemudian anda tekantombol "Login", maka tampak pada browser Anda sebagai berikut. Hmm, pernahkah Anda berimajinasi, Parto ? Holodeck mampu membuat Anda berimajinasi dan menjalaninya hampir tanpa batas. Anda siap memasuki holodeck? Seperti yang Anda lihat, pada saat sebuah form dikirimkan ke sebuah skrip PHP, semuapasangan variabel dan nilainya yang ada pada form tersebut secara otomatis tersediauntuk digunakan oleh skrip PHP tersebut. Dalam contoh di atas, saat form yang ada padalogin.html dikirim, variabel $namaofficer otomatis terbentuk pada skrip PHPproseslogin.php dan variabel ini langsung terisi dengan data yang diisikan pada formoleh pengguna.Last update 5/5/2012
24. PHP? Siapa Takut! 24Jika Anda mencoba melakukan hal yang sama dengan Perl, maka Anda perlu secaraeksplisit menulis kode untuk melakukan ekstrak dan mengambil nilai dari variabel-variabel dalam form. PHP telah secara otomatis melakukan semua ini untuk Anda,sehingga kode program Anda akan lebih sederhana dan proses development aplikasimenjadi lebih cepat.Kehati-hatian Dalam MemilihSaya tidak akan mengelak jika Anda memprotes contoh di atas terlalu sederhana.Memang saat ini kita belum mulai melakukan seleksi calon pengguna holodeck. Untukdapat melakukannya, mari kita mempelajari pernyataan kondisional dan operator logika.Bentuk paling dasar dari pernyataan kondisional adalah perbandingan, misalnya "jika inisama dengan itu maka lakukan hal ini, dan seterusnya".PHP memiliki operator-operator logika yang sangat berguna untuk menyusun pernyataankondisional. Berikut ini adalah daftarnya.Misalkan $alpha=7 dan $beta=4.Operator Arti Ekspresi Hasil Evaluasi Nilai== sama dengan $alpha == $beta False!= tidak sama dengan $alpha != $beta True> lebih besar daripada $alpha > $beta True< lebih kecil daripada $alpha < $beta False>= lebih besar atau sama dengan $alpha >= $beta True<= lebih kecil atau sama dengan $alpha <= $beta FalsePHP4 juga memperkenalkan sebuah operator logika baru, yang melakukan pengecekanbaik kesamaan nilai maupun jenis nilai dari variabel. Operator ini adalah ===. Padabagian akhir bagian ini akan ditunjukkan ilustrasi penggunaan operator ini.Officer Yang Berhak Masuk HolodeckBentuk paling sederhana dari pernyataan kondisional dalam PHP adalah pernyataan "if",yang kurang lebih adalah seperti di bawah ini: if (kondisi) { lakukan hal ini!; }Last update 5/5/2012
25. PHP? Siapa Takut! 25Bagian kondisi adalah merupakan ekspresi kondisional yang akan dievaluasi apakahhasilnya true (benar) atau false (salah). Jika hasil pengecekan kondisi bernilai true, makaseluruh kode PHP yang ada dalam blok if (di antara dua kurung kurawal) akandieksekusi. Jika tidak (hasil pengecekan false), maka seluruh kode PHP dalam blok ifakan dilewati dan eksekusi program akan dilanjukan ke baris setelah blok if.Sekarang kita coba memodifikasi program proseslogin.php dengan membuat sistemvalidasi/otentikasi sederhana untuk nama officer yang diperkenankan memasukiholodeck. Misalkan akses ke holodeck hanya diperbolehkan untuk officer "Riker". <html> <head> <basefont face="Arial"> </head> <body> <center> <?php // validasi nama officer dan tampilkan pesan yang sesuai if ($namaofficer == "Riker") { ?> <font face="Arial" size="-1"> Hmm, pernahkah Anda berimajinasi, <? echo $namaofficer; ?> ? <P> Holodeck mampu membuat Anda berimajinasi dan menjalaninya hampir tanpa batas. <P> Selamat datang di holodeck USS Enterprise. <BR> Anda siap memasuki holodeck? </font> <?php } ?> <?php // jika nama officer tidak sesuai if ($namaofficer != "Riker") { ?> <font face="Arial" size="-1"> Hmm, Anda ingin berimajinasi, <? echo $namaofficer; ?> ? <P> Sayang sekali, Anda dalam tugas.Last update 5/5/2012
26. PHP? Siapa Takut! 26 <P> Anda tidak diperkenankan memasuki holodeck. </font> <?php } ?> </center> </body> </html> Anda dapat menyusun beberapa blok if secara bertumpuk (nested) untuk melakukanpenyeleksian lebih ketat terhadap beberapa kondisi. Misalkan Anda ingin mencariLeutenant Worf, Anda dapat menyusun pengkondisian seperti di bawah ini. <? if ($pekerjaan == "Officer Starfleet") { if ($pesawat == "USS Enterprise") { if ($ras == "Klingon") { $nama = "Worf"; } } } ?>Jika Tidak, Maka ...Selain bentuk "if" seperti yang telah kita pelajari, PHP juga memiliki bentuk pernyataankondisional "if-else", yang selain memiliki blok perintah PHP yang dieksekusi jikakondisi bernilai true juga memiliki blok perintah PHP yang akan dijalankan jika kondisibernilai false.Konstruksi "if-else" adalah seperti ini. if (kondisi) { lakukan hal ini!; } elseLast update 5/5/2012
27. PHP? Siapa Takut! 27 { lakukan hal itu!; } Dengan konstruksi ini, maka kita dapat membuat program proseslogin.php menjadilebih efisien daripada menggunakan dua buah blok if. <html> <head> <basefont face="Arial"> </head> <body> <center> <?php // validasi nama officer dan tampilkan pesan yang sesuai if ($namaofficer == "Riker") { ?> <font face="Arial" size="-1"> Hmm, pernahkah Anda berimajinasi, <? echo $namaofficer; ?> ? <P> Holodeck mampu membuat Anda berimajinasi dan menjalaninya hampir tanpa batas. <P> Selamat datang di holodeck USS Enterprise. <BR> Anda siap memasuki holodeck? </font> <?php } else { // jika nama officer tidak sesuai ?> <font face="Arial" size="-1"> Hmm, Anda ingin berimajinasi, <? echo $namaofficer; ?> ? <P> Sayang sekali, Anda dalam tugas. <P> Anda tidak diperkenankan memasuki holodeck. </font> <?php } ?>Last update 5/5/2012
28. PHP? Siapa Takut! 28 </center> </body> </html>Menu Harian Holodeck USS EnterprisePHP juga menyediakan bentuk pernyataan kondisional "if-elseif-else" untukmenangani kemungkinan yang lebih banyak dari pemilihan kondisi. Bentuk pernyataankondisional ini adalah seperti di bawah ini. if (kondisi pertama benar) { lakukan tindakan 1; } elseif (kondisi kedua benar) { lakukan tindakan 2; } elseif (kondisi ketiga benar) { lakukan tindakan 3; } ...... dan seterusnya ....... else { lakukan tindakan yang lain; }Mari kita lihat contoh penerapannya untuk membuat pilihan menu harian di holodeckUSS Enterprise. <html> <head> <style type="text/css"> td {font-family: Arial;} </style> </head> <body> <font face="Arial" size="+2"> Pilihan Menu Harian Holodeck USS Enterprise </font> <form method="GET" action="prosesmenu.php"> <table cellspacing="5" cellpadding="5" border="0">Last update 5/5/2012
29. PHP? Siapa Takut! 29 <tr> <td align="center"> Pilih Hari </td> <td align="right"> <select name="hari"> <option value="Senin">Senin <option value="Selasa">Selasa <option value="Rabu">Rabu <option value="Kamis">Kamis <option value="Jumat">Jumat <option value="Sabtu">Sabtu <option value="Minggu">Minggu </select> </td> </tr> <tr> <td colspan="2" align="center"> <input type="submit" value="Klik Di Sini!"> </td> </tr> </table> </form> </body> </html> Dengan skrip di atas kita bermaksud membuat pilihan menu harian di holodeck.Simpanlah skrip di atas dengan nama menu.php. Untuk dapat bekerja, perlu kita buatskrip di bawah ini, yang akan kita simpan dengan nama prosesmenu.php. <?php if ($hari == "Senin") ( $topik = "Romeo dan Juliet (Shakespeare)"; } elseif ($hari == "Selasa") ( $topik = "Petualangan Robin Hood"; } elseif ($hari == "Rabu") ( $topik = "Jurassic Park"; } elseif ($hari == "Kamis") ( $topik = "Indiana Jones"; } elseif ($hari == "Jumat")Last update 5/5/2012
30. PHP? Siapa Takut! 30 ( $topik = "Final Fantasy"; } else ( $topik = "Maaf, Holodeck USS Enterprise tutup saat weekend."; } ?> <html> <head> <basefont face="Arial"> </head> <body> Menu Petualangan Holodeck USS Enterprise<br> Hari <? echo $hari; ?> : <br> <b><? echo $topik; ?><b> </body> </html> Dengan dua skrip di atas, maka kita dapat memilih nama hari pada skrip pertama danmenekan tombol untuk mengaktifkan skrip kedua yang akan memilihkan topik holodeckuntuk hari yang dipilih. Patut diingat, bahwa begitu sebuah kondisi dalam bentuk "if-elseif-else" ditemukan bernilai true maka seluruh kode dalam blok kondisi yangtersebut akan dieksekusi, dan berikutnya aliran program akan dilanjutkan pada baris kodesetelah blok "if-elseif-else". Jadi dalam bentuk penyataan kondisional seperti initidak ada dua buah blok kondisi yang akan dijalankan secara bersamaan. Hanya kondisiyang pertama kali ditemukan bernilai true yang akan dijalankan, selebihnya akandilewatkan. Kode berikut ini akan memberi ilustrasi secara lebih baik. <?php $alpha = 12; $beta = 15; $delta = 19; $gamma = 24; $kondisi = ""; if ($alpha < $beta) { $kondisi .= "Alpha Lebih Kecil Daripada Beta <br>"; } elseif ($alpha < $delta)Last update 5/5/2012
31. PHP? Siapa Takut! 31 { $kondisi .= "Alpha Lebih Kecil Daripada Delta <br>"; } elseif ($alpha < $gamma) { $kondisi .= "Alpha Lebih Kecil Daripada Gamma <br>"; } else { $kondisi .= "Tidak Ada Kondisi Yang Sesuai <br>"; } ?> <html> <head> <basefont face="Arial"> </head> <body> <?php echo $kondisi; ?> </body> </html> Jika skrip di atas dijalankan, sebenarnya ada 3 kondisi yang bernilai true, namun padakenyataannya hanya kode pada blok kondisi pertama ($alpha < $beta) saja yangdijalankan. Dua kondisi lainnya yang juga bernilai true tidak dijalankan, karena bentuk"if-elseif-else" hanya mengeksekusi blok kondisi pertama yang ditemukan bernilaitrue. kemudian akan dilanjutkan dengan mengeksekusi baris perintah/kode setelah bentukpernyataan kondisional.Notasi $kondisi .= "bla-bla-bla" adalah notasi penyambungan sebuah untai (string).Notasi ini mirip dengan di bahasa pemrograman C/C++, dan berlaku juga untuk operatoraritmatika. Tabel berikut ini menunjukkan notasi normal dan notasi singkatannya yangberlaku di PHP.Last update 5/5/2012
32. PHP? Siapa Takut! 32Notasi Notasi KeteranganNormal Singkat$a = $a + 1 $a++ Tambahkan 1 ke $a dan simpan hasilnya di $a$a = $a + $x $a += $x Tambahkan $x ke $a dan simpan hasilnya di $a$a = $a - 1 $a-- Kurangkan 1 dari $a dan simpan hasilnya di $a$a = $a - $x $a -= $x Kurangkan $x dari $a dan simpan hasilnya di $a$a = $a . $x $a .= $x Sambungkan string $x ke string $a dan simpan hasilnya di $aDan, Atau, TidakMasih ingatkah dengan skrip mencari Worf? Mari kita lihat lagi skrip tersebut. <? if ($pekerjaan == "Officer Starfleet") { if ($pesawat == "USS Enterprise") { if ($ras == "Klingon") { $nama = "Worf"; } } } ?> Anda bisa tidak setuju dengan saya, namun sebenarnya skrip di atas terlalu kompleks dansedikit mengerikan. PHP menawarkan juga operator logika yang dapat digunakan untukmenyederhanakan skrip di atas. Tabel berikut ini akan menunjukkan operator logikadalam PHP.Operator Arti Ekspresi Hasil Evaluasi Nilai&& AND $alpha == $delta && $alpha > $beta True $alpha && $beta < $beta False|| OR $alpha == $delta || alpha < $beta True $alpha > $delta || alpha < $beta False! NOT !$alpha FalseLast update 5/5/2012
33. PHP? Siapa Takut! 33Dengan pengetahuan logika ini, maka kita bisa menulis kembali skrip pencarian Worfdengan lebih sederhana. <? if ($pekerjaan == "Officer Starfleet" && $pesawat == "USS Enterprise" && $ras == "Klingon") { $nama = "Worf"; } ?>Bukankah skrip di atas lebih sederhana?Sekali Lagi, Memilih Di Antara Banyak PilihanPHP juga menyediakan alternatif pernyataan kondisional selain dengan keluarga "if-else" yaitu bentuk "switch-case", dengan bentuk pernyataan seperti berikut ini. switch (variabel_penentu) { case (kondisi_pertama_benar) Lakukan Tindakan Untuk Kondisi Pertama; case (kondisi_kedua_benar) Lakukan Tindakan Untuk Kondisi Kedua; case (kondisi_ketiga_benar) Lakukan Tindakan Untuk Kondisi Ketiga; .............. dan seterusnya ............ } Kini kita akan mencoba menulis kembali kode program prosesmenu.php yangdigunakan untuk menampilkan menu harian holodeck. Dengan menggunakan bentuk"switch-case", skrip program akan menjadi seperti di bawah ini. <?php // variabel penentu dalam hal ini adalah $hari yang dipilih pengguna switch ($hari)Last update 5/5/2012
34. PHP? Siapa Takut! 34 { // kondisi pertama case "Senin": $topik = "Romeo dan Juliet (Shakespeare)"; break; // kondisi kedua case "Selasa": $topik = "Petualangan Robin Hood"; break; // kondisi ketiga case "Rabu": $topik = "Jurassic Park"; break; // kondisi keempat case "Kamis": $topik = "Indiana Jones"; break; // kondisi kelima case "Jumat": $topik = "Final Fantasy"; break; // jika selain kondisi yang di atas default: $topik = "Maaf, Holodeck USS Enterprise tutup saat weekend."; break; } ?> <html> <head> <basefont face="Arial"> </head> <body> Menu Petualangan Holodeck USS Enterprise<br> Hari <? echo $hari; ?> : <br> <b><? echo $topik; ?><b> </body> </html>Last update 5/5/2012
35. PHP? Siapa Takut! 35Ada beberapa kata kunci yang penting dalam penggunaan pernyataan "switch-case".Pertama adalah perintah break yang digunakan untuk keluar dari blok "switch" danmelanjutkan ke baris perintah sesudah blok tersebut setelah ditemukan sebuah kondisitrue yang pertama. Tanpa penggunaan break, maka case berikutnya akan kembalidievaluasi walaupun telah case sebelumnya telah ditemukan bernilai true. Kata defaultdigunakan untuk "menangkap" kondisi dimana nilai variable penentu tidak memenuhisemua kriteria/kondisi pada case-case yang ada.Bersatu Kita TeguhSampai sejauh ini, program pengolahan form yang kita buat selalu menggunakan duahalaman web yaitu satu halaman HTML yang berisi form dan satu lagi adalah halamanskrip PHP untuk memproses masukan form dan menghasilkan keluaran yang sesuai. PHPsesungguhnya menyediakan cara yang lebih baik untuk dapat menggabungkan duahalaman tersebut menjadi satu halaman saja, dengan cara menangkap nilai dari variabelyang dikirimkan oleh tombol pemroses di form.Telah kita ketahui bahwa saat form dikirimkan ke skrip PHP, seluruh variabel form akanmenjadi tersedia dalam lingkungan skrip PHP. Tombol pemroses, juga akan mengirimkannilai dari variabel sesuai namanya, jika tombol pemroses ini ditekan dengan tujuanmengirimkan isian form. Dengan melakukan pengecekan terhadap ada tidaknya nilaivariabel dari tombol pemroses, maka programmer dapat menggunakan file PHP tunggaluntuk menghasilkan baik form isian maupun keluarannya jika isi form dikirimkan.Mari kita coba menggabungkan dua halaman menjadi satu halaman skrip PHP dalamkasus menu harian holodeck. Berikut ini adalah skrip gabungannya, misalkan kita simpandalam nama menu.php. <?php if (!$proses) { // jika $proses tidak memiliki nilai, artinya adalah // form tidak dalam proses pengiriman, maka skrip akan // menampilkan form isian. ?> <html> <head> <style type="text/css"> td {font-family: Arial;} </style> </head> <body>Last update 5/5/2012
36. PHP? Siapa Takut! 36 <font face="Arial" size="+2"> Pilihan Menu Harian Holodeck USS Enterprise </font> <form method="GET" action="<? echo $PHP_SELF; ?>"> <table cellspacing="5" cellpadding="5" border="0"> <tr> <td align="center"> Pilih Hari </td> <td align="right"> <select name="hari"> <option value="Senin">Senin <option value="Selasa">Selasa <option value="Rabu">Rabu <option value="Kamis">Kamis <option value="Jumat">Jumat <option value="Sabtu">Sabtu <option value="Minggu">Minggu </select> </td> </tr> <tr> <td colspan="2" align="center"> <input type="submit" name="proses" value="Klik Di Sini!"> </td> </tr> </table> </form> </body> </html> <?php } else { // jika $proses memiliki nilai, berarti data isian // form sedang dikirim, maka skrip akan memproses // isian form. // variabel penentu dalam hal ini adalah $hari yang dipilih pengguna switch ($hari) {Last update 5/5/2012
37. PHP? Siapa Takut! 37 // kondisi pertama case "Senin": $topik = "Romeo dan Juliet (Shakespeare)"; break; // kondisi kedua case "Selasa": $topik = "Petualangan Robin Hood"; break; // kondisi ketiga case "Rabu": $topik = "Jurassic Park"; break; // kondisi keempat case "Kamis": $topik = "Indiana Jones"; break; // kondisi kelima case "Jumat": $topik = "Final Fantasy"; break; // jika selain kondisi yang di atas default: $topik = "Maaf, Holodeck USS Enterprise tutup saat weekend."; break; } ?> <html> <head> <basefont face="Arial"> </head> <body> Menu Petualangan Holodeck USS Enterprise<br> Hari <? echo $hari; ?> : <br> <b><? echo $topik; ?><b> </body> </html> <?php } ?>Last update 5/5/2012
38. PHP? Siapa Takut! 38 Dengan skrip di atas, maka baik form maupun proses untuk dapat menghasilkan keluarandapat disatukan dalam satu halaman skrip PHP. Variabel $proses adalah variabel yangdihasilkan jika tombol pemroses ditekan. Ada tidaknya nilai variabel ini yang akanmenentukan apakah skrip ini memberikan keluaran berupa form ataukah akan memproseshasil isian form.Untuk agar form yang dikirim dapat menghasilkan variabel $proses pada lingkunganskrip PHP, maka perlu dilakukan perubahan pada tag HTML untuk tombol submit, yaitudari: <input type="submit" value="Klik Di Sini!">menjadi perlu ditambah atribut name seperti berikut ini. <input type="submit" name="proses" value="Klik Di Sini!"> Hal lain yang patut dicermati adalah pada tag <form>. Alih-alih menggunakan atributaction="menu.php", kita dapat menggunakan variabel pre-defined PHP yaitu$PHP_SELF yang akan secara tepat menunjukkan bahwa skrip yang dituju adalah skrip itusendiri. Dengan demikian, perubahan nama file menu.php menjadi nama yang lain, tidakmenyebabkan kita perlu memodifikasi atribut action pada tag <form>. Bentuk dari tag<form> menjadi seperti berikut ini. <form method="GET" action="<? echo $PHP_SELF; ?>">Catatan TambahanOperator ===Berikut ini adalah contoh penggunaan operator === yang berfungsi untuk melakukanpengecekan variabel apakah memiliki nilai dan jenis yang sama. <?php if (!$proses) { // jika nilai variabel $proses tidak ada, maka // tampilkan halaman pertama (form isian) ?> <html> <head> <style type="text/css"> td {font-family: Arial;} </style> </head>Last update 5/5/2012
39. PHP? Siapa Takut! 39 <body> <form method="GET" action="<? echo $PHP_SELF; ?>"> <table cellspacing="5" cellpadding="5" border="0"> <tr> <td align="center"> Masukkan Sesuatu! </td> <td align="right"> <input type="text" name="var1"> </td> </tr> <tr> <td align="center"> Masukkan Yang Lainnya! </td> <td align="right"> <input type="text" name="var2"> </td> </tr> <tr> <td colspan="2" align="center"> <input type="submit" name="proses" value="Test Variabel"> </td> </tr> </table> </form> </body> </html> <?php } else { // jika nilai variabel $proses ada, maka lakukan pemrosesan // terhadap isian form if ($var1 === $var2) { $hasil = "Kedua variabel identik dan berjenis sama." } elseLast update 5/5/2012
40. PHP? Siapa Takut! 40 { $hasil = "Kedua variabel tidak identik dan/atau tidak berjenis sama." } ?> <html> <head> <basefont face="Arial"> </head> <body> <b><? echo $hasil; ?></b> </body> </html> <?php } ?>Alternatif PenulisanPHP juga mendukung alternatif cara penulisan (syntax) untuk struktur kontrol yang telahkita bicarakan. Anda dapat menuliskan kode dengan cara seperti ini. <?php if ($warp == 0) { echo "Mesin Warp Tidak Diaktifkan."; } else { echo "Mesin Warp Sedang Diaktifkan."; } ?> atau Anda dapat menuliskan seperti ini <?php if ($warp == 0): echo "Mesin Warp Tidak Diaktifkan."; else:Last update 5/5/2012
41. PHP? Siapa Takut! 41 echo "Mesin Warp Sedang Diaktifkan."; endif; ?> Alternatif kedua sama saja dengan yang pertama, dan secara sederhana dibuat denganmengganti tanda kurung kurawal pertama pada setiap pasangan dengan tanda colon/titikdua [:], menghapus tanda kurung kurawal kedua, dan mengakhiri seluruh blok dengansebuah perintah "endif".Baiklah, cukup dahulu bagian kedua dari pelajaran dasar PHP ini. Selanjutnya, kita akanbelajar melakukan perulangan, sedikit tentang array, dan lebih jauh mengenai form.Jangan sampai ketinggalan!Last update 5/5/2012
42. PHP? Siapa Takut! 42Bagian 3: Esok Adalah Kemarin *)*) Salah satu judul episode Star Trek: The Next Generation (Tomorrow is Yesterday).Berputar-putar, Berulang-ulangOke, saya mengerti kebingungan Anda ketika membaca judul di atas. Saya punya sedikitsaran untuk Anda untuk tidak mencoba terlalu serius memahami arti dari sub judul diatas. Lebih baik kita berkonsentrasi kepada bahasannya, karena saya memiliki sedikitrahasia untuk Anda; saya tidak pernah terlalu peduli pada judul yang saya buat sendiri.Apalah arti sebuah judul.Pada bagian yang terdahulu, kita telah mempelajari pernyataan kondisional dan operator,baik operator aritmatik maupun operator logika dalam PHP.Anda juga telah belajarbagaimana PHP dapat memproses data yang dimasukkan melalui form HTML. Sekarangkita akan mempelajari lebih dalam lagi dalam topik pemrosesan form dengan fokusbagaimana PHP menangani elemen-elemen form seperti list (daftar), radio button(tombol radio) dan checkbox (kotak cek), termasuk pemahaman mengenai variabel array(larik).Tanpa banyak pengantar lagi, langsung saja kita mulai dengan melihat bentuk-bentukperulangan (loop) dalam PHP. Warp Nine and engaged!.Kembali ke Masa Depan, Menuju Masa LampauPerulangan (loop) adalah sebuah struktur kontrol dalam program yang memungkinkankita untuk mengulangi eksekusi kumpulan pernyataan/kode/perintah PHP yang sama.Pengulangan ini dapat terjadi secara tidak terbatas, namun tentu kita masih cukup sehatuntuk tidak membuat aplikasi yang tidak pernah selesai karena tidak pernah berhentimengulangi suatu bagian kode PHP. Oleh karena itu, kita akan mempelajari carapembatasan perulangan bagian kode dalam PHP.Kita dapat membatasi perulangan eksekusi perintah PHP ini dengan kondisi yang kitatetapkan sendiri, atau dengan memberikan jumlah perulangan yang kita ingin lakukan.Model/bentuk perulangan dalam PHP tidak hanya satu macam, kita akan mencobamembahas satu per satu.Bentuk paling sederhana dari perulangan dalam PHP adalah perulangan dengan perintah"while". Berikut adalah notasinya.Last update 5/5/2012
43. PHP? Siapa Takut! 43 while ( kondisi ) { lakukan hal ini!; }Contoh nyata dalam kegiatan harian Anda misalnya. while ( bak mandi belum penuh ) { timbalah air untuk mengisi bak mandi!; } Dalam bentuk perulangan while, sepanjang kondisi yang dievaluasi menghasilkan nilaitrue, maka seluruh perintah PHP yang berada di antara tanda kurung kurawal (blokperintah PHP) akan dieksekusi secara berulang. Perulangan eksekusi perintah ini baruberakhir jika kondisi yang dievaluasi memberikan nilai false, dan perintah PHP setelahblok perulangan akan dijalankan.Untuk contoh kegiatan harian Anda di atas, sepanjang bak mandi masih berada dalamkondisi belum penuh (evaluasi kondisi menghasilkan true), maka Anda wajib terusmenimba air mengisi bak mandi. Anda baru diperkenankan berhenti menimba air jika bakmandi yang Anda isi telah penuh (evaluasi kondisi menghasilkan false). Anda dapatberdoa semoga bak mandi Anda tidak terlalu besar ukurannya dan sumur Anda tidakterlalu dalam.Mari kita coba mengoperasikan sebuah mesin waktu sederhana yang memberikangambaran penerapan perulangan while. <?php // jika form tidak dalam kondisi submit, tampilkan form awal. if (!$proses) { ?> <html> <head> </head> <body> <h2>Federasi Planet - Mesin Waktu Versi 1.0</h2>Last update 5/5/2012
44. PHP? Siapa Takut! 44 <form action="<? echo $PHP_SELF; ?>" method="POST"> Selamat Datang di Mesin Waktu Versi 1.0.<br> Mesin ini bekerja dengan menggunakan partikel chronometer,<br> dan akan membawa Anda ke masa mana pun yang Anda inginkan.<br> Jika Anda menemukan <i>bug</i> saat mencoba mesin waktu ini,<br> segera laporkan masalah tersebut ke Pusat Penelitian Federasi Planet,<br> begitu Anda berhasil kembali ke masa Anda seharusnya.<br> Jika Anda tidak berhasil kembali, berdoalah agar kami mengembalikan Anda. <p> Pilih Tahun Tujuan Anda : <input type="text" name="tahun" size="4" maxlength="4"> <input type="submit" name="proses" value="Berangkat"> </p> </form> </body> </html> <?php } else // jika form dalam kondisi submit, proses isian form. { ?> <html> <head> </head> <body> <?php // tahun ini adalah ... $tahun_ini = 2002; // cek tahun tujuan if ($tahun > $tahun_ini) { echo "<b>Menuju ke masa depan...</b><br>"; // gunakan while untuk mencetak urutan angka tahun dari // masa kini ke masa depan yang dituju.Last update 5/5/2012
45. PHP? Siapa Takut! 45 while ($tahun_ini < $tahun) { echo "Saat ini tahun : $tahun_ini.<br>"; $tahun_ini++; } echo "Anda sampai ke masa depan, tahun : $tahun, selamat menikmati.<br>"; } else { echo "<b>Menuju ke masa lampau...</b><br>"; // gunakan while untuk mencetak urutan angka tahun dari // masa kini ke masa lampau yang dituju. while ($tahun_ini > $tahun) { echo "Saat ini tahun : $tahun_ini.<br>"; $tahun_ini--; } echo "Anda sampai ke masa lampau, tahun : $tahun, selamat menikmati.<br>"; } ?> </body> </html> <?php } ?> Dalam kasus di atas, pertama program mesin waktu akan menanyakan tahun tujuanperjalanan kepada pengguna. Tahun tujuan ini disimpan dalam variabel $tahun dan akandikirimkan oleh form HTML ke untuk diproses dalam skrip PHP. Skrip PHP akanmenguji jika tahun yang dituju adalah di masa depan, maka bentuk perulangan whileakan bekerja menghitung maju angka tahun, dengan menambah variabel $tahun_ini(yang awalnya $tahun_ini=2002) sampai nilai $tahun_ini sama dengan $tahun, jikatidak, maka bentuk perulangan while akan bekerja menghitung mundur angka tahun,dengan mengurangi variabel $tahun_ini sampai nilai $tahun_ini sama dengan $tahun.Last update 5/5/2012
46. PHP? Siapa Takut! 46Catatan di sini, kita menggunakan variabel $proses agar kita dapat menyatukan formisian awal dengan skrip PHP untuk memproses masukan form dalam satu file skrip.Mengenai hal ini, telah dibahas di bagian sebelum ini.Paling Tidak, Lakukan Sekali Saja...Bentuk perulangan while akan mengulang eksekusi kumpulan perintah-perintah PHPsampai kondisi yang disyaratkan terpenuhi. Pertanyaannya, bagaimana jika dari awalperulangan (iterasi pertama) kondisi yang disyaratkan telah terpenuhi? Dalam contoh diatas, sebagai contohnya, jika Anda memasukkan tahun tujuan 2002, maka perulanganwhile di atas tidak akan dilaksanakan walau sekali pun. Bagaimana jika kita inginmemaksa program PHP kita melakukan perulangan atau eksekusi blok while walaupunhanya sekali saja?Anda bisa merasa lega, karena PHP menyediakan bentuk perulangan do-while untukmemenuhi keinginan Anda. Notasi dari bentuk perulangan ini adalah sebagai berikut. do { lakukan ini!; } while (kondisi);Mari kita coba skrip di bawah ini. <?php $hitung = 255; while ($hitung == 350) { echo "Perhitungan Tercapai"; break; } ?> Berapa kali pun kita menjalankan skrip di atas, tidak akan pernah kita dapatkan hasilyang tampil di layar/browser. Hal ini terjadi karena pada saat while melakukan evaluasikondisi untuk pertama kali hasilnya adalah false, sehingga blok while tidak pernah akandieksekusi. Berbeda dengan jika kita menulis skrip PHP sebagai berikut. <?php $hitung = 255; doLast update 5/5/2012
47. PHP? Siapa Takut! 47 { echo "Perhitungan Tercapai"; break; } while ($hitung == 350); ?> Ketika skrip ini dijalankan, maka kita akan mendapatkan tampilan satu baris"Perhitungan Tercapai", karena dengan bentuk do-while, bagian/blok yang akandieksekusi secara berulang akan dijalankan terlebih dahulu untuk kemudian di akhirbagian/blok, kondisi yang disyaratkan akan dievaluasi. Hasil evaluasi menentukan apakahbagian/blok tersebut akan dieksekusi ulang atau tidak. Hal ini mengakibatkan bagian/blokperulangan dalam bentuk do-while akan selalu dijalankan, setidaknya sekali saja.Berikut ini, kita akan memodifikasi mesin waktu kita dengan mengganti bentukperulangan while menjadi bentuk do-while. <?php // jika form tidak dalam kondisi submit, tampilkan form awal. if (!$proses) { ?> <html> <head> </head> <body> <h2>Federasi Planet - Mesin Waktu Versi 1.0</h2> <form action="<? echo $PHP_SELF; ?>" method="POST"> Selamat Datang di Mesin Waktu Versi 1.0.<br> Mesin ini bekerja dengan menggunakan partikel chronometer,<br> dan akan membawa Anda ke masa mana pun yang Anda inginkan.<br> Jika Anda menemukan <i>bug</i> saat mencoba mesin waktu ini,<br> segera laporkan masalah tersebut ke Pusat Penelitian Federasi Planet,<br> begitu Anda berhasil kembali ke masa Anda seharusnya.<br> Jika Anda tidak berhasil kembali, berdoalah agar kami mengembalikan Anda. <p> Pilih Tahun Tujuan Anda : <input type="text" name="tahun" size="4" maxlength="4"> <input type="submit" name="proses" value="Berangkat">Last update 5/5/2012
48. PHP? Siapa Takut! 48 </p> </form> </body> </html> <?php } else // jika form dalam kondisi submit, proses isian form. { ?> <html> <head> </head> <body> <?php // tahun ini adalah ... $tahun_ini = 2002; // cek tahun tujuan if ($tahun > $tahun_ini) { echo "<b>Menuju ke masa depan...</b><br>"; // gunakan while untuk mencetak urutan angka tahun dari // masa kini ke masa depan yang dituju. while ($tahun_ini < $tahun) { echo "Saat ini tahun : $tahun_ini.<br>"; $tahun_ini++; } echo "Anda sampai ke masa depan, tahun : $tahun, selamat menikmati.<br>"; } else { echo "<b>Menuju ke masa lampau...</b><br>";Last update 5/5/2012
49. PHP? Siapa Takut! 49 // gunakan do-while untuk mencetak urutan angka tahun dari // masa kini ke masa lampau yang dituju. do { echo "Saat ini tahun : $tahun_ini.<br>"; $tahun_ini--; } while ($tahun_ini > $tahun); echo "Anda sampai ke masa lampau, tahun : $tahun, selamat menikmati.<br>"; } ?> </body> </html> <?php } ?> Bagian yang kita modifikasi adalah bagian yang ditampilkan dengan huruf tebal (bold).Modifikasi hanya dilakukan pada bagian yang berfungsi menghitung mundur (kembali kemasa lampau), karena bagian inilah yang akan dijalankan jika isian tahun tujuan samadengan tahun ini (2002).Bermain Dengan Bilangan TertentuBentuk perulangan while dan do-while membatasi perulangan berdasarkan kondisi yangdievaluasi, sementara dalam kenyataannya seringkali kita membutuhkan perulangandalam jumlah yang tertentu. Jika kita ingin mencetak deretan angka dari 1 sampai 100,atau ingin mencetak tag untuk tabel secara berulang dan teratur dalam jumlah pasti.Untuk kebutuhan ini, maka PHP menyediakan bentuk perulangan for yang lebih praktisbagi Anda, programmer PHP yang handal.Berikut ini adalah notasi dari bentuk perulangan for. for (nilai awal dari pencacah; kondisi batas; update pencacah) { lakukan hal ini!; }Last update 5/5/2012
50. PHP? Siapa Takut! 50Pencacah (counter) adalah sebuah variabel PHP yang akan diinisiasi dengan nilai awal,kemudian diupdate nilainya sampai kondisi batas tercapai. Sebagai contoh, jika Andaingin melakukan perulangan dengan variabel pencacah $ulang, dari nilai pencacah awal= 0 sampai nilai pencacah = 5 dengan kenaikan pencacah = 1, maka notasinya perulanganmenjadi sebagai berikut. for ($ulang = 0; $ulang <= 5; $ulang++) { lakukan hal ini!; } Perulangan akan berlangsung selama variabel $ulang <= 5 dan pada setiap perulanganvariabel tersebut akan diupdate dengan pertambahan nilai sebesar 1 (notasi $ulang++).Jika nilai variabel $ulang telah lebih besar dari 5, maka perulangan berakhir dan programakan diteruskan untuk mengeksekusi baris perintah setelah blok for.Mari kita lihat bagaimana bentuk perulangan ini dapat berguna. <html> <head> <title>Perulangan Dengan For</title> </head> <body> <center> Menghitung Perkalian 9 dari bilangan 1 sampai 20.<br> </center> <?php // Tentukan bilangan pengali $faktorpengali = 9; // Gunakan perulangan for dari 1 sampai 20 for ($ulang = 1; $ulang <= 20; $ulang++) { echo "$faktorpengali x $ulang = ". ($faktorpengali * $ulang)."<br>"; } ?> </body> </html> Skrip di atas akan membuat daftar perkalian bilangan 1 sampai 20 dengan faktor pengali9. Pengendalian jumlah perulangan ini akan sangat bermanfaat ketika kita akan membuattabel pada halaman HTML. Misalkan sekarang kita ingin membuat tabel yang terdiri dari5 kolom dan 4 baris, maka dengan menggunakan dua buah perintah perulangan for yangLast update 5/5/2012
51. PHP? Siapa Takut! 51bertumpuk (nested) segalanya akan menjadi lebih mudah. Lihatlah contoh skrip berikutini. <html> <head> <title>Perulangan Dengan For (2)</title> </head> <body> <center> Membuat Tabel 5 kolom x 4 baris.<br> <table border=1> <?php // Membuat tabel 5 kolom x 4 Baris memerlukan dua buah. // bentuk perulangan For yang bertumpuk. // Perulangan For yang pertama akan digunakan untuk // Membuat baris dengan perintah <tr> yang // pada setiap baris tersebut akan diisi dengan kolom // yang dibuat dengan menggunakan perulangan For yang // kedua dengan perintah <td>. for ($baris=1; $baris<=4; $baris++) { // perulangan pertama untuk baris ?> <tr> <?php for ($kolom=1; $kolom<=5; $kolom++) { // perulangan kedua untuk kolom ?> <td> <?php echo "baris $baris, kolom $kolom"; ?> </td>Last update 5/5/2012
52. PHP? Siapa Takut! 52 <?php } ?> </tr> <?php } ?> </table> </center> </body> </html>Hasilnya skrip di atas adalah sebagai berikut Membuat Tabel 5 kolom x 4 baris. baris 1, kolom 1 baris 1, kolom 2 baris 1, kolom 3 baris 1, kolom 4 baris 1, kolom 5 baris 2, kolom 1 baris 2, kolom 2 baris 2, kolom 3 baris 2, kolom 4 baris 2, kolom 5 baris 3, kolom 1 baris 3, kolom 2 baris 3, kolom 3 baris 3, kolom 4 baris 3, kolom 5 baris 4, kolom 1 baris 4, kolom 2 baris 4, kolom 3 baris 4, kolom 4 baris 4, kolom 5Sampai di sini, Anda perlu diberikan ucapan selamat, karena telah mendapat lagitambahan bekal penting untuk menjadi seorang programmer PHP. Pada perancanganhalaman HTML, tabel memegang peranan yang sangat penting untuk menentukan tataletak komponen dan informasi. Sekarang Anda telah dapat membuat tabel di halamanHTML tidak dengan cara-cara yang menjemukan, namun dengan pemrograman melaluiPHP. Siap untuk melanjutkan?Ada Yang Mau Es Jeruk?Selain dengan bentuk perulangan for seperti yang telah Anda kenal, PHP juga denganbaik hatinya menawarkan bentuk perulangan foreach, yang didesain untuk digunakandengan peubah/variabel array/larik. Variabel array, makhluk apa lagi ini?Baiklah, secara logis memang sebelum membahas mengenai foreach, kita harusmempelajari dahulu mengenai variabel array, dan hal itu yang memang akan kitalakukan. Sebuah bukti bahwa kita semua benar-benar diperbudak oleh logika pemikiranstandar. Apa boleh buat.Sampai saat ini, Anda mungkin baru mengenal variabel yang hanya memiliki satu nilaisaja, misalnya $minuman = "Es Teh". Bagaimana jika kita ingin memiliki variabel yangLast update 5/5/2012
53. PHP? Siapa Takut! 53menampung berbagai jenis dari minuman? Di sinilah baru kita perlu memohon bantuankepada variabel array/larik. Berikut adalah contohnya. $minuman = array("Es Teh", "Es Jeruk", "Es Cendol", "Es Degan", "Es Kolak"); Kini variabel $minuman adalah variabel array, yang berisi nilai "Es Teh", "Es Jeruk", "EsCendol", "Es Degan", dan "Es Kolak". Anda tentu bisa membuat contoh lain dari variabelarray, misalkan untuk mendaftar nama-nama mantan pacar dahulu.Setiap nilai dari variabel array dapat diakses melalui nomor indeksnya, di mana secaraalamiah elemen/nilai pertama dimulai dengan 0 (nol). Sehingga jika kita ingin mengaksesnilai "Es Teh", maka notasinya adalah $minuman[0]dan nilai "Es Kolak" dapat diakses dengan notasi $minuman[4] Sama seperti variabel tunggal biasa, penamaan variabel array juga harus dimulai dengantanda $ sebagai tanda variabel dan harus diawali dengan huruf dan dapat diikuti denganhuruf dan angka.Seperti telah Anda lihat, kita dapat mendefinisikan variabel array sekaligus memberielemen/nilai dengan perintah/fungsi array(), namun Anda juga memiliki alternatif laindalam mendefinisikan setiap elemen/nilai untuk setiap notasi indeks, seperti cara berikut. $minuman[0] = "Es Teh"; $minuman[1] = "Es Jeruk"; $minuman[2] = "Es Cendol"; $minuman[3] = "Es Degan"; $minuman[4] = "Es Kolak";Nah, apakah masih ada yang mau es jeruk?Tambahkan Yang Baru atau Ganti SajaSuatu saat bisa saja Anda ingin menambah jenis minuman dalam variabel array kita,contohlah Anda ingin menambahkan "Es Blewah", maka Anda dapat menambahkannyasebagai elemen/nilai dengan indeks yang baru, seperti pada contoh berikut. $minuman[5] = "Es Blewah";Maka variable array kita akan menjadi seperti ini.Last update 5/5/2012
54. PHP? Siapa Takut! 54 $minuman = array("Es Teh", "Es Jeruk", "Es Cendol", "Es Degan", "Es Kolak", "Es Blewah");Untuk memodifikasi atau mengganti nilai/element dari variabel array secara mudah dansederhana Anda tinggal memberikan nilai baru untuk indeks array yang ingin kita ganti.Misalkan Anda ingin mengganti "Es Cendol" menjadi "Es Dawet", maka tinggal ada tulissebagai berikut. $minuman[2] = "Es Dawet";Sehingga susunan variabel array menjadi seperti di bawah ini. $minuman = array("Es Teh", "Es Jeruk", "Es Dawet", "Es Degan", "Es Kolak", "Es Blewah"); Variabel array dalam PHP dapat menyimpan baik data string maupun numerik, bahkandalam sebuah variabel array yang sama dapat ditampung dua jenis data tersebut. Tidaksetiap bahasa pemrograman memiliki kemewahan seperti ini.Indeks elemen pada variabel array yang telah kita bahas di atas semuanya berbentuknumerik, namun sesungguhnya PHP menawarkan lebih dari itu. Kita dapat secara bebasmenentukan bentuk indeks dari elemen, misalnya seperti berikut ini. $minuman[satu] = "Es Teh"; $minuman[dua] = "Es Jeruk"; $minuman[tiga] = "Es Cendol"; $minuman[favorit] = "Es Degan"; $minuman[tidaklaku] = "Es Kolak"; Lebih jauh mengenai variabel array akan dibahas lagi artikel khusus mengenai operasivariabel array.Sekarang Anda dapat mencoba membuat skrip PHP yang memanfaatkan variabel array,masih dengan film favorit kita, Star Trek. <html> <head> <title>Kapal Perang Dalam Star Trek</title> <base font face="Arial"> </head> <body> <?php // Definisikan Variabel Array $ufp_ship = array("USS Enterprise", "USS Voyager", "USS Reliant", "USS Defiant");Last update 5/5/2012
55. PHP? Siapa Takut! 55 $klingon_ship = array("Brel","Ktinga","Ktanco","KVort"); ?> <p> Kapal Perang milik United Federation of Planets (UFP) antara lain: <ul> <?php for ($i=0; $i<sizeof($ufp_ship); $i++) { echo "<li>".$ufp_ship[$i]; } ?> </ul> <p> Kapal Perang milik Kerajaan Klingon antara lain: <ul> <?php for ($j=0; $j<sizeof($klingon_ship); $j++) { echo "<li>".$klingon_ship[$j]; } ?> </ul> </body> </html> Dalam skrip PHP di atas, mula-mula kita mendefinisikan dua buah variabel array danmenggunakan perulangan for terhadap masing-masing variabel array tersebut,mengekstrak dengan menggunakan notasi indeks dan menampilkan satu-persatu isivariabel array tersebut. Untuk membatasi jumlah perulangan agar sesuai dengan jumlahelemen pada variabel array, digunakan fungsi sizeof() yang menghasilkan jumlahelemen dari sebuah variabel array.Hmm, Suara Apa Itu?Baiklah, jika Anda sudah mulai lelah belajar array, sekaranglah saatnya untuk mengenalperintah perulangan foreach yang konon khusus digunakan untuk jenis variabel array.Hikayat lain mengenai foreach ini adalah bahwa fungsi ini tiruan dari fungsi dengannama yang sama di bahasa Perl yang menakutkan itu. Struktur dari perulangan ini adalahsebagai berikut.Last update 5/5/2012
56. PHP? Siapa Takut! 56 foreach ($array as $temp) { lakukan hal ini!; } Bingung? Jangan khawatir, banyak yang mengalami hal yang serupa. Coba kitaterjemahkan maksud struktur di atas dalam bahasa kita, maka bunyinya kurang lebihadalah "ambil setiap element dari variabel array $array, letakkan dalam variabel$temp, lakukan kumpulan perintah-perintah di antara tanda kurung kurawal({ ... }) dengan menggunakan variabel $temp".Mari kita modifikasi skrip PHP terakhir kita dengan menggunakan perulangan foreachuntuk menggantikan perulangan for. Skrip kita akan tampak seperti berikut ini. <html> <head> <title>Kapal Perang Dalam Star Trek</title> <base font face="Arial"> </head> <body> <?php // Definisikan Variabel Array $ufp_ship = array("USS Enterprise", "USS Voyager", "USS Reliant", "USS Defiant"); $klingon_ship = array("Brel","Ktinga","Ktanco","KVort"); ?> <p> Kapal Perang milik United Federation of Planets (UFP) antara lain: <ul> <?php foreach ($ufp_ship as $ship) { echo "<li>".$ship; } ?> </ul> <p> Kapal Perang milik Kerajaan Klingon antara lain: <ul> <?phpLast update 5/5/2012
57. PHP? Siapa Takut! 57 foreach ($klingon_ship as $ship) { echo "<li>".$ship; } ?> </ul> </body> </html> Entah Anda rasakan atau tidak, tapi dengan perulangan foreach ini, skrip PHP kitaterlihat lebih sederhana dan lebih rapi, sehingga jika tidak dibutuhkan bilangan pencacahdalam perulangan yang Anda lakukan, Anda dianjurkan menggunakan perulanganforeach jika bekerja dengan variabel array.Berikan Pilihan, Atau Tidak Sama SekaliDunia ini penuh dengan pilihan, Anda setuju dengan saya bukan? Namun pilihan yangterlalu bebas kadang kala dapat menjadi suatu hal yang sulit. Jika seluruh mobil mewahdi dunia ini bisa Anda miliki dengan gratis, tentu Anda akan sulit memilih antara BMW,Mercedes, Ferrari, Audi, atau bahkan Rolls-Royce. Untunglah, pilihan kita umumnyaterbatas, sehingga kemungkinan saat ini Anda cuma memiliki pilihan beberapa mobil sajayang dapat Anda beli, atau mungkin malah tidak ada sama sekali. Jika Anda ada padakondisi terakhir, berarti hidup Anda sangat tidak rumit dan pelik. Bersyukurlah.Dalam membuat sebuah aplikasi maupun halaman berbasis web yang dinamis, seringAnda harus memberikan pilihan yang terbatas. Selain untuk membantu pengguna dalammengoperasikan fungsi aplikasi, juga dimaksudkan agar integritas dan keseragaman datadapat terpenuhi.Bayangkan jika Anda tidak memberikan pilihan terbatas waktu bertanya makanan favoritkepada pengguna aplikasi, untuk jawaban "nasi soto" saja, Anda mungkin akan variasimasukan pengguna berupa "nasi + soto", "soto dan nasi", "nasi dengan soto", "soto pakainasi", atau mungkin "soto campur nasi". Padahal maksud sama. Bayangkan jika jawabanini akan disimpan dalam basis data, betapa sulitnya pencarian orang-orang yangmenggemari nasi soto.Anda dapat menyederhanakan masalah ini dengan menyediakan pilihan bagi pengguna.Pilihan dapat diberikan dalam bentuk komponen dari <form> antara lain: • Tombol Radio (radio button), untuk jawaban tunggal dari beberapa pilihan, dengan tag html: <input type="radio" ..... >Last update 5/5/2012
58. PHP? Siapa Takut! 58 • Kotak Cek (check box), untuk jawaban jamak dari beberapa pilihan, dengan tag html: <input type="checkbox" ..... > • Kotak Kombo (combo box), untuk jawaban tunggal dari beberapa pilihan, dengan tag html: <select ... > <option ... > ... </option> ...... </select> • Kotak Daftar (list box), untuk jawaban jamak dari beberapa pilihan. <select ... size="x" multiple> <option ... > ... </option> ...... </select> Dengan x adalah jumlah daftar yang tampak di layar, atau tinggi dari kotak daftar, multiple menunjukkan bahwa pilihan jamak atau lebih dari satu diperbolehkan.Mari kita coba lihat contoh penerapan untuk tombol radio. Dalam hal ini, kita tidakmembutuhkan sama variabel array dan perulangan. <html> <head> <title>Contoh Penggunaan Tombol Radio</title> </head> <body> <?php if (!$kirim) { // Tampilkan form dan pilihan ?> <form action="<?php echo $PHP_SELF ?>" method="GET"> Apakah Minuman Favorit Captain Jean Luc Piccard?<br> <input type="radio" name="minfav" value="Wedang Ronde">Wedang Ronde<br> <input type="radio" name="minfav" value="Wedang Ronde">Earl Green Tea<br> <input type="radio" name="minfav" value="WedangLast update 5/5/2012
59. PHP? Siapa Takut! 59 Ronde">Scotch<br> <input type="radio" name="minfav" value="Wedang Ronde">Red Wine<br> <br> <input type="submit" name="kirim" value="Pilih"> </form> <?php } else { // jika telah dipilih, tampilkan yang dipilih ?> Minuman Favorit Captain Jean Luc Piccard menurut pilihan Anda adalah: <br> <b><?php echo $minfav ?></b> <?php } ?> </body> </html>Penggunaan kotak cek membutuhkan variable array dan berikut ini adalah contohpenerapannya untuk jawaban jamak dari pilihan yang ada. <html> <head> <title>Contoh Penggunaan Kotak Cek</title> </head> <body> <?php if (!$kirim) { // Tampilkan form dan pilihan ?> <form action="<?php echo $PHP_SELF ?>" method="GET"> Siapa Tokoh Favorit Anda dalam Star Trek: The Next Generation?<br> <input type="checkbox" name="charfav[]" value="Jean Luc Piccard">Jean Luc Piccard<br> <input type="checkbox" name="charfav[]" value="William T. Riker">William T. Riker<br> <input type="checkbox" name="charfav[]" value="Data">Data<br> <input type="checkbox" name="charfav[]" value="Deanne Troi">Deanne Troi<br> <input type="checkbox" name="charfav[]" value="Worf">Worf<br>Last update 5/5/2012
60. PHP? Siapa Takut! 60 <br> <input type="submit" name="kirim" value="Pilih"> </form> <?php } else { // jika telah dipilih, tampilkan yang dipilih ?> Tokoh Favorit dalam Star Trek: The Next Generation menurut pilihan Anda adalah: <ul> <?php foreach ($charfav as $tokoh) { echo "<li>$tokoh"; } ?> </ul> <?php } ?> </body> </html> Cara pengunaan kotak kombo, sebenarnya telah diulas pada bagian kedua artikel ini,namun jika Anda tidak berkeberatan, maka lihatlah skrip berikut ini untuk menyegarkaningatan Anda, ketimbang kembali membuka bagian kedua artikel ini. Pada skrip ini kitatidak menggunakan variabel array. <html> <head> <title>Contoh Penggunaan Kotak Kombo</title> </head> <body> <?php if (!$kirim) { // Tampilkan form dan pilihan ?> <form action="<?php echo $PHP_SELF ?>" method="GET"> Apakah Minuman Favorit Captain Jean Luc Piccard?<br> <select name="minfav"> <option value="Wedang Ronde">Wedang Ronde</option> <option value="Wedang Ronde">Earl Green Tea</option> <option value="Wedang Ronde">Scotch</option> <option value="Wedang Ronde">Red Wine</option> </select> <br><br> <input type="submit" name="kirim" value="Pilih">Last update 5/5/2012
61. PHP? Siapa Takut! 61 </form> <?php } else { // jika telah dipilih, tampilkan yang dipilih ?> Minuman Favorit Captain Jean Luc Piccard menurut pilihan Anda adalah: <br> <b><?php echo $minfav ?></b> <?php } ?> </body> </html> Bagaimanakah cara penggunaan kotak daftar untuk menampilkan pilihan yang dapatdipilih secara multiple? Serupa dengan penggunaan kotak cek, maka kita dapat membuatskrip semacam ini. <html> <head> <title>Contoh Penggunaan Kotak Daftar</title> </head> <body> <?php if (!$kirim) { // Tampilkan form dan pilihan ?> <form action="<?php echo $PHP_SELF ?>" method="GET"> Siapa Tokoh Favorit Anda dalam Star Trek: The Next Generation?<br> <select name="charfav[]" size="5" multiple> <option value="Jean Luc Piccard">Jean Luc Piccard</option> <option value="William T. Riker">William T. Riker</option> <option value="Data">Data</option> <option value="Deanne Troi">Deanne Troi</option> <option value="Worf">Worf</option> </select> <br> <input type="submit" name="kirim" value="Pilih"> </form> <?php } else { // jika telah dipilih, tampilkan yang dipilihLast update 5/5/2012
62. PHP? Siapa Takut! 62 ?> Tokoh Favorit dalam Star Trek: The Next Generation menurut pilihan Anda adalah: <ul> <?php foreach ($charfav as $tokoh) { echo "<li>$tokoh"; } ?> </ul> <?php } ?> </body> </html>Berhenti Atau LanjutkanDalam perulangan, ada dua kata kunci penting yang harus Anda cermati penggunaannya,yaitu break dan continue.Perintah break dapat digunakan untuk keluar dari perulangan jika didapati kondisi yangtidak diharapkan. Setelah perintah break, maka sisa perulangan yang belum dijalankanakan diabaikan. Contoh penggunaannya adalah pada pengecekan bilangan pembagisebelum dilakukan pembagian berulang untuk menghindarkan kesalahan divided by zero.Kebalikannya, perintah continue digunakan untuk melompati suatu iterasi dalamperulangan dan eksekusi program langsung menuju pada iterasi berikutnya. Contohpenggunaan perintah continue dapat dilihat pada skrip berikut ini. <?php for ($i=1; $i<=10; $i++) { if ($i == 7) { continue; } echo $i; } ?> Ketika skrip diatas dijalankan, maka semua bilangan bulat dari 1 sampai 10 akanditampilkan kecuali bilangan 7 karena pada $i = 7 eksekusi program dalam perulangandilompati langsung ke perulangan berikutnya ($i = 8).Jangan Ke Mana-manaBagian ketiga artikel PHP? Siapa Takut! ini telah berakhir. Kabar buruk bagi yang sudahbosan membaca artikel ini, karena bagian keempat akan segera menyusul untuk mulaimembicarakan penggunaan basis data MySQL dengan skrip PHP. Ini merupakan fondasiLast update 5/5/2012
63. PHP? Siapa Takut! 63terpenting dalam membangun aplikasi berbasis web atau situs web dinamis dengan PHP.Jadi pastikan Anda jangan ke mana-mana, karena kita akan segera kembali setelah ini.Last update 5/5/2012
64. PHP? Siapa Takut! 64Bagian 4: Hei, Ternyata Bisa Bekerja!Pada artikel-artikel sebelumnya, kita telah belajar cara menggunakan skrip PHP untukmemproses informasi masukan dari pengguna atau pengunjung situs kita. Anda sangatmungkin kini sudah cukup mahir membuat <form> dan komponen-komponennya untukdapat diisi oleh pengguna, termasuk juga skrip untuk memproses dan menanggapimasukan dari pengguna. Sudah cukupkah?Sampai sekarang kita belum pernah mempelajari cara menyimpan dan mengambilkembali informasi dalam situs kita, padahal proses penyimpanan, modifikasi,penghapusan, dan pembacaan data adalah hal yang nyaris tidak terpisahkan daripemrosesan data. Apa gunanya kita memproses data, jika kita tidak mampumengingatnya?Saat inilah kita membutuhkan basis data (database). Inilah pahlawan kita dalammempermudah pemrosesan informasi. Mari kita mulai.Pasangan Kita Tahun IniSalah satu faktor yang membuat PHP menjadi sangat populer sebagai bahasa skrip dalampembuatan aplikasi berbasis web dan situs web dinamis adalah karena bahasa inimendukung demikian banyak sistem basis data, mulai dari mSQL, MySQl, MS-SQL,MS-Access, PostgreSQL, bahkan sampai Oracle. Fungsi-fungsi untuk mempermudahpengaksesan berbagai jenis basis data tersebut tersedia lebih dari cukup pada PHP,sehingga meringankan, menyederhakanan, serta mempercepat proses pengembanganaplikasi berbasis web.Dari sekian banyak kombinasi PHP dan sistem basis data yang ada, terpilih pasanganPHP/MySQL sebagai yang terbaik dan terharmonis. Mengapa? Keduanya adalah produk-produk terbaik dari gerakan open-source. Mudah-mudahan Anda tidak membuka kedokbahwa Anda bukan anak gaul dengan bertanya apa yang dimaksud dengan gerakanopen-source. Ke mana saja Anda selama ini?MySQL memberikan hasil yang optimal dari sisi kecepatan dan reliabitas manajemendata. Sifatnya yang open-source menyebabkan MySQL berkembang secara pesat dandigunakan begitu banyak pengguna yang tidak ingin membuang dana begitu besar untuksebuah sistem basis data seperti jika menggunakan sistem basis data komersial. Untukpenggunaan pada jumlah data skala medium ke bawah, MySQL memang pas, apalagiditambah ketersediaan MySQL pada berbagai platform populer seperti Linux, FreeBSD,dan MS Windows 9x/NT/2000. Produk open source lain dalam beberapa hal lebihunggul, misalnya PostgreSQL yang mampu menjamin integritas data dan dapatdigunakan untuk jumlah data skala besar, namun keterbatasan platform pendukungnyasangat berpengaruh terhadap popularitasnya. Saat ini, PHP secara built-in telahmendukung MySQL tanpa perlu modul tambahan.Last update 5/5/2012
65. PHP? Siapa Takut! 65Sementara promosinya kita hentikan dan kita mulai bekerja kembali.Siapkan Semua PeralatanSebelum Anda lanjutkan, perlu Anda pastikan dahulu sistem basis data MySQL telahterinstall dengan baik di sistem Anda. Jika Anda tidak menemukan tanda-tandakehidupan dari server MySQL, Anda dapat menginstalasi MySQL dari distribusi sistemoperasi Anda (jika Anda menggunakan basis Linux) atau dengan mendownload versiterbarunya dari situs resmi MySQL di http://www.mysql.com/. Ada perusahaan lain yangmengedarkan versi modifikasi dari MySQL dengan tambahan fitur transaksi dan jenistabel yang berbeda yaitu NuSphere (http://www.nusphere.com/), namun karena masalahini masih jadi pertentangan antara MySQL AB sebagai perilis awal kode MySQL dandengan NuSphere, maka Anda tidak dianjurkan menggunakan produk MySQL dariNuSphere.Anda dapat belajar melakukan sendiri instalasi MySQL dari manual yang tersedia.Mungkin dibutuhkan sedikit usaha jika Anda melakukan instalasi di sistem Linux,apalagi jika Anda melakukan instalasi bukan dari distribusi biner, tapi percayalah Andapasti mampu melakukannya. Instalasi MySQL di sistem operasi Windows relatif lebihmudah.Jika instalasi telah selesai dilakukan dan server MySQL telah siap, baiklah Anda siapkanbekal berikutnya. Ada baiknya Anda mengenal bahasa SQL (Structured QueryLanguage) yang umum digunakan untuk berinteraksi dengan server basis data.Pengetahuan mengenai SQL akan sangat membantu karena bahasa ini akan digunakanpada hampir semua interaksi PHP dengan MySQL. Jika Anda belum mengenal SQL,tidak perlu khawatir. Tetaplah maju tak gentar karena Anda tetap akan dibantu tahapdemi tahap dalam artikel ini.Bagaimana jika Anda salah satu pembenci MySQL? Karena PHP mendukung hampirsemua sistem basis data populer yang ada, Anda akan tetap dapat menggunakan dasar-dasar teknik berinteraksi dengan server basis data yang dibahas dalam artikel ini untukdiaplikasikan pada sistem basis data yang Anda sukai. Bukalah manual PHP, maka Andaakan dapati bahwa fungsi-fungsi untuk mengakses basis data manapun sesungguhnyatidak jauh berbeda. Maka, tetaplah bergabung bersama kami.Daftar Awak USS Enterprise NCC-1701DBayangkan Anda adalah seorang lulusan terbaik akademi militer United Federation ofPlanet bidang sistem informasi. Penugasan pertama Anda adalah pada kapal perangangkasa terbaik USS Enterprise NCC-1701D dipimpin oleh Captain Jean Luc Piccardyang masih selalu mencari cara untuk menumbuhkan rambut di kepalanya. Ketikabriefing awal, Anda diharapkan membuat sistem informasi yang mencatat daftar awakUSS Enterprise NCC-1701D. Tentu, karena First Officer William T. Riker fanatikdengan PHP dan MySQL, Anda harus membuatnya dalam PHP.Last update 5/5/2012
66. PHP? Siapa Takut! 66Officer Geordi LaForge menjelaskan bahwa sistem informasi ini haruslah mencakup datanama, pangkat, jabatan, lama bertugas, e-mail, dan hobi dari setiap awak. Sehingga tabelbasis data yang dibuat haruslah minimal memuat data tersebut.Sebagai seorang lulusan terbaik, Anda paham bahwa perintah dasar SQL untukpengoperasian basis data antara lain: • SELECT ; digunakan untuk menampilkan data dari sebuah tabel, • INSERT ; digunakan untuk memasukkan data baru ke sebuah tabel, • UPDATE ; digunakan untuk memodifikasi data yang telah ada, • DELETE ; digunakan untuk menghapus data pada sebuah tabel.Perintah dasar di atas akan kita gunakan dalam membuat sistem informasi daftar awakUSS Enterprise NCC-1701D, namun sebelumnya kita harus membuat basis data dantabelnya pada MySQL kita. Bukalah program CLI (Command Line Interface) MySQLdengan mengetik baris perintah berikut pada shell sistem operasi Anda. Pastikan perintah/program mysql dapat dipanggil dari CLI sistem operasi Anda. mysql -u [namapengguna] -pNama pengguna adalah nama pengguna pada sistem basis data MySQL yang telah dibuatpada saat instalasi dan konfigurasi server basis data MySQL. Jika diperlukan password,maka program mysql akan memberikan prompt bagi Anda untuk memasukkan password.Jika urusan protokoler ini telah selesai, maka pada layar komputer Anda akan munculprompt sebagai berikut. mysql>Misalkan Anda ingin membuat basis data penyimpanan awak kapal dengan namauss_enterprise, dan awak kapal akan disimpan dalam tabel awak dalam basis datatersebut, maka ketiklah sebagai berikut. CREATE DATABASE uss_enterprise; USE uss_enterprise;Baris pertama perintah di atas adalah untuk membuat basis data dengan namauss_enterprise pada MySQL. Baris berikutnya adalah perintah kepada CLI MySQLuntuk menggunakan basis data uss_enterprise. Setiap baris yang akan dieksekusi harusdiakhiri dengan tanda titik-koma/semi colon (;) dan diikuti dengan menekan tombol[return] atau tombol [enter]. Dengan demikian, Anda dapat meneruskan perintahyang cukup panjang pada baris berikutnya dengan tombol [enter], dengan catatan diakhir baris tidak ada tanda semi colon. Tanda semi colon dapat pula diganti dengan frasag.Kini Anda dapat membuat tabel untuk menyimpan daftar awak, dengan mengetikperintah berikut ini.Last update 5/5/2012
67. PHP? Siapa Takut! 67 CREATE TABLE awak ( KODE INT(11) NOT NULL AUTO_INCREMENT, NAMA VARCHAR(50) NOT NULL, PANGKAT VARCHAR(50) NOT NULL, JABATAN VARCHAR(50) NOT NULL, BERTUGAS SMALLINT(6) NOT NULL DEFAULT 0, EMAIL VARCHAR(50) NOT NULL, HOBI VARCHAR(50) NOT NULL, PRIMARY KEY (KODE) );Untuk menguji apakah tabel yang Anda buat sudah terbentuk, Anda dapat mencobamengetik perintah berikut ini, masih pada CLI mysql. DESCRIBE awak;Jika tidak ada kesalahan dalam proses pembuatan table, maka seharusnya CLI mysqlakan memberikan hasil sebagai berikut.+----------+-------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+----------------+| KODE | int(11) | | PRI | NULL | auto_increment || NAMA | varchar(50) | | | | || PANGKAT | varchar(50) | | | | || JABATAN | varchar(50) | | | | || BERTUGAS | smallint(6) | | | 0 | || EMAIL | varchar(50) | | | | || HOBI | varchar(50) | | | | |+----------+-------------+------+-----+---------+----------------+7 rows in set (0.06 sec)Sekarang kita perlu mengisi basis data ini dengan data awal. Data awal yang kitamasukkan ada dua. Mengapa dua? Jawabannya sederhana saja, karena saya hanya inginmemasukkan dua data saja. Mengapa bukan tiga atau satu? Karena saya lebih suka dua. INSERT INTO awak VALUES ( Null,Jean Luc Piccard,Captain,Captain,5, piccard@ncc1701d.mil.ufp,Archeology); INSERT INTO awak VALUES ( Null,William T. Riker,Commander,First Officer,5, riker@ncc1701d.mil.ufp,Holodeck Game);Kolom/field pertama table awak (KODE) memiliki sifat AUTO_INCREMENT, jadi secaraotomatis akan bertambah nilainya setiap pengisian data. Hal ini akan menjamin primarykey (kolom KODE) selalu unik. Agar MySQL otomatis mengisi nilai pada kolom KODE,maka pada saat melakukan pengisian data (INSERT), kolom ini diberikan nilai Null. Marikita lihat apakah proses pengisian data telah sukses.Last update 5/5/2012
68. PHP? Siapa Takut! 68 SELECT * FROM awak GPerintah di atas adalah perintah SQL, yang artinya "ambillah semua data dan kolom daritabel awak". Anda dapat membatasi kolom yang diambil dengan mengganti tanda *dengan nama kolom yang akan diambil dipisahkan dengan tanda koma (,). Pembatasanjumlah data yang diambil dapat dilakukan dengan menggunakan persyaratan(WHERE ....) atau dengan perintah LIMIT. Bacalah manual MySQL, Anda akan dapatipenjelasan mengenai hal ini secara lebih detil.Jika Anda jeli, mungkin Anda bertanya mengapa digunakan frasa G untuk mengakhiriperintah SELECT dan bukannya semi colon (;) atau g? Frasa G menyebabkan hasilquery ditampilkan di layar secara vertikal, bukan dalam bentuk tabel baris kolom. Jikadata ditampilkan dalam bentuk tabel baris kolom, hasilnya kemungkinan besar akanberantakan karena terbatasnya lebar layar CLI (80 karakter). Berikut tampilan yangdihasilkan jika Anda berhasil memasukkan data ke tabel awak. *************************** 1. row *************************** KODE: 1 NAMA: Jean Luc Piccard PANGKAT: Captain JABATAN: Captain BERTUGAS: 5 EMAIL: piccard@ncc1701d.mil.ufp HOBI: Archeology *************************** 2. row *************************** KODE: 2 NAMA: William T. Riker PANGKAT: Commander JABATAN: First Officer BERTUGAS: 5 EMAIL: riker@ncc1701d.mil.ufp HOBI: Holodeck Game 2 rows in set (0.05 sec)Anda dapat menggunakan perintah SQL SELECT untuk menghitung jumlah record/datapada tabel awak. SELECT COUNT(*) FROM awak; Hasilnya adalah seperti berikut ini +----------+ | count(*) | +----------+ | 2 | +----------+ 1 row in set (0.55 sec)Last update 5/5/2012
69. PHP? Siapa Takut! 69Sampai di sini, berarti basis data, tabel, dan datanya sendiri telah siap untuk tugas Anda.Kini kita segera mulai dengan membuat skrip PHP untuk mengakses basis data MySQL.Sebelumnya ketik quit pada program CLI MySQL untuk keluar dari aplikasi.Hai MySQL, Saya Datang!Untuk pemanasan, Mari kita buat dahulu skrip PHP sederhana untuk menghitung jumlahrecord/data yang ada di tabel awak. <html> <head> <title>Menghitung Jumlah Record Pada Tabel Awak</title> </head> <body> <?php // set beberapa variabel untuk mengakses basis data MySQL. // nama server basis data MySQL $server = "localhost"; // nama pengguna basis data $namauser = "test"; // misalkan user adalah test // password pengguna basis data $passuser = "test"; // misalkan password adalah test // nama basis data $db = "uss_enterprise"; // membuka koneksi PHP ke basis data MySQL $koneksi = mysql_connect($server, $namauser, $passuser); // menentukan perintah SQL untuk query $query = "SELECT COUNT(*) FROM awak"; // jalankan perintah SQL untuk query // pada basis data uss_enterprise pada koneksi // yang sudah dibuka ($koneksi) $hasil = mysql_db_query($db, $query, $koneksi); // mengambil data dari variabel $hasil $jml_rec = mysql_result($hasil, 0); // tampilkan hasilnya di halaman html echo "Jumlah record/data pada tabel adalah : $jml_rec"; // bebaskan memori yang digunakan untuk proses //karena hasil proses telah ditampilkanLast update 5/5/2012
70. PHP? Siapa Takut! 70 mysql_free_result($hasil); ?> </body> </html> Anda akan dapati hasilnya sebagai berikut. Jumlah record/data pada tabel adalah : 2 Selamat! Skrip PHP pertama Anda untuk mengakses MySQL telah berhasil Anda buat.Mari sekarang kita bicarakan tahap demi tahap cara kerja skrip yang baru kita buat diatas. 1. Langkah pertama yang harus dikerjakan adalah memberikan informasi-informasi penting yang dibutuhkan untuk membuat koneksi ke basis data. Informasi ini meliput: nama server tempat MySQL yang akan diakses, nama pengguna database dan passwordnya, dan nama basis data yang akan diakses. Informasi ini disimpan dalam variabel PHP. 2. Untuk dapat berkomunikasi dengan basis data, maka dibutuhkan suatu koneksi basis data ke server MySQL. Semua komunikasi akan dilewatkan pada koneksi ini. Pada PHP, koneksi ke MySQL diinisiasi dengan perintah mysql_connect(). $koneksi = mysql_connect($server, $namauser, $passuser); Fungsi ini memiliki 3 parameter: nama server, nama pengguna MySQL dan passwordnya. Jika server basis data MySQL dan server web secara fisik berada dan beroperasi dalam satu mesin, maka nama server umumnya cukup ditulis localhost atau dengan nomor IP loopback 127.0.0.1. Hasil dari fungsi ini adalah sebuah "pengenal hubungan" (link identifier) yang dalam skrip PHP di atas disimpan pada variabel $koneksi. Pengenal ini akan selalu digunakan oleh skrip untuk berkomunikasi dengan basis data. 3. Setelah kita memiliki koneksi ke basis data, maka sekaranglah saatnya mengirim perintah query dalam SQL ke basis data kita. Fungsi yang digunakan adalah mysql_db_query(). Fungsi ini memiliki 3 parameter pula: nama basis data, string query dalam bahasa SQL, dan pengenal hubungan untuk koneksi yang telah kita bicarakan sebelumnya. $query = "SELECT COUNT(*) FROM awak"; $hasil = mysql_db_query($db, $query, $koneksi);Last update 5/5/2012
71. PHP? Siapa Takut! 71 Hasil dari fungsi mysql_query() disimpan dalam variabel $hasil. Isi dari variabel $hasil ini sangat bergantung dari perintah query SQL yang diberikan. Variabel ini dapat saja berisi satu atau lebih baris atau kolom data yang ada pada basis data. Anda dapat mengambil dan mengekstraksi isi dari variabel hasil query dengan berbagai fungsi yang tersedia dalam PHP sesuai dengan kebutuhan Anda. Kali ini kita gunakan saja fungsi mysql_result() yang akan menggunakan variabel hasil query dan nomor baris serta nama kolom (optional/tidak perlu ada) untuk mengambil informasi dari hasil query yang kita butuhkan. $jml_rec = mysql_result($hasil, 0); Fungsi di atas mengandung arti ambil baris indeks 0 (baris pertama) dari hasil indeks $hasil, dan hasilnya disimpan dalam variabel $jml_rec. Fungsi-fungsi lain sebagai alternatif dari mysql_result() akan kita bicarakan kemudian. 4. Akhirnya, adalah hal yang bijak untuk memperhatikan bahwa hasil dari query sangat mungkin cukup menyita memory yang sangat Anda butuhkan untuk proses selanjutnya. Hal ini terutama terjadi jika perintah query ini menghasilkan baris dan kolom dalam jumlah yang relatif besar. Anda dapat membebaskan penggunaan memory oleh variabel hasil query ini dengan perintah mysql_free_result(), setelah semua proses yang membutuhkan variabel hasil query itu telah selesai dilaksanakan.Perlihatkan Sesuatu Padaku!Skrip PHP di atas merupakan contoh yang amat dasar. Sekarang kita ingin menggunakanskrip PHP untuk menampilkan data yang ada pada tabel awak, bukan hanya jumlahnyasaja.Kebetulan Anda termasuk species manusia yang pemalas, sehingga sangat enggan untukmenulis berulang-ulang perintah dan variabel yang sama pada setiap skrip PHP yangAnda buat. Anda akan memisahkan beberapa variabel untuk kebutuhan koneksi basisdata dan menyimpannya pada file terpisah, misalkan koneksi.inc.php. File ini akanberisi skrip sebagai berikut. <?php // set beberapa variabel untuk mengakses basis data MySQL. // nama server basis data MySQL $server = "localhost"; // nama pengguna basis data $namauser = "test"; // misalkan user adalah testLast update 5/5/2012
72. PHP? Siapa Takut! 72 // password pengguna basis data $passuser = "test"; // misalkan password adalah test // nama basis data $db = "uss_enterprise"; // membuka koneksi PHP ke basis data MySQL $koneksi = mysql_connect($server, $namauser, $passuser) or die("Salah server, nama pengguna, atau passwordnya!"); ?>File ini yang kita sisipkan pada setiap skrip PHP yang akan kita buat denganmenggunakan perintah/fungsi include() atau require(). Anda ingin mengetahuikegunaan fungsi die()? Fungsi ini berguna untuk menghentikan seluruh eksekusiprogram dan menampilkan string yang tertentu jika proses eksekusi perintah gagal atauditemukan kesalahan.Skrip PHP berikut ini akan menampilkan isi dari tabel awak ke dalam format halamanHTML. Untuk mempermudah tata letak, kita akan minta bantuan pada tag <table> danrekan-rekannya. <html> <head> <title>Menampilkan Isi Tabel Awak</title> </head> <body> <?php // ambil data koneksi dari file koneksi.inc.php require("koneksi.inc.php"); // menentukan perintah SQL untuk query $query = "SELECT * FROM awak"; // jalankan perintah SQL untuk query $hasil = mysql_db_query($db, $query, $koneksi) or die("Kesalahan pada query!"); // tampilkan hasilnya di halaman html dengan tabel echo "<table border=1 cellpadding=1 cellspacing=0>n"; echo "<tr>n"; echo "<td>Kode</td>n"; echo "<td>Nama</td>n"; echo "<td>Pangkat</td>n"; echo "<td>Jabatan</td>n"; echo "<td>Tugas</td>n"; echo "<td>Hobi</td>n"; echo "</tr>n";Last update 5/5/2012
73. PHP? Siapa Takut! 73 // gunakan perulangan while // perulangan akan terjadi sepanjang masih ditemukan record while ($barisdata = mysql_fetch_array($hasil)) { // isikan elemen array baris ke masing-masing variabel $kode = $barisdata["KODE"]; $nama = $barisdata["NAMA"]; $pangkat = $barisdata["PANGKAT"]; $jabatan = $barisdata["JABATAN"]; $bertugas = $barisdata["BERTUGAS"]." th"; $email = "mailto:".$barisdata["EMAIL"]; $hobi = $barisdata["HOBI"]; // format dalam baris dan kolom tabel echo "<tr>n"; echo "<td>$kode</td>n"; echo "<td>"; echo "<a href=$email>$nama</a>"; echo "</td>n"; echo "<td>$pangkat</td>n"; echo "<td>$jabatan</td>n"; echo "<td>$bertugas</td>n"; echo "<td>$hobi</td>n"; echo "</tr>n"; } echo "</table>n"; // bebaskan memori yang digunakan untuk proses mysql_free_result($hasil); ?> </body> </html>Pada contoh di atas, digunakan fungsi mysql_fetch_array() yang akan mengekstraksivariabel hasil query $hasil ke dalam variabel array $barisdata. Indeks komponenvariabel array ini secara otomatis adalah nama kolom dari hasil query. Dengan demikian,kita dapat mengakses tiap komponen/elemen dari variabel array $barisdata sesuaidengan nama kolomnya, seperti pada baris-baris perintah berikut ini. $kode = $barisdata["KODE"]; $nama = $barisdata["NAMA"]; $pangkat = $barisdata["PANGKAT"]; .... dan seterusnya ....Last update 5/5/2012
74. PHP? Siapa Takut! 74Perulangan yang digunakan adalah perulangan while yang akan terus melakukanperulangan sampai fungsi mysql_fetch_array() tidak memberikan hasil atau dengankata lain sampai pernyataan $barisdata = mysql_fetch_array($hasil) bernilaifalse. Berikut ini adalah hasil skrip di atas.Kode Nama Pangkat Jabatan Tugas Hobi1 Jean Luc Piccard Captain Captain 5 th Archeology2 William T. Riker Commander First Officer 5 th Holodeck GameCara Lain Ada Nggak, Sih?Jangan khawatir, karena begitu banyaknya fungsi yang disediakan pada PHP, mungkinsuatu saat Anda akan bingung dalam memilih cara yang akan digunakan. Kita dapat jugamenggunakan fungsi mysql_fetch_row() untuk maksud yang sama dengan di atas,hanya saja variabel array yang dihasilkan akan berindeks angka sederhana, mulai dari 0untuk kolom pertama sampai dengan (n - 1) untuk kolom terakhir (n). Berikut iniadalah contoh penerapan untuk maksud yang sama dengan skrip di sebelumnya. <html> <head> <title>Menampilkan Isi Tabel Awak</title> </head> <body> <?php // ambil data koneksi dari file koneksi.inc.php require("koneksi.inc.php"); // menentukan perintah SQL untuk query $query = "SELECT * FROM awak"; // jalankan perintah SQL untuk query $hasil = mysql_db_query($db, $query, $koneksi) or die("Kesalahan pada query!"); // tampilkan hasilnya di halaman html dengan tabel echo "<table border=1 cellpadding=1 cellspacing=0>n"; echo "<tr>n"; echo "<td>Kode</td>n"; echo "<td>Nama</td>n"; echo "<td>Pangkat</td>n"; echo "<td>Jabatan</td>n"; echo "<td>Tugas</td>n"; echo "<td>Hobi</td>n"; echo "</tr>n"; // gunakan perulangan while // perulangan akan terjadi sepanjang masih ditemukan recordLast update 5/5/2012
75. PHP? Siapa Takut! 75 while ($barisdata = mysql_fetch_row($hasil)) { // isikan elemen array baris ke masing-masing variabel $kode = $barisdata[0]; $nama = $barisdata[1]; $pangkat = $barisdata[2]; $jabatan = $barisdata[3]; $bertugas = $barisdata[4]." th"; $email = "mailto:".$barisdata[5]; $hobi = $barisdata[6]; // format dalam baris dan kolom tabel echo "<tr>n"; echo "<td>$kode</td>n"; echo "<td>"; echo "<a href=$email>$nama</a>"; echo "</td>n"; echo "<td>$pangkat</td>n"; echo "<td>$jabatan</td>n"; echo "<td>$bertugas</td>n"; echo "<td>$hobi</td>n"; echo "</tr>n"; } echo "</table>n"; // bebaskan memori yang digunakan untuk proses mysql_free_result($hasil); ?> </body> </html>Huruf tebal (bold) pada skrip di atas menunjukkan perbedaan dengan skrip sebelumnya.Dengan fungsi list(), Anda juga dapat langsung menugaskan variabel-variabel tertentuuntuk menerima hasil dari fungsi mysql_fetch_row(). Berikut adalah contohnya, masihdalam permasalahan yang sama dengan skrip sebelumnya. <html> <head> <title>Menampilkan Isi Tabel Awak</title> </head> <body> <?php // ambil data koneksi dari file koneksi.inc.php require("koneksi.inc.php"); // menentukan perintah SQL untuk queryLast update 5/5/2012
76. PHP? Siapa Takut! 76 $query = "SELECT * FROM awak"; // jalankan perintah SQL untuk query $hasil = mysql_db_query($db, $query, $koneksi) or die("Kesalahan pada query!"); // tampilkan hasilnya di halaman html dengan tabel echo "<table border=1 cellpadding=1 cellspacing=0>n"; echo "<tr>n"; echo "<td>Kode</td>n"; echo "<td>Nama</td>n"; echo "<td>Pangkat</td>n"; echo "<td>Jabatan</td>n"; echo "<td>Tugas</td>n"; echo "<td>Hobi</td>n"; echo "</tr>n"; // gunakan perulangan while // perulangan akan terjadi sepanjang masih ditemukan record while (list($kode,$nama,$pangkat,$jabatan,$bertugas, $email,$hobi) = mysql_fetch_row($hasil)) { // modifikasi beberapa variabel hasil mysql_fetch_row() $bertugas = $bertugas." th"; $email = "mailto:".$email; // format dalam baris dan kolom tabel echo "<tr>n"; echo "<td>$kode</td>n"; echo "<td>"; echo "<a href=$email>$nama</a>"; echo "</td>n"; echo "<td>$pangkat</td>n"; echo "<td>$jabatan</td>n"; echo "<td>$bertugas</td>n"; echo "<td>$hobi</td>n"; echo "</tr>n"; } echo "</table>n"; // bebaskan memori yang digunakan untuk proses mysql_free_result($hasil); ?> </body> </html>Last update 5/5/2012
77. PHP? Siapa Takut! 77Fungsi list() menyebabkan array hasil dari mysql_fetch_row() langsung diisikanpada variabel-variabel yang didaftar pada fungsi list() sesuai dengan urutannya.Dari ketiga cara di atas, Anda dapat menentukan sendiri mana yang lebih Anda sukai.Jika Anda sangat konvensional, tidak praktis, bebal dan hanya ingin menggunakan fungsimysql_result(), Anda bisa mengekstraksi variabel $hasil dengan cara sebagai berikut. $kode = mysql_result($hasil,$i,"KODE"); $nama = mysql_result($hasil,$i,"NAMA"); $pangkat = mysql_result($hasil,$i,"PANGKAT"); ............ dan seterusnya ..............Dengan $i adalah indeks dari baris mulai dari 0 untuk baris pertama sampai (n - 1)untuk baris ke-n. Tentu Anda harus memodifikasi perulangannya sehingga jumlahperulangan harus tepat sebanyak n kali atau tidak sama sekali jika query tidakmenghasilkan satu pun baris data. Anda juga harus menugaskan bilangan pencacah $iyang terus bertambah agar pengaksesan bisa berlanjut ke record berikutnya. Sudahlah,pokoknya lebih rumit daripada ketiga cara di atas.Mencari Jarum Dalam Tumpukan JeramiAnda setuju bahwa sub judul di atas bombastis? Sama. Tetapi, biarlah atau ganti saja subjudulnya sesuai dengan keinginan Anda. Yang jelas, kita kini akan belajar membuatsebuah form untuk mencari sebuah data dan menampilkannya berdasarkan nama yangdimasukkan oleh pengguna.Teknik menyatukan halaman form dengan proses dan hasilnya telah kita pelajari padabagian sebelumnya, pasti dengan kecerdasan yang Anda miliki, tidak akan terlupakanbegitu saja. Intinya kita akan membedakan status pencarian dengan mendeteksiadanya/nilai variabel tertentu ($cari) yang dikirim oleh tombol "Cari" pada form isian.Jika variabel ini bernilai, maka berarti dokumen/skrip PHP sedang dalam prosespencerian, jika tidak, tampilkan form untuk pencarian. <html> <head> <title>Pencarian Nama</title> <basefont face="Arial"> </head> <body> <?php // cek apakah kondisi form terkirim atau tidak if (!$cari) { // jika form tidak dalam kondisi terkirim, // tampilkan form pencarian namaLast update 5/5/2012
78. PHP? Siapa Takut! 78 ?> <center> <form action="<?php echo $PHP_SELF ?>" method="POST"> <font size=5>Program Pencarian Data Awak USS Enterprise</font> <p> Masukkan nama awak yang dicari : <p> <input type="text" name="form_nama" size="50" maxlength="50"> <input type="submit" name="cari" value=" Cari Awak "> </form> </center> <?php } else { // jika form dalam kondisi terkirim, // lakukan pencarian dan tampilkan hasilnya // ambil variabel untuk koneksi basis data require("koneksi.inc.php"); // tentukan query dan kriteria pencarian $query = "SELECT * FROM awak WHERE NAMA LIKE % $form_nama%"; // lakukan proses query $hasil = mysql_db_query($db,$query,$koneksi); // cek apakah pencarian ada hasilnya $jml_rec = mysql_num_rows($hasil); if (!$jml_rec) { // jika pencarian tidak ada hasilnya, // tampilkan pesan gagal ?> <center> <font size=5>Nama Awak tidak ditemukan! </font><p> <a href="<?php echo $PHP_SELF?>">Klik di sini untuk kembali</a> </center> <?php }Last update 5/5/2012
79. PHP? Siapa Takut! 79 else { // jika pencarian memberikan hasil, // tampilkan dalam halaman html // membuat tabel untuk menampilkan hasil pencarian echo "<font size=5>Hasil Pencarian ". "Ditemukan $jml_rec Data</font><br>n"; echo "<table border=1 cellpadding=1 cellspacing=0>n"; echo "<tr>n"; echo "<td>Kode</td>n"; echo "<td>Nama</td>n"; echo "<td>Pangkat</td>n"; echo "<td>Jabatan</td>n"; echo "<td>Tugas</td>n"; echo "<td>Hobi</td>n"; echo "</tr>n"; // gunakan perulangan while // perulangan akan terjadi sepanjang masih // ditemukan record while (list($kode,$nama,$pangkat,$jabatan, $bertugas, $email,$hobi) = mysql_fetch_row($hasil)) { // modifikasi beberapa variabel hasil // mysql_fetch_row() $bertugas = $bertugas." th"; $email = "mailto:".$email; // format dalam baris dan kolom tabel echo "<tr>n"; echo "<td>$kode</td>n"; echo "<td>"; echo "<a href=$email>$nama</a>"; echo "</td>n"; echo "<td>$pangkat</td>n"; echo "<td>$jabatan</td>n"; echo "<td>$bertugas</td>n"; echo "<td>$hobi</td>n"; echo "</tr>n"; } echo "</table>n"; echo "<p>n"; echo "<a href=$PHP_SELF>Klik di sini ". "untuk kembali</a>n"; // bebaskan memori yang digunakan untuk proses mysql_free_result($hasil);Last update 5/5/2012
80. PHP? Siapa Takut! 80 } } ?> </body> </html>Skrip Pencarian Nama Awak USS Enterprise di atas menggunakan kriteria pencariandengan operator LIKE yaitu "WHERE NAMA LIKE %$form_nama%". Operator LIKE iniadalah operator pada bahasa SQL di MySQL yang memiliki cakupan pencarian lebih luasdari pada operator =. Bentuk %[string]% akan menyebabkan pencarian dilakukanterhadap setiap data yang mengandung [string]. Operator LIKE ini juga tidakmembedakan huruf kapital dan huruf kecil. Berikut ilustrasinya. -------------------------------------------------------- | Isi Kotak Teks | Nama Awak yang didapat dari | | Pada Form | Pencarian | ------------------+------------------------------------- | piccard | Jean Luc Piccard | | PiCcArd | Jean Luc Piccard | | pic | Jean Luc Piccard | | cp | - | | c p | Jean Luc Piccard | | a | Jean Luc Piccard, William T. Riker | | card | Jean Luc Piccard | | ill | William T.Riker | --------------------------------------------------------Fungsi baru yang Anda jumpai pada skrip di atas adalah mysql_num_rows() yang akanmemberikan hasil jumlah baris/data yang dihasilkan dari proses query. Hasil dari fungsiini disimpan pada variabel $jml_rec yang akan digunakan untuk menentukan apakahdata yang dicari ditemukan atau tidak. Jika variabel $jml_rec = 0 berarti data tidakditemukan, dan jika lebih dari nol, maka seluruh hasil akan ditampilkan dalam tabel padahalaman HTML.Cobalah jalankan skrip PHP di atas, lama-kelamaan Anda akan mengerti dasar-dasar alurkerja skrip untuk pencarian data. Skrip ini dapat dikembangkan lebih jauh sesuai dengankebutuhan Anda.Awak Kapal BaruSampai saat ini, Anda telah berulang kali menggunakan perintah SQL SELECT yangberguna untuk mengambil informasi dari basis data yang ada. Kini saatnya kita membuatskrip untuk mengisi basis data kita dengan awak-awak kapal USS Enterprise yanglainnya. Yang jelas, kita tidak mungkin memasukkan satu per satu data awak tersebutmelalui Aplikasi CLI MySQL yang sangat membosankan dan tidak menarik itu. KitaLast update 5/5/2012
81. PHP? Siapa Takut! 81ingin data dimasukkan melalui halaman HTML yang dibuat dengan skrip PHP kita.Caranya?Untuk mengisi data baru ke dalam tabel basis data, kita menggunakan perintah SQLlainnya, yaitu INSERT. Cobalah skrip PHP berikut ini. Agar pada langkah-langkahberikutnya Anda tidak perlu mengganti nama skrip ini, simpanlah dengan namaawakinput.php. <html> <head> <title>Memasukkan Awak Baru</title> <basefont face="Arial"> </head> <body> <?php // cek apakah kondisi form terkirim atau tidak if (!$tambah) { // jika form tidak dalam kondisi terkirim, // tampilkan form pencarian nama ?> <center> <form action="<?php echo $PHP_SELF ?>" method="POST"> <font size=5>Masukkan Data Awak USS Enterprise Baru</font> <p> <table border=0 cellspacing=2 cellpadding=2> <tr> <td>Nama Awak</td> <td> <input type="text" name="form_nama" size="50" maxlength="50"> </td> </tr> <tr> <td>Pangkat</td> <td> <input type="text" name="form_pangkat" size="50" maxlength="50"> </td> </tr> <tr> <td>Jabatan</td> <td> <input type="text" name="form_jabatan" size="50"Last update 5/5/2012
82. PHP? Siapa Takut! 82 maxlength="50"> </td> </tr> <tr> <td>Lama Bertugas</td> <td> <input type="text" name="form_bertugas" size="2" maxlength="2"> (dalam tahun) </td> </tr> <tr> <td>e-mail</td> <td> <input type="text" name="form_email" size="50" maxlength="50"> </td> </tr> <tr> <td>Hobi</td> <td> <input type="text" name="form_hobi" size="50" maxlength="50"> </td> </tr> <tr> <td colspan=2 align=center> <input type="submit" name="tambah" value=" Tambah "> </td> </tr> </table> </form> </center> <?php } else { // jika form dalam kondisi terkirim, // lakukan insert ke basis data // ambil variabel untuk koneksi basis data require("koneksi.inc.php"); // tentukan query dan kriteria pencarian $query = "INSERT INTO awak VALUES ( Null, ".addslashes($form_nama).", ".addslashes($form_pangkat).",Last update 5/5/2012
83. PHP? Siapa Takut! 83 ".addslashes($form_jabatan).", $form_bertugas, ".addslashes($form_email).", ".addslashes($form_hobi)." )"; // lakukan proses query $hasil = mysql_db_query($db,$query,$koneksi) or die(Kesalahan pada proses query!); // Tampilkan pesan proses input telah selesai ?> <center> <font size=5>Proses Input Berhasil!</font><p> Data Awak Nama <b> <?php echo addslashes($form_nama) ?> </b> telah disimpan. <p> <a href="<?php echo $PHP_SELF ?>">Klik di sini untuk kembali</a> </center> <?php } ?> </body> </html>Anda mungkin belum mengenal kegunaan fungsi addslashes(). Fungsi ini bergunauntuk memastikan bahwa data string yang dikirim ke server MySQL telah bebas darikarakter-karakter terlarang, seperti , ", , dan sebagainya, sehingga proses queryterjamin dari kegagalan.Untuk mencoba skrip ini, masukkanlah data misalnya: NAMA: Deanne Troi PANGKAT: Commander JABATAN: Counselor BERTUGAS: 2 EMAIL: troi@ncc1701d.mil.ufp HOBI: Fine ArtLast update 5/5/2012
84. PHP? Siapa Takut! 84Untuk melihat apakah proses input yang kita lakukan berhasil, maka gunakan skrip PHPyang kedua, ketiga, atau keempat dari artikel ini. Hasilnya kurang lebih tampak sebagaiberikut.Kode Nama Pangkat Jabatan Tugas Hobi1 Jean luc Piccard Captain Captain 5 th Archeology2 William T. Riker Commander First Officer 5 th Holodeck Game3 Deanne Troi Commander Counselor 2 th Fine ArtSelain menggunakan fungsi mysql_db_query(), Anda dapat juga menggunakan fungsimysql_query() yang lebih praktis untuk digunakan berulang-ulang pada basis data yangsama. Sebelum fungsi ini, terlebih dahulu haruslah didefinisikan dahulu basis data yangdigunakan dengan fungsi mysql_select_db(). Sehingga perintah mysql_db_query($db, $query, $koneksi);dapat diganti dengan mysql_select_db($db, $koneksi); mysql_query($query);Bentuk yang kedua ini jauh lebih praktis jika kita secara berulang-ulang melakukanproses query pada basis data yang sama. Fungsi mysql_select_db() cukup dilakukansekali saja diawal skrip ataupun diletakkan pada skrip koneksi.inc.php, dan selanjutnyacukup dengan perintah mysql_query() saja.Data Salah, Tolong Diubah!Tiba-tiba timbul masalah, Anda salah memasukkan data. Anda harus segera membuatskrip lain untuk mengubah data yang sudah dimasukkan, sebelum data ini diakses olehpara pengguna lainnya. Ayo cepat, kita diburu waktu!Berbeda dengan menambahkan data baru, proses perbaikan (edit) data tidak berjalandalam dua langkah: isi dan simpan. Sebelum kita memperbaiki data, kita harus memilihdahulu data yang akan diubah, data asli sebelum diubah ditampilkan, ubah data sesuaikeinginan, kemudian simpan perubahannya. Untuk mudahnya, skrip mengubah data kitabagi menjadi 2 buah skrip, yang pertama adalah untuk mencari dan memilih data yangakan diubah dan skrip yang kedua untuk melakukan perubahan dan menyimpanperubahannya.Skrip yang pertama ini akan kita modifikasi dari skrip keempat pada artikel ini, yangbertugas menampilkan semua data yang ada pada tabel awak. Berikut ini adalah skripyang telah dimodifikasi. Tambahan dan modifikasi skrip tampak pada bagian yangberhuruf tebal. Simpanlah hasil perubahan ini dengan nama awakdsp.php.Last update 5/5/2012
85. PHP? Siapa Takut! 85 <html> <head> <title>Menampilkan Isi Tabel Awak</title> <basefont face="Arial"> </head> <body> <?php // ambil data koneksi dari file koneksi.inc.php require("koneksi.inc.php"); // menentukan perintah SQL untuk query $query = "SELECT * FROM awak"; // jalankan perintah SQL untuk query $hasil = mysql_db_query($db, $query, $koneksi) or die("Kesalahan pada query!"); // tampilkan hasilnya di halaman html dengan tabel echo "<font size=5>Data Awak USS Enterprise NCC-1701- D</font>n"; echo "<table border=1 cellpadding=1 cellspacing=0>n"; echo "<tr>n"; echo "<td>Kode</td>n"; echo "<td>Nama</td>n"; echo "<td>Pangkat</td>n"; echo "<td>Jabatan</td>n"; echo "<td>Tugas</td>n"; echo "<td>Hobi</td>n"; echo "<td>Pilihan</td>n"; echo "</tr>n"; // gunakan perulangan while // perulangan akan terjadi sepanjang masih ditemukan record while (list($kode,$nama,$pangkat,$jabatan,$bertugas, $email,$hobi) = mysql_fetch_row($hasil)) { // modifikasi beberapa variabel hasil mysql_fetch_row() $bertugas = $bertugas." th"; $email = "mailto:".$email; // format dalam baris dan kolom tabel echo "<tr>n"; echo "<td>$kode</td>n"; echo "<td>"; echo "<a href=$email>$nama</a>"; echo "</td>n"; echo "<td>$pangkat</td>n"; echo "<td>$jabatan</td>n"; echo "<td>$bertugas</td>n";Last update 5/5/2012
86. PHP? Siapa Takut! 86 echo "<td>$hobi</td>n"; echo "<td>"; echo "<a href="awakedit.php? kodeawak=$kode">Edit</a>"; echo "</td>n"; echo "</tr>n"; } echo "</table>n"; // bebaskan memori yang digunakan untuk proses mysql_free_result($hasil); ?> </body> </html>Jalankan skrip PHP ini di browser Anda, dan saksikan perubahannya. Pada setiap barisdata pada tabel, tersedia hyperlink untuk edit/ubah baris data yang bersangkutan di kolompaling kanan (kolom Pilihan). Hyperlink ini akan memanggil skrip awakedit.php yangakan kita buat berikut ini dengan sekaligus mengirim nilai variabel $kodeawak sesuaidengan kode dari data yang akan diedit.Berikut ini adalah skrip untuk mengedit data yang akan disimpan dengan namaawakedit.php. <html> <head> <title>Mengubah Data Awak</title> <basefont face="Arial"> </head> <body> <?php // ambil variabel untuk koneksi basis data require("koneksi.inc.php"); mysql_select_db($db, $koneksi); // cek apakah kondisi form terkirim atau tidak if (!$simpan) { // jika form tidak dalam kondisi terkirim, // tampilkan form pencarian nama // cek apakah variabel $kode dikirimkan if (!$kodeawak) { die(Tidak ada awak yang dipilih untuk diedit!); } // Tentukan query untuk ada yang akan diambilLast update 5/5/2012
87. PHP? Siapa Takut! 87 $query = "SELECT * FROM awak WHERE KODE=$kodeawak"; // jalankan query $hasil = mysql_query($query) or die(Kesalahan pada proses query!); // cek dan ekstrak hasil query $jml_rec = mysql_num_rows($hasil); if (!($jml_rec>0)) { die(Data tidak ditemukan!); } list($kode,$nama,$pangkat,$jabatan,$bertugas, $email,$hobi) = mysql_fetch_row($hasil); ?> <center> <form action="<?php echo $PHP_SELF ?>" method="POST"> <font size=5>Edit Data Awak USS Enterprise</font> <p> <table border=0 cellspacing=2 cellpadding=2> <tr> <td>Nama Awak</td> <td> <input type="hidden" name="form_kode" value="<?php echo $kode ?>"> <input type="text" name="form_nama" size="50" value="<?php echo $nama ?>" maxlength="50"> </td> </tr> <tr> <td>Pangkat</td> <td> <input type="text" name="form_pangkat" size="50" value="<?php echo $pangkat ?>" maxlength="50"> </td> </tr> <tr> <td>Jabatan</td> <td> <input type="text" name="form_jabatan" size="50" value="<?php echo $jabatan ?>" maxlength="50"> </td> </tr> <tr> <td>Lama Bertugas</td> <td> <input type="text" name="form_bertugas" size="2" value="<?php echo $bertugas ?>" maxlength="2">Last update 5/5/2012
88. PHP? Siapa Takut! 88 (dalam tahun) </td> </tr> <tr> <td>e-mail</td> <td> <input type="text" name="form_email" size="50" value="<?php echo $email ?>" maxlength="50"> </td> </tr> <tr> <td>Hobi</td> <td> <input type="text" name="form_hobi" size="50" value="<?php echo $hobi ?>" maxlength="50"> </td> </tr> <tr> <td colspan=2 align=center> <input type="submit" name="simpan" value=" Simpan "> </td> </tr> </table> </form> </center> <?php // bebaskan memori yang digunakan untuk proses mysql_free_result($hasil); } else { // jika form dalam kondisi terkirim, // lakukan perubahan basis data // tentukan query $query = "UPDATE awak SET NAMA=".addslashes($form_nama).", PANGKAT=".addslashes($form_pangkat) .", JABATAN=".addslashes($form_jabatan) .", BERTUGAS=$form_bertugas, EMAIL=".addslashes($form_email).", HOBI=".addslashes($form_hobi)." WHERE KODE=$form_kode";Last update 5/5/2012
89. PHP? Siapa Takut! 89 // lakukan proses query $hasil = mysql_query($query) or die(Kesalahan pada proses query!); // Tampilkan pesan proses edit telah selesai ?> <center> <font size=5>Proses Edit Berhasil!</font><p> Data Awak Nama <b><?php echo addslashes($form_nama) ?></b> telah disimpan perubahannya. <p> <a href="awakdsp.php">Klik di sini untuk kembali</ a> </center> <?php } ?> </body> </html>Tidak ada yang baru pada skrip PHP di atas kecuali penggunaan perintah SQL UPDATEuntuk mengubah data yang sudah ada. Kolom KODE tidak ikut diubah karena kolom iniadalah PRIMARY KEY sebagai acuan dari perubahan data yang dilakukan. Data KODEini disimpan pada form sebagai jenis komponen form hidden, agar tetap dapat dikirimkanke bagian skrip untuk menyimpan perubahan.Cobalah ubah masa tugas Deanne Troi dari 2 tahun menjadi 3 tahun. Jika skrip yangAnda buat benar, maka hasil perubahan akan langsung terlihat.Kalau Gajah Mati Meninggalkan Apa?Masalah berikutnya, jika seorang awak sudah tidak lagi terdaftar sebagai awak USSENTERPRISE baik karena perpindahan tugas maupun karena gugur, maka data awaktersebut harus dienyahkan dari sistem basis data kita. Anda perlu membuat skrip untukmenghapus data.Indentik dengan proses edit, proses penghapusan juga harus melalui tahap pemilihan datayang akan dihapus, kemudian data yang akan dihapus ditampilkan, dan terakhir dilakukanproses penghapusan. Untuk itu kita gunakan dua skrip juga, satu skrip adalah modifikasidari skrip awakdsp.php dan satu lagi skrip yang bertugas menampilkan data danmelakukan proses penghapusan data.Last update 5/5/2012
90. PHP? Siapa Takut! 90Langkah pertama, modifikasi skrip awakdsp.php dengan menambahkan hyperlink untukpenghapusan pada setiap baris data yang ada. Berikut adalah skrip awakdsp.php yangtelah dimodifikasi. Penambahan yang terjadi adalah pada yang berhuruf tebal. <html> <head> <title>Menampilkan Isi Tabel Awak</title> <basefont face="Arial"> </head> <body> <?php // ambil data koneksi dari file koneksi.inc.php require("koneksi.inc.php"); // menentukan perintah SQL untuk query $query = "SELECT * FROM awak"; // jalankan perintah SQL untuk query $hasil = mysql_db_query($db, $query, $koneksi) or die("Kesalahan pada query!"); // tampilkan hasilnya di halaman html dengan tabel echo "<font size=5>Data Awak USS Enterprise NCC-1701- D</font>n"; echo "<table border=1 cellpadding=1 cellspacing=0>n"; echo "<tr>n"; echo "<td>Kode</td>n"; echo "<td>Nama</td>n"; echo "<td>Pangkat</td>n"; echo "<td>Jabatan</td>n"; echo "<td>Tugas</td>n"; echo "<td>Hobi</td>n"; echo "<td>Pilihan</td>n"; echo "</tr>n"; // gunakan perulangan while // perulangan akan terjadi sepanjang masih ditemukan record while (list($kode,$nama,$pangkat,$jabatan,$bertugas, $email,$hobi) = mysql_fetch_row($hasil)) { // modifikasi beberapa variabel hasil mysql_fetch_row() $bertugas = $bertugas." th"; $email = "mailto:".$email; // format dalam baris dan kolom tabel echo "<tr>n"; echo "<td>$kode</td>n"; echo "<td>";Last update 5/5/2012
91. PHP? Siapa Takut! 91 echo "<a href=$email>$nama</a>"; echo "</td>n"; echo "<td>$pangkat</td>n"; echo "<td>$jabatan</td>n"; echo "<td>$bertugas</td>n"; echo "<td>$hobi</td>n"; echo "<td>"; echo "<a href="awakedit.php? kodeawak=$kode">Edit</a>"; echo " "; echo "<a href="awakdel.php? kodeawak=$kode">Hapus</a>"; echo "</td>n"; echo "</tr>n"; } echo "</table>n"; // bebaskan memori yang digunakan untuk proses mysql_free_result($hasil); ?> </body> </html>Langkah berikutnya adalah membuat skrip awakdel.php sebagai berikut. <html> <head> <title>Menghapus Data Awak</title> <basefont face="Arial"> </head> <body> <?php // ambil variabel untuk koneksi basis data require("koneksi.inc.php"); mysql_select_db($db, $koneksi); // cek apakah kondisi form terkirim atau tidak if (!$hapus) { // jika form tidak dalam kondisi terkirim, // tampilkan form pencarian nama // cek apakah variabel $kode dikirimkan if (!$kodeawak) { die(Tidak ada awak yang dipilih untuk dihapus!); }Last update 5/5/2012
92. PHP? Siapa Takut! 92 // Tentukan query untuk ada yang akan diambil $query = "SELECT * FROM awak WHERE KODE=$kodeawak"; // jalankan query $hasil = mysql_query($query) or die(Kesalahan pada proses query!); // cek dan ekstrak hasil query $jml_rec = mysql_num_rows($hasil); if (!($jml_rec>0)) { die(Data tidak ditemukan!); } list($kode,$nama,$pangkat,$jabatan,$bertugas, $email,$hobi) = mysql_fetch_row($hasil); ?> <center> <form action="<?php echo $PHP_SELF ?>" method="POST"> <font size=5>Edit Data Awak USS Enterprise</font> <p> <table border=0 cellspacing=2 cellpadding=2> <tr> <td>Nama Awak</td> <td> <input type="hidden" name="form_kode" value="<?php echo $kode ?>"> <?php echo $nama ?> </td> </tr> <tr> <td>Pangkat</td> <td> <?php echo $pangkat ?> </td> </tr> <tr> <td>Jabatan</td> <td> <?php echo $jabatan ?> </td> </tr> <tr> <td>Lama Bertugas</td> <td> <?php echo $bertugas ?> tahun </td> </tr>Last update 5/5/2012
93. PHP? Siapa Takut! 93 <tr> <td>e-mail</td> <td> <?php echo $email ?> </td> </tr> <tr> <td>Hobi</td> <td> <?php echo $hobi ?> </td> </tr> <tr> <td colspan=2 align=center> <input type="submit" name="hapus" value=" Hapus Data "> </td> </tr> </table> </form> </center> <?php // bebaskan memori yang digunakan untuk proses mysql_free_result($hasil); } else { // jika form dalam kondisi terkirim, // lakukan penghapusan data // tentukan query $query = "DELETE FROM awak WHERE KODE=$form_kode"; // lakukan proses query $hasil = mysql_query($query) or die(Kesalahan pada proses query!); // Tampilkan pesan proses hapus telah selesai ?> <center> <font size=5>Proses Hapus Berhasil!</font><p> Data Awak Nama <b><?php echo addslashes($form_nama) ?></b> telah dihapus.Last update 5/5/2012
94. PHP? Siapa Takut! 94 <p> <a href="awakdsp.php">Klik di sini untuk kembali</ a> </center> <?php } ?> </body> </html>Cobalah sekarang hapus Deanne Troi mulai dari menjalankan file skrip awakdsp.php danmemilih hyperlink Hapus. Jika skrip Anda benar dalam pembuatannya, maka prosespenghapusan akan berjalan dengan baik. Maka dengan ini tugas Anda membuat basisdata awak USS Enterprise telah diselesaikan dengan gemilang. Simpan semua dokumendan skrip Anda dan jangan lupa sesegera mungkin menghubungi Counselor Deanne Troiuntuk minta ditraktir dalam rangka pindah tugasnya.Butuh Bantuan Tambahan Dari PHP?Puhh! Anda kini telah menguasai dengan baik cara mengakses basis data MySQL dariPHP. Dengan dasar ini, maka Anda sudah dapat mulai membuat web dinamis yangberbasis data. Namun, Anda merasa sering kali mengalami kesulitan untuk melacakkesalahan pemrograman yang tidak sengaja Anda lakukan? Umumnya kesalahan terjadipada saat merancang perintah SQL, tetapi mencari di bagian mana dari perintah SQLyang salah itu juga tidak mudah dan butuh waktu. Adakah cara yang lebih cepat untukmembantu pekerjaan mencari kutu ini?PHP, kembali lagi kita harus berterimakasih kepadanya, menyediakan banyak sekali alatbantu pelacakan kesalahan (error tracking). Untuk melacak kesalahan pada prosespengaksesan MySQL, PHP menyediakan fungsi-fungsi mysql_errno() yangmenunjukkan nomor indeks dari kesalahan yang terjadi, dan mysql_error() yangmemberikan keterangan kepada kita mengenai kesalahan apa yang terjadi. Berikut iniadalah contoh penggunaannya. <html> <head> <title>Melacak Kesalahan SQL</title> </head> <body> <?php // ambil data koneksi dari file koneksi.inc.phpLast update 5/5/2012
95. PHP? Siapa Takut! 95 require("koneksi.inc.php"); // menentukan perintah SQL untuk query $query = "SELECT FROM awak"; // jalankan perintah SQL untuk query $hasil = mysql_db_query($db, $query, $koneksi); if (!$hasil) { $no_error = mysql_errno(); $pesan_error = mysql_error(); echo "Kesalahan MySQL No $no_error : $pesan_error"; } ?> </body> </html>Jika skrip di atas dijalankan, maka akan muncul pesan kesalahan sebagai berikut. Kesalahan MySQL No 1064 : You have an error in your SQL syntax near FROM awak at line 1Akhirnya, selesai juga bagian artikel yang paling melelahkan ini. Pada bagian terakhirdari PHP? Siapa Takut! akan kita bicarakan mengenai kemampuan PHP untuk membacadan menulis file serta mencoba merancang fungsi-fungsi buatan sendiri. Siapkan Andauntuk satu trayek lagi...Last update 5/5/2012
96. PHP? Siapa Takut! 96Bagian 5: Sebuah Perhentian SementaraMembangkitkan KenanganJika Anda masih juga membaca artikel bagian kelima ini, artinya Anda benar-benartangguh dan berkemauan kuat. Perjalanan yang cukup panjang dan melelahkan padabagian-bagian sebelumnya telah cukup banyak memberikan bekal bagi Anda untukmembangun sendiri situs-situs dinamis dengan skrip PHP.Pada bagian keempat, Anda telah melihat betapa PHP dapat digunakan untuk mengaksesbasis data MySQL. PHP dapat menyimpan, mencari, memperbaiki, dan menghapusinformasi yang tersimpan pada basis data MySQL dengan sangat mudah dan sederhana.Anda ternyata tidak perlu sering mengkerutkan kening Anda. Memang inilah salah satukekuatan PHP, kemudahan koneksi dengan basis data, bukan hanya dengan basis dataMySQL, tapi juga dengan banyak basis data populer lainnya.Dalam kenyataanya, kita sering mengalami bahwa data tidak tersimpan secara rapi dalambaris dan kolom basis data, dan seringkali juga Anda harus menyimpan suatu informasidalam model file teks ASCII. Problem utama menjadi muncul, karena ternyata Andabelum mengetahui caranya.Ada tiga pilihan untuk menghadapi situasi ini. Pilihan pertama Anda dapat menyuruhseseorang untuk memasukkan data-data tersebut ke dalam basis data. Pilihan kedua Andadapat mengangkat tangan sebahu dan kemudian menghela nafas panjang sembarimemutuskan untuk keluar dari pekerjaan Anda sekarang. Pilihan yang lain, Anda dapatmenggunakan PHP untuk menyelesaikan problem Anda.Karena Anda telah menunjukkan ketangguhan Anda untuk belajar PHP, saya yakinpilihan ketiga yang akan Anda ambil, dan inilah isi dari bagian kelima artikel PHP? SiapaTakut!Pada bagian akhir artikel terakhir ini, kita juga akan mempelajari mengenai pembuatanfungsi-fungsi pada skrip PHP, yang akan membantu kemalasan kita untuk menulis bagianskrip berulang-ulang. Kencangkan sabuk pengaman Anda, dan kita masuki putaran finalperjalanan kita.Ditemukan Manuskrip TuaSeperti juga bahasa pemrograman yang lain, PHP juga dilengkapi dengan fungsi-fungsiyang lengkap untuk menulis dan membaca file dengan mudah. Mari kita buat dulu sebuahfile teks yang akan kita beri nama manuskrip.txt sebagai berikut.Last update 5/5/2012
97. PHP? Siapa Takut! 97 Beribu abad yang lalu, kami adalah ras cerdas yang hidup dan berkelana ke seluruh penjuru jagad raya ini. Ketika kami sampai pada masa di mana ras kami tidak mampu mempertahankan populasi dan menuju kepunahan, kami menciptakan sebuah program protein yang membawa kode genetik dasar ras kami. Protein ini mampu berevolusi selama ribuan abad sampai akhirnya akan membentuk ras cerdas serupa kami. Kami sebarkan program ini pada sistem-sistem planet yang mampu mendukung evolusi program kami. Jika kalian menemukan manuskrip ini, maka itulah tanda bahwa program protein kami telah berhasil membentuk kalian menjadi ras cerdas yang menguasai jagad raya ini, seperti harapan kami.Sebelum Anda dapat menggunakan PHP untuk membaca isi dari file ini, Anda harusmemastikan bahwa Anda memiliki permission untuk membacanya. Pada sistem berbasisUnix/Linux, hal ini dapat diyakinkan dengan perintah: $ chmod 744 manuskrip.txtKini kita buat skrip PHP sederhana untuk membaca file tersebut dan menunjukkan isiserta ukuran file: <?php // baca file $ukuran_file = readfile("manuskrip.txt"); // tampilkan ukuran file echo "<br>Ukuran File = $ukuran_file byte."; ?>Maka hasil tampilannya kurang lebih seperti ini. Beribu abad yang lalu, kami adalah ras cerdas yang hidup dan berkelana ke seluruh penjuru jagad raya ini. Ketika kami sampai pada masa di mana ras kami tidak mampu mempertahankan populasi dan menuju kepunahan, kami menciptakan sebuah program protein yang membawa kode genetik dasar ras kami. Protein ini mampu berevolusi selama ribuan abad sampai akhirnya akan membentuk ras cerdas serupa kami. Kami sebarkan program ini pada sistem-sistem planet yang mampu mendukung evolusi program kami. Jika kalian menemukan manuskrip ini, maka itulah tanda bahwa program protein kami telah berhasil membentuk kalian menjadi ras cerdas yang menguasai jagad raya ini, seperti harapan kami. Ukuran File = 681 byte.Last update 5/5/2012
98. PHP? Siapa Takut! 98Fungsi readfile() ternyata hanya sederhana tugasnya; membaca file dan menampilkanisinya. Fungsi ini juga menghasilkan ukuran file yang kita tampilkan pada skrip PHP diatas melalui perintah echo.Begitu sederhananya, sehingga mungkin kita tidak akan begitu sering menggunakanfungsi readfile(). Kita membutuhkan fungsi yang lebih berguna lagi, yang selainmelakukan apa yang dapat dilakukan fungsi readfile(), dapat digunakan untukmemformat data yang dibaca. Cobalah gunakan fungsi file() yang akan menghasilkanpembacaan file dalam bentuk variabel array PHP. Setiap elemen pada variabel arraytersebut mewakili satu baris dalam file yang dibaca, dan jumlah elemen variabel arrayyang ada akan menunjukkan jumlah baris dalam file. Skrip PHP berikut ini akan lebihmemberi kejelasan. <?php // tentukan nama file yang akan dibaca $nama_file = "manuskrip.txt"; // baca file, masukkan ke array $isi = file($nama_file); // cari jumlah baris $jumlah_baris = sizeof($isi); echo "File $nama_file berisi $jumlah_baris baris.<p>"; // tampilkan hasil pembacaan baris per baris dengan perulangan for for ($i=0; $i<$jumlah_baris; $i++) { echo "Baris ".($i+1)." : <br>"; echo $isi[$i]."<br>"; } ?>Pada skrip PHP di atas kita menggunakan fungsi file() untuk membaca isi file yangditunjuk oleh variabel $nama_file dan baris demi baris isi file tersebut disimpan dalamvariabel array $isi. Jumlah elemen dari variabel $isi didapatkan dengan menggunakanfungsi sizeof(), dan hasilnya disimpan dalam variabel $jumlah_baris. Baris demibaris isi dari file yang tersimpan pada elemen-elemen variabel array $isi ditampilkandengan menggunakan perulangan for.Hasil dari skrip PHP di atas adalah sebagai berikut. File manuskrip.txt berisi 3 baris. Baris 1 : Beribu abad yang lalu, kami adalah ras cerdas yang hidup dan berkelana ke seluruh penjuru jagad raya ini. Ketika kami sampai pada masa di manaLast update 5/5/2012
99. PHP? Siapa Takut! 99 ras kami tidak mampu mempertahankan populasi dan menuju kepunahan, kami menciptakan sebuah program protein yang membawa kode genetik dasar ras kami. Protein ini mampu berevolusi selama ribuan abad sampai akhirnya akan membentuk ras cerdas serupa kami. Kami sebarkan program ini pada sistem-sistem planet yang mampu mendukung evolusi program kami. Baris 2 : Baris 3 : Jika kalian menemukan manuskrip ini, maka itulah tanda bahwa program protein kami telah berhasil membentuk kalian menjadi ras cerdas yang menguasai jagad raya ini, seperti harapan kami.Hilang Tak BerbekasSkrip PHP di atas, semuanya dibuat dengan asumsi dasar bahwa file yang berusahadibaca oleh skrip PHP telah tersedia. Dalam kenyataannya bisa saja file yang dimaksudtidak belum ada. Kondisi ini dapat menyebabkan waktu Anda terbuang untuk mencarikesalahan program. Anda dapat menghindari kejadian semacam ini dengan fungsifile_exists() yang dapat digunakan untuk menguji keberadaan file dan menampilkanpesan kesalahan yang sesuai jika file tersebut tidak ditemukan. Anda dapat dimodifikasiskrip PHP sebelumnya, sehingga menjadi seperti berikut ini (perubahan ditunjukkandengan huruf tebal). <?php // tentukan nama file yang akan dibaca $nama_file = "manuskrip.txt"; // cek keberadaan file if (file_exists($nama_file)) { // baca file, masukkan ke array $isi = file($nama_file); // cari jumlah baris $jumlah_baris = sizeof($isi); echo "File $nama_file berisi $jumlah_baris baris.<p>"; // tampilkan hasil pembacaan baris per baris dengan perulangan for for ($i=0; $i<$jumlah_baris; $i++) { echo "Baris ".($i+1)." : <br>"; echo $isi[$i]."<br>"; } }Last update 5/5/2012
100. PHP? Siapa Takut! 100 else { echo "<b>File tidak ditemukan!</b>"; } ?>Jalankan program di atas dengan sebelumnya mengganti nama file manuskrip.txt ataudengan menghapus file tersebut. Maka pesan kesalahan File tidak ditemukan! akanmuncul pada browser Anda.PHP juga menawarkan banyak fungsi yang dapat memberikan informasi lebih detilmengenai keadaan sebuah file, berikut ini di antaranya: • is_dir() Untuk mengetahui apakah file yang ditunjuk merupakan direktori atau bukan. • is_link() Untuk mengetahui apakah file yang ditunjuk merupakan file link. • is_executable() Untuk mengetahui apakah file yang ditunjuk dapat dieksekusi dari shell. • is_readable() Untuk mengetahui apakah file yang ditunjuk merupakan file yang dapat dibaca. • is_writable() Untuk mengetahui apakah file yang ditunjuk merupakan file yang dapat ditulis. • fileowner() Untuk mendapatkan id pengguna pemilik file. • filegroup() Untuk mendapatkan id group pengguna pemilik file. • fileperms() Untuk mendapatkan jenis permission dari suatu file. • filesize() Untuk mendapatkan ukuran dari suatu file. • filetype() Untuk mendapatkan jenis dari suatu file.Fungsi-fungsi di atas sebagian besar hanya berarti pada implementasi PHP di sistem fileberbasis Unix/Linux. Anda tidak akan mendapatkan hasil yang akurat jika fungsi-fungsitersebut dijalankan pada sistem operasi lain, misalnya MS Windows 9x atauNT/2000/XP.Anda dapat mencoba skrip berikut ini pada sistem Unix/Linux Anda. Hasilnya mungkinakan sangat berbeda jika Anda jalankan skrip ini pada sistem operasi yang lainLast update 5/5/2012
101. PHP? Siapa Takut! 101 <?php // tentukan nama file yang akan dibaca $nama_file = "manuskrip.txt"; // cek keberadaan file if (file_exists($nama_file)) { echo "Nama File : <b>$nama_file</b><br>"; // check apakah file merupakan direktori if (is_dir($nama_file)) { echo "File adalah direktori.<br>"; } // check apakah file merupakan link if (is_link($nama_file)) { echo "File adalah link.<br>"; } // check apakah file executable if (is_executable($nama_file)) { echo "File sifatnya executable.<br>"; } // check apakah file readable if (is_readable($nama_file)) { echo "File sifatnya readable.<br>"; } // check apakah file writable if (is_writable($nama_file)) { echo "File sifatnya writable.<br>"; } echo "Ukuran File : ".filesize($nama_file)."<br>"; echo "Pemilik File : ".fileowner($nama_file)."<br>"; echo "Group Pemilik File : ".filegroup($nama_file)."<br>"; echo "Permission File : ".fileperms($nama_file)."<br>"; echo "Jenis File : ".filetype($nama_file)."<br>"; } else { echo "<b>File tidak ditemukan!</b>"; } ?>Last update 5/5/2012
102. PHP? Siapa Takut! 102 Pada sistem Unix/Linux, Anda akan mendapatkan hasil sebagai berikut: Nama File : manuskrip.txt File sifatnya readable. File sifatnya writable. Ukuran File : 681 Pemilik File : 538 Group Pemilik File : 100 Permission File : 33188 Jenis File : filePada sistem MS Windows 98, Anda kemungkinan akan mendapatkan hasil sebagaiberikut: Nama File : manuskrip.txt File sifatnya readable. File sifatnya writable. Ukuran File : 681 Pemilik File : 0 Group Pemilik File : 0 Permission File : 33206 Jenis File : fileInikah, Tanda-tandanya...Sampai sejauh ini kita masih selalu membicarakan masalah pembacaan file, bagaimanadengan penulisan file? Penulisan file dalam PHP merupakan proses yang lebih kompleksdan melibatkan pointer file. Pointer file selain menandai file yang dibuka, juga memilikiinformasi mengenai penanda letak/posisi dalam sebuah file yang dibuka. Proses penulisan(maupun pembacaan) dilakukan mulai pada posisi pointer file ini.Fungsi yang akan kita gunakan untuk melakukan penulisan file adalah fungsi fopen(),yang sesungguhnya juga dapat digunakan untuk pembacaan file. Fungsi ini akanmembuka sebuah pointer file, dan membutuhkan dua parameter yaitu nama file dan modeuntuk file yang akan dibuka. Mode ini juga sekaligus menentukan posisi awal pointerfile. Jenis-jenis mode pada fungsi fopen() adalah: • Mode Hanya Baca (read-only), diaktivasi dengan parameter "r". Mode ini akan menempatkan posisi pointer file pada awal file. • Mode Hanya Tulis (write-only), diaktivasi dengan parameter "w". Mode ini akan membuat file baru dan menempatkan posisi pointer file pada awal file. Jika file yang dibuka telah ada, maka isi dari file tersebut langsung dihapus. • Mode Baca-Tulis (read-write), diaktivasi dengan parameter "r+". File dibuka untuk dapat dibaca maupun ditulis. Posisi pointer file adalah pada awal file.Last update 5/5/2012
103. PHP? Siapa Takut! 103 • Mode Tambahkan/Append (hanya tulis), diaktivasi dengan parameter "a". Pada mode ini, posisi pointer file adalah pada akhir dari file yang akan memudahkan kita untuk menambah/menyambung data ke data yang telah ada. Jika file yang dimaksud tidak ditemukan, maka file yang baru akan langsung dibuat. • Mode Tambahkan/Append (baca/tulis), diaktivasi dengan parameter "a+". Pada mode ini, posisi pointer file juga pada akhir dari file yang akan memudahkan kita untuk menambah/menyambung data ke data yang telah ada. Jika file yang dimaksud tidak ditemukan, maka file yang baru akan langsung dibuat. Tambahannya, selain menambah data, kita juga dapat melakukan pembacaan file.Untuk sistem operasi yang tidak dapat membedakan antara file biner dan file teks ASCIIbiasa, misalkan di keluarga MS Windows, dibutuhkan sebuah parameter lagi jika kitaingin mengakses file jenis biner, yaitu parameter "b". Parameter ini tidak berguna jikakita gunakan pada sistem operasi berbasis Unix atau Linux karena secara otomatis sistemfilenya telah membedakan file biner dengan file teks ASCII.Setelah membuka file dengan mode yang tepat, untuk melakukan penulisan ke file dapatkita gunakan fungsi fputs(). Jika kita selesai bekerja dengan file, maka kita harusmenutup file tersebut dengan perintah fclose(). Contoh skrip PHP berikut ini akanmenunjukkan caranya. <?php // tentukan nama file $nama_file = "cobafile.txt"; // buka file $kodefile = fopen($nama_file,"a"); // tentukan data string $data = "Ini adalah transmisi sub space dari United Federation of Planets. Prioritas transmisi ini adalah pribadi dan rahasia. Jika benar demikian, apakah mungkin Anda menangkap transmisi ini... ha... ha... ha...!"; // tuliskan data ke file fputs($kodefile, $data); // tutup file fclose($kodefile); ?>Pada skrip PHP di atas, kita menentukan terlebih dahulu nama file yang akan dibuka.Fungsi fopen() yang kita gunakan akan membuka file tersebut dengan mode appendwrite only dan menghasilkan sebuah pointer file yang kita simpan pada variabel$kodefile. Jadi setiap yang kita gunakan variabel $kodefile, maksudnya adalah fileLast update 5/5/2012
104. PHP? Siapa Takut! 104(dalam contoh di atas cobafile.txt), yang dibuka untuk proses append write only.Posisi pointer file akan diletakkan pada akhir dari file tersebut, untuk memastikanpenambahan data tidak merusak data sebelumnya. Jika file yang dimaksud tidakditemukan, maka PHP otomatis membuat file baru dengan nama cobafile.txt.String data ditentukan setelah itu, kemudian dilakukan penulisan ke file dengan fungsifputs(). Untuk memastikan penulisan dilakukan ke file yang benar, maka harusdiyakinkan bahwa pointer file yang digunakan sebagai parameter dari fungsi fputs()adalah $kodefile. Parameter yang lain dari fungsi ini adalah string data yang akanditulis, yang disimpan pada variabel $data. Terakhir, tentu saja, kita harus selalumembiasakan kerja rapi, jika kita membuka sesuatu, maka akhiri dengan menutup setelahsemua aktivitas kita selesai. Membiarkan sesuatu tetap terbuka dapat mempermalukankita, terutama jika berkaitan dengan hal-hal vital. Fungsi fclose() kita gunakan untukmenutup file yang telah kita buka sebelumnya. Parameter fungsi ini adalah pointer file,untuk memastikan kita telah menutup file yang benar.Sekarang kita akan membuat sebuah contoh buku tamu yang bersahaja dengan ilmu yangtelah kita dapatkan selama ini. <html> <head> <title>Buku Tamu Sederhana</title> <basefont face="Arial"> </head> <body> <?php // tentukan nama file $nama_file = "bukutamu.txt"; // cek apakah ada form yang dikirim if ($simpan) { // buka file $kodefile = fopen($nama_file,"a"); // simpan isi form fputs($kodefile, date("r",time())."<br>"); if (trim($nama)=="") { $nama = "Mr. X"; } fputs($kodefile, "Nama : <b>$nama</b><br>"); if (trim($e-mail)=="") { $email = "(tidak ada)"; } fputs($kodefile, "e-mail : <b>$email</b><br>"); if (trim($komentar)=="") { $komentar = "(tidak ada)"; }Last update 5/5/2012
105. PHP? Siapa Takut! 105 fputs($kodefile, "Komentar : <b>$komentar</b><br>"); fputs($kodefile, ".<br>"); // tutup file fclose($kodefile); } ?> <font size=5>Mohon Isi Buku Tamu Ini</font> <form action="<?php echo $PHP_SELF; ?>" method="POST"> <table border=0 cellpadding=2 cellspacing=2> <tr> <td valign="top">Nama</td> <td> <input type="text" name="nama" size=50 maxlength=50> </td> </tr> <tr> <td>e-mail</td> <td valign="top"> <input type="text" name="email" size=50 maxlength=50> </td> </tr> <tr> <td valign="top">Komentar</td> <td> <textarea name="komentar" rows="4" cols="50"></textarea> </td> </tr> <tr> <td colspan=2 align="center"> <input type="submit" name="simpan" value="Simpan"> </td> </tr> </table> </form> <br> <hr> <br> <?php // tampilkan isi file jika ada if (file_exists($nama_file)) { echo "<b>Daftar Buku Tamu Yang Ada</b><p>"; readfile($nama_file);Last update 5/5/2012
106. PHP? Siapa Takut! 106 } else { echo "File buku alamat belum ada!"; } ?> </body> </html>Nah, sebuah buku tamu yang sederhana namun fungsional telah berhasil kita buat denganPHP tanpa basis data. Anda mungkin menemukan fungsi baru yaitu date() dan time(),yang berhubungan dengan waktu saat proses dilakukan. Fungsi time() (tanpa parameter)akan memberikan waktu saat fungsi ini dijalankan dihitung dari jumlah detik semenjakEpoch Unix atau tanggal 1 Januari 1970 jam 00:00:00 GMT. Untuk dapat menampilkaninformasi waktu ini dengan benar, maka dibutuhkan fungsi date() yang memiliki duaparameter/argumen. Argumen pertama adalah format waktu, dan argumen lainnya adalahinformasi waktu, dalam hal ini adalah hasil dari fungsi time(). Format waktu "r"menghasilkan bentuk standar RFC 822, contohnya "Thu, 25 Dec 2001 17:05:07+0700". Format-format lain mengenai tanggal dan waktu ini akan kita bicarakan padaartikel yang terpisah.Saat skrip PHP di atas dijalankan untuk pertama kalinya, akan muncul form isian bukualamat, dan pesan bahwa file buku alamat belum ada. Jika form diisi dan dikirim dengantombol simpan, maka skrip secara otomatis memanggil dirinya sendiri dan menambahkandata isian form ke file teks. Jika file tidak ditemukan, maka akan dibuat file baru. Setelahmelakukan penambahan data teks, maka form kembali ditampilkan, dan isi file teks bukualamat ditampilkan setelah form. Demikian seterusnya. Ternyata semudah itu, ya!?Jelangkung, Jelangkung, Di Sini Ada Pesta Kecil!Bagian paling akhir dari artikel ini akan membahas teknik dasar membuat fungsi dalamskrip PHP. Mengapa kita perlu fungsi? Jawabannya adalah karena sifat pemalas kitamembuat adanya keengganan kita menulis kode yang sama berulang-ulang. Hidup akanlebih nyaman karena waktu penulisan kode jadi lebih lebih singkat, dan tentu saja, makinsedikit kode, jumlah kesalahan yang akan muncul juga relatif berkurang. Kening kitatidak akan terlalu banyak berkerut meneliti baris per baris kode yang salah.Penulisan skrip dalam bentuk fungsi-fungsi terpisah akan membuat program kita lebihbersifat modular. Dengan model seperti ini, pengembangan lebih lanjut skrip kita menjadilebih cepat dan mudah.Sebagaian besar perintah dalam skrip PHP adalah merupakan fungsi. Fungsi-fungsi yangkita gunakan selama ini, misalnya fungsi echo(), fungsi basis data, merupakan fungsiyang telah terdefinisi sejak awal dalam PHP. Kita tinggal menggunakannya sesuaidengan tujuan fungsi.Last update 5/5/2012
107. PHP? Siapa Takut! 107Sebagai makhluk yang tidak pernah puas, kadang-kadang kita ingin membuat fungsi-fungsi sendiri, yang menggabungkan fungsi-fungsi yang ada menjadi sesuai dengankeinginan di hati kita yang terdalam. Kedengarannya puitis sekali.PHP menyediakan fasilitas pembuatan fungsi sendiri, sehingga hasrat Anda untuk hiduplebih nyaman akan terpenuhi. Sulitkah? Kalau sulit, berarti Anda sedang tidakmempelajari PHP...Bentuk dasar pendeklarasian atau pendefinisian fungsi adalah sebagai berikut: <?php function jelangkung() { [perintah 1]; [perintah 2]; [perintah 3]; .... dan seterusnya ... } ?>Setelah mendefinisikan sebuah fungsi, maka kita dapat dengan mudah memanggilnyamelalui skrip. Lihatlah contoh berikut ini. <?php function jelangkung() { [perintah 1]; [perintah 2]; [perintah 3]; .... dan seterusnya ... } jelangkung(); ?>Pada saat parser PHP menemukan perintah pemanggilan fungsi, maka kontrol eksekusiprogram akan beralih pada lokasi dimana fungsi tersebut didefinisikan. Setelah seluruhperintah dalam blok fungsi itu dijalankan, maka kontrol eksekusi program kembali kelokasi tempat pemanggilan fungsi tersebut.Menjadi Calon Kadet StarfleetHm... main jelangkung ternyata tidak menarik. Kembali kita ke Star Trek. Contoh berikutini akan menjelaskan mengenai implementasi fungsi sederhana. Berikut ini adalahpertanyaan dan jawaban soal benar/salah untuk seleksi calon kadet Starfleet, kekuatanmiliter United Federation of Planets.Last update 5/5/2012
108. PHP? Siapa Takut! 108 <html> <head> <title>Latihan Soal Jawab Calon Kadet Starfleet</title> <basefont face="Arial"> </head> <body> <?php // definisikan fungsi-fungsi function jawaban_benar() { echo "Benar!"; } function jawaban_salah() { echo "Salah!"; } ?> <p> Ras yang pertama kali berjumpa dengan ras bumi adalah ras Vulcan.<br> Jawaban : <?php jawaban_benar() ?> <p> Kode pesawat USS Enterprise pada Star Trek: The Original Series adalah NCC-1701-C.<br> Jawaban : <?php jawaban_salah() ?> <p> Kapal Angkasa ras Romulan (War Bird) dapat hilang dari pandangan.<br> Jawaban : <?php jawaban_benar() ?> <p> Teknologi Transporter dan Replikator memiliki prinsip kerja yang sama.<br> Jawaban : <?php jawaban_benar() ?> <p> Teknologi Warp yang digunakan ras Borg menggunakan Transwarp Conduit.<br> Jawaban : <?php jawaban_benar() ?> </body> </html>Last update 5/5/2012
109. PHP? Siapa Takut! 109Berikut ini adalah hasil skrip PHP bila dijalankan. Ras yang pertama kali berjumpa dengan ras bumi adalah ras Vulcan. Jawaban : Benar! Kode pesawat USS Enterprise pada Star Trek: The Original Series adalah NCC-1701-C. Jawaban : Salah! Kapal Angkasa ras Romulan (War Bird) dapat hilang dari pandangan. Jawaban : Benar! Teknologi Transporter dan Replikator memiliki prinsip kerja yang sama. Jawaban : Benar! Teknologi Warp yang digunakan ras Borg menggunakan Transwarp Conduit. Jawaban : Benar!Kita dapat memanggil sebuah fungsi sebelum didefinisikan, asal masih dalam satu skrip.Ubahlah skrip sebelumnya menjadi seperti di bawah ini. Hasil keluarannya ditanggungtidak berbeda. <html> <head> <title>Latihan Soal Jawab Calon Kadet Starfleet</title> <basefont face="Arial"> </head> <body> <p> Ras yang pertama kali berjumpa dengan ras bumi adalah ras Vulcan.<br> Jawaban : <?php jawaban_benar() ?> <p> Kode pesawat USS Enterprise pada Star Trek: The Original Series adalah NCC-1701-C.<br> Jawaban : <?php jawaban_salah() ?> <p> Kapal Angkasa ras Romulan (War Bird) dapat hilang dari pandangan.<br> Jawaban : <?php jawaban_benar() ?> <p> Teknologi Transporter dan Replikator memiliki prinsip kerja yang sama.<br> Jawaban : <?php jawaban_benar() ?>Last update 5/5/2012
110. PHP? Siapa Takut! 110 <p> Teknologi Warp yang digunakan ras Borg menggunakan Transwarp Conduit.<br> Jawaban : <?php jawaban_benar() ?> <?php // definisikan fungsi-fungsi function jawaban_benar() { echo "Benar!"; } function jawaban_salah() { echo "Salah!"; } ?> </body> </html>Apa Yang Kuberikan, Apa Yang KudapatFungsi-fungsi dapat pula kita berikan argumen untuk diolah di dalam fungsi, dan dapatpula kita buat agar memberikan sebuah hasil untuk diolah di luar fungsi. Contoh berikutadalah hasil modifikasi fungsi pada skrip terdahulu, sehingga fungsi-fungsi tersebut dapatmemberikan sebuah hasil untuk diolah di luar fungsi. <html> <head> <title>Latihan Soal Jawab Calon Kadet Starfleet</title> <basefont face="Arial"> </head> <body> <?php // definisikan fungsi-fungsi function jawaban_benar() { $jawaban = "Benar!"; return $jawaban; } function jawaban_salah() { $jawaban = "Salah!"; return $jawaban; }Last update 5/5/2012
111. PHP? Siapa Takut! 111 ?> <p> Ras yang pertama kali berjumpa dengan ras bumi adalah ras Vulcan.<br> Jawaban : <?php $hasil = jawaban_benar(); echo $hasil; ?> <p> Kode pesawat USS Enterprise pada Star Trek: The Original Series adalah NCC-1701-C.<br> Jawaban : <?php $hasil = jawaban_salah(); echo $hasil; ?> <p> Kapal Angkasa ras Romulan (War Bird) dapat hilang dari pandangan.<br> Jawaban : <?php $hasil = jawaban_benar(); echo $hasil; ?> <p> Teknologi Transporter dan Replikator memiliki prinsip kerja yang sama.<br> Jawaban : <?php $hasil = jawaban_benar(); echo $hasil; ?> <p> Teknologi Warp yang digunakan ras Borg menggunakan Transwarp Conduit.<br> Jawaban : <?php $hasil = jawaban_benar(); echo $hasil; ?> </body> </html>Terlihat perbedaan cara penanganan hasil fungsi. Pada skrip sebelumnya fungsi tidakmemberikan hasil/nilai yang dapat diolah, tetapi langsung menampilkan sesuatu padamedia keluaran standar (melalui perintah echo()). Karena fungsi yang telah dimodifikasitidak dapat langsung menampilkan hasil fungsi tetapi memberikan hasil/nilai, makasebuah variabel (dalam skrip di atas adalah $hasil) ditugaskan untuk menampung nilaiyang dihasilkan oleh fungsi, sebelum ditampilkan dengan perintah echo().Contoh berikut ini memberikan gambaran mengenai argumen/parameter fungsi. <html> <head> <title>Persamaan Luas Segitiga</title> <basefont face="Arial"> </head> <body> <?php // definisikan fungsi-fungsi function luas_segitiga($alas, $tinggi) { $jawaban = 0.5 * $alas * $tinggi;Last update 5/5/2012
112. PHP? Siapa Takut! 112 return $jawaban; } $alas_segitiga = 6; $tinggi_segitiga = 9; ?> <p> Luas Segitiga dengan<br> - Alas : <?php echo $alas_segitiga; ?><br> - Tinggi : <?php echo $tinggi_segitiga; ?><br> Adalah = <?php $hasil = luas_segitiga($alas_segitiga, $tinggi_segitiga); echo $hasil; ?> <br> </body> </html>Fungsi luas_segitiga() yang kita buat, membutuhkan dua argumen, yaitu argumenpanjang alas ($alas) dan argumen tinggi segitiga ($tinggi). Nilai kedua argumen inidiberikan pada saat pemanggilan fungsi yang disimpan dalam bentuk variabel PHPselama fungsi tersebut dieksekusi agar dapat digunakan pada proses eksekusi perintah-perintah PHP di dalam blok fungsi. Fungsi ini akan menghasilkan nilai luas segitiga yangdiperoleh dari operasi matematis terhadap kedua argumen tersebut.Setiap saat di dalam skrip PHP, kita dapat memanggil/menggunakan secara berulang-ulang fungsi-fungsi yang kita definisikan, baik yang didefinisikan dalam skrip tersebutmaupun pada skrip lain yang telah diikutsertakan dengan perintah include() ataurequire(). Betapa sebuah berita yang baik bagi kita, karena kita tidak perlumenghabiskan waktu lagi untuk menulis beberapa bagian kode secara berulang-ulang.Anda pun bisa memiliki lebih banyak waktu untuk menonton acara TV kegemaran Anda.Masalah Pribadi dan Masalah UmumKini kita akan melihat bagaimana sebuah variabel dapat dipakai oleh fungsi. Aturandasarnya adalah: • Setiap variabel dalam sebuah fungsi adalah variabel lokal yang hanya berlaku di dalam fungsi itu sendiri. Variabel ini hanya bertahan dalam memori saat fungsi dieksekusi dan hilang dari memori saat fungsi selesai dieksekusi. Variabel lokal ini tidak dapat diakses dari luar fungsi. • Fungsi pada dasarnya tidak dapat mengakses variabel yang berada di luar fungsi tersebut.Last update 5/5/2012
113. PHP? Siapa Takut! 113 • Operasi terhadap argumen di dalam fungsi, tidak akan berpengaruh apa-apa terhadap variabel di luar fungsi yang digunakan sebagai argumen, bahasa dewanya, setiap argumen bersifat passed by value.Mari kita lihat contoh skrip berikut ini. <?php // berikan nilai ke sebuah variabel di luar fungsi $jenis_kecepatan = "impuls"; // fungsi yang akan mengubah nilai variabel function ubah_kecepatan($nama) { $jenis_kecepatan = $nama; return $jenis_kecepatan; } // tampilkan nilai variabel sebelum pemanggilan fungsi echo "Sebelum pemanggilan fungsi, jenis kecepatan adalah $jenis_kecepatan.<p>"; // panggil fungsi ubah_kecepatan("warp"); echo "Setelah pemanggilan fungsi, jenis kecepatan adalah $jenis_kecepatan."; ?>Jalankan skrip PHP di atas, dan Anda akan dapatkan hasil sebagai berikut. Sebelum pemanggilan fungsi, jenis kecepatan adalah impuls. Setelah pemanggilan fungsi, jenis kecepatan adalah impuls.";Perubahan nilai variabel $jenis_kecepatan di dalam fungsi tidak berpengaruh terhadapnilai variabel $jenis_kecepatan yang di luar fungsi, karena kedua variabel ini berbedakonteksnya. Variabel $jenis_kecepatan yang ada di dalam fungsi adalah variabel lokalfungsi dan tidak ada kaitannya dengan variabel $jenis_kecepatan yang berada di luarfungsi. Itu sebabnya nilai variabel $jenis_kecepatan di luar fungsi tetap tidak berubahsetelah pemanggilan fungsi.Bagaimana jika Anda ingin sekali mengubah nilai variabel di luar fungsi tapi dari dalamfungsi? Ada dua pilihan. Pilihan pertama, Anda putus asa dan tidak mau menggunakanPHP lagi, atau Anda dapat gunakan fungsi/perintah global.Last update 5/5/2012
114. PHP? Siapa Takut! 114Fungsi/perintah global akan membuat pengecualian dari aturan di atas, dan langsungmembuat variabel yang ada pada fungsi mereferensikan variabel dengan nama sama yangada di luar fungsi. Tidak usah bingung atas bahasa berbelit ini, langsung saja perhatikanmodifikasi skrip sebelumnya. <?php // berikan nilai ke sebuah variabel di luar fungsi $jenis_kecepatan = "impuls"; // fungsi yang akan mengubah nilai variabel function ubah_kecepatan($nama) { global $jenis_kecepatan; $jenis_kecepatan = $nama; return $jenis_kecepatan; } // tampilkan nilai variabel sebelum pemanggilan fungsi echo "Sebelum pemanggilan fungsi, jenis kecepatan adalah $jenis_kecepatan.<p>"; // panggil fungsi ubah_kecepatan("warp"); echo "Setelah pemanggilan fungsi, jenis kecepatan adalah $jenis_kecepatan."; ?>Kini coba Anda jalankan skrip ini lagi, niscaya Anda akan mendapatkan hasil seperti dibawah ini. Sebelum pemanggilan fungsi, jenis kecepatan adalah impuls. Setelah pemanggilan fungsi, jenis kecepatan adalah warp.";Kebebasan Yang BerartiSejauh ini, fungsi-fungsi yang Anda buat selalu tertentu jumlah argumennya. Bisa tidakada sama sekali, atau dalam jumlah yang pasti. Bagaimana jika kita tidak dapatmemastikan jumlah argumen yang kita masukkan ke sebuah fungsi? Kadang satu, duaatau sekali waktu sepuluh argumen. Bisakah PHP menangani hal ini?Karena topik ini masuk dalam artikel, jelas jawabannya pasti "bisa". Baiklah, sekarangkita lihat caranya.PHP 4, menyediakan fungsi-fungsi yang dapat kita gunakan untuk maksud ini, yaitufungsi func_num_args() yang akan menghasilkan jumlah argumen yang diberikan padasebuah fungsi, dan fungsi func_get_args() yang akan menyimpan semua argumenLast update 5/5/2012
115. PHP? Siapa Takut! 115fungsi yang diberikan ke dalam bentuk variabel array. Kita dapat melihatimplementasinya pada skrip berikut ini. <html> <head> <title>Fungsi Dengan Jumlah Argumen Bebas</title> </head> <body> <?php function awak_enterprise() { $argumen = func_get_args(); return $argumen; } $nama_awak = awak_enterprise("Piccard", "Riker", "LaForge", "Worf"); ?> Berikut ini adalah nama-nama awak kapal USS Enterprise: <ul> <?php for ($i=0; $i < sizeof($nama_awak); $i++) { echo "<li>" . $nama_awak[$i] . "n"; } ?> </ul> </body> </html>Hasil dari skrip di atas adalah: Berikut ini adalah nama-nama awak kapal USS Enterprise: • Piccard • Riker • LaForge • WorfBeginilah Akhirnya...Selesai sudah perjalanan panjang kita dalam mempelajari dasar-dasar yang palingmendasar bagi pemula PHP. Dengan bekal lima bagian artikel ini, sesungguhnya Andatelah cukup siap untuk memulai sendiri membangun aplikasi atau situs dinamis denganLast update 5/5/2012
116. PHP? Siapa Takut! 116PHP. Tentunya, Anda harus banyak berlatih sendiri dan membaca artikel-artikel lain baiktingkat pemula, menengah maupun lanjutan/terapan. Kini Anda sadar, bahwa ternyatamenggemari Star Trek dapat membantu Anda, paling tidak akan melatih Anda untukberani mengunjungi tempat yang belum pernah dikunjungi oleh siapa pun.Tetaplah belajar PHP, dan jangan bosan menantikan topik lain dari belajar PHP. Sampaidi sini dulu .... Merdeka!*)Last update 5/5/2012
117. PHP? Siapa Takut! 117Bagian 1: Biarkan Seperti Apa AdanyaKapten Piccard MarahAnda adalah seorang officer pada USS Enterprise bagian pengolahan data. Andabertanggung jawab terhadap basis data awak kapal. Hari ini Anda dipanggil menghadapKapten Jean Luc Piccard. Sangat jarang Anda bisa bertemu secara khusus dengan KaptenPiccard. Anda berharap akan mendapat hal yang baik dari pertemuan ini. Benarkah?Memasuki ruang pribadi Kapten Piccard terasa membuat bulu kuduk Anda tiba-tibaberdiri. Terasa hawa negatif ada di sekitar ruang itu. Pintu keluar tertutup, Kapten Piccardmemutar duduknya sehingga berhadapan dengan Anda. Anda kaget, karena KaptenPiccard menatap Anda dengan sorot mata tajam. Ada apakah gerangan?Setelah protokoler militer selesai, Kapten Piccard buka bicara, "Jelaskan apakah sayaharus mempertahankan orang yang telah membuat kewibawaan saya jatuh di kalanganperwira Starfleet?"Anda menjawab, "Mohon dijelaskan apa yang terjadi, Kapten. Jika itu memang kesalahansaya, maka saya bersedia mempertanggungjawabkannya.""Bagus!" ungkap Kapten Piccard. "Ketika acara rehat bersama perwira Starfleet, Admiralmengadakan acara kuis pengenalan foto awak kapal oleh kaptennya. Betapamemalukannya ketika saya tidak mampu mengenali beberapa foto awak kapal USSEnterprise. Kamu tahu sebabnya?""Siap, tahu, Kapten!" jawab Anda. "Database awak kapal kita tidak dilengkapi denganfoto, sehingga Kapten kesulitan menghafal foto awak kapal!"Piccard kembali bicara, "Baik. Kamu sudah memahaminya. Sebagai orang yangberkompeten dalam Database awak kapal, kamu sudah tahu apa yang harus dilakukan.Lakukanlah hal itu atau kamu dapat dianggap tidak layak menjalankan tugasmu.Pertemuan selesai!"Anda mengerti bahwa Anda harus melengkapi database awak USS Enterprise yang telahAnda buat (lihat artikel PHP? Siapa Takut! bagian 4) dengan kemampuan untukmenyimpan foto awak USS Enterprise. Taruhannya adalah karir Anda di Starfleet. Jadiapa yang harus Anda lakukan?Kawan Lama KitaSaat ini kita akan menyegarkan kembali ingatan kita pada database yang pernah kita buatpada saat yang lalu. Masuk ke shell dan panggil perintah untuk menggunakan MySQLClient.Last update 5/5/2012
118. PHP? Siapa Takut! 118 $ mysql -u [namapengguna] -pMasukkan password (jika MySQL Anda telah diset untuk menggunakan password).Tentunya Anda masih dapat mengingat nama database yang akan kita gunakan adalahuss_enterprise. Setelah muncul prompt mysql>, ketiklah: mysql> USE uss_enterprise;Jika Anda telah menghapus atau belum membuat database uss_enterprise dan tabelnya(awak), Anda bisa membuatnya dengan membaca kembali artikel PHP? Siapa Takut!bagian keempat. Jika semuanya beres, maka ketikan perintah berikut ini. mysql> DESCRIBE awak;Maka yang seharusnya muncul di layar adalah kurang lebih sebagai berikut.+----------+-------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+----------------+| KODE | int(11) | | PRI | NULL | auto_increment || NAMA | varchar(50) | | | | || PANGKAT | varchar(50) | | | | || JABATAN | varchar(50) | | | | || BERTUGAS | smallint(6) | | | 0 | || EMAIL | varchar(50) | | | | || HOBI | varchar(50) | | | | |+----------+-------------+------+-----+---------+----------------+7 rows in set (0.06 sec)Data terakhir yang tersimpan dalam database dapat dilihat dengan cara: mysql> SELECT NAMA,PANGKAT,JABATAN FROM awak;Yang muncul di layar adalah kurang lebih sebagai berikut. +------------------+-----------+---------------+ | NAMA | PANGKAT | JABATAN | +------------------+-----------+---------------+ | Jean luc Piccard | Captain | Captain | | William T. Riker | Commander | First Officer | | Deanne Troi | Commander | Counselor | +------------------+-----------+---------------+ 3 rows in set (0.11 sec)Kalau Anda adalah seorang yang suka ngotot, pekerja keras, dan suka meraih sesuatudengan usaha sendiri, Anda bisa mulai mencari sendiri di Internet gambar untuk masing-masing Awak USS ENTERPRISE tersebut. Pilihan lainnya, Anda bisa mendownloadpaket skrip artikel ini di sini.Last update 5/5/2012
119. PHP? Siapa Takut! 119Sebagai seorang perwira Starfleet, Anda harus dapat memastikan semuanya berjalansebagaimana mestinya. Lakukan tindakan-tindakan yang dianggap perlu untuk maksudtersebut. Pilihan lainnya, Anda mungkin terpaksa menikmati pensiun dini di salah satubulan di Mars.Jalan Bercabang dan BerlikuAda banyak cara menyimpan gambar atau foto dalam aplikasi berbasis web. Secaraumum dibedakan menjadi: • Disimpan dalam sistem file dan diindeks/diakses melalui informasi yang yang ada pada basis data • Disimpan langsung sebagai data pada basis data.Setiap cara, memiliki kelebihan dan kekurangannya masing-masing. Melalui artikel iniAnda akan mulai mencoba menyimpan gambar langsung sebagai data pada basis dataMySQL, setelah itu di bagian akhir dari seri artikel ini, Anda akan belajar menggunakancara lebih sederhana untuk menyimpan gambar dalam sistem file.Mengapa cara yang lebih rumit dibahas lebih dulu? Jika Anda bertanya seperti ini, makaAnda harus segera mengingat kembali pepatah lama, berakit-rakit ke hulu berenang ketepian, bersakit-sakit dahulu bersenang-senang kemudian. Pesan saya cuma, jangansampai keterusan sakit. Minum obat sesuai dengan anjuran dokter.Mau Disanggul atau Diurai...Foto, gambar, dan dokumen umumunya adalah file data biner, sementara field-fielddalam database umumnya untuk menampung data ASCII. Untuk dapat menampung foto,gambar, dan dokumen, dibutuhkan field database yang dapat menyimpan data biner.MySQL dapat digunakan untuk maksud ini karena memiliki jenis field biner yaituTINYBLOB, BLOB, MEDIUMBLOB, dan LONGBLOB. Perbedaan di antarakeempatnya adalah dalam kapasitas maksimum penyimpanan data biner. Untukkebutuhan standar, tipe field BLOB sudah cukup untuk menyimpan file image.Anda juga memiliki pilihan lain untuk menyimpan file biner dalam MySQL dengan tetapmenggunakan field-field untuk data ASCII. Untuk kebutuhan ini, diperlukan field jenisTINYTEXT, TEXT, MEDIUMTEXT, dan LONGTEXT yang dapat menampung dataASCII berukuran besar. Untuk dapat menyimpan data biner (8-bit) ke dalam field dataASCII (7-bit) dibutuhkan konversi data. Data biner dapat dikonversi dengan mudahmenjadi data ASCII dengan metoda penkodean base64 yang lazim digunakan untukmelakukan pengiriman attachment file biner melalui e-mail (base64 encoding). Hasilpengkodean base64 adalah file ASCII teks yang untuk dapat dikembalikan menjadi databiner harus dikonversi balik menggunakan base64 decoder.Last update 5/5/2012
120. PHP? Siapa Takut! 120Cara yang pertama memiliki keunggulan dalam hal besar data yang disimpan dalamdatabase MySQL dan juga kecepatan penyimpanan dan pembacaan data, akibat tidakadanya proses konversi dari biner ke teks ASCII maupun sebaliknya. Agar tidakmenyebabkan penurunan kualitas dan kelengkapan data konversi dari 8-bit ke 7-bitmembawa konsekuensi bertambahnya ukuran data hasil konversi.Penyimpanan data biner dalam bentuk data ASCII di lain pihak memberikan keuntungandalam portabilitas baik data maupun aplikasi. Dengan metoda konversi data ini, makaAnda dapat memastikan skrip yang Anda buat dapat diimplementasikan pada databaseselain MySQL bahkan pada database yang secara native tidak memiliki field untukmenampung data jenis biner. Beberapa perangkat pengembangan (development tools)memiliki kelemahan dalam mengolah data biner, misalnya Microsoft Visual Basic.Kelemahan ini bisa diatasi dengan bantuan enkoder/dekoder base64, karena Visual Basicakan lebih mudah mengolah string ASCII hasil konversi dari 8-bit ke 7-bit. Jika Andaingin mengakses data biner pada database Anda selain dengan PHP, pertimbangnkanmetode penyimpanan yang kedua ini untuk membuat skrip PHP Anda.Kedua cara di atas akan kita bahas semuanya dalam artikel ini. Untuk pemanasan kitaakan mulai dengan metode atau cara yang pertama, yakni menyimpan data biner dalamfield biner MySQL.Tambahkan Arti Hidup Ini...Kini saatnya untuk mulai menambahkan field baru dalam tabel awak. Karena kita akanmenyimpan data biner di MySQL dalam bentuk aslinya, maka diperlukan field biner(BLOB) yang akan kita namai dengan FOTO. Tambahkan field ini dengan perintahMySQL sebagai berikut: mysql> ALTER TABLE awak ADD FOTO BLOB;Karena Anda mungkin saja memasukkan data gambar dengan jenis yang berbeda-beda,misalkan GIF, JPEG, atau PNG, Anda membutuhkan satu field lagi untuk menyimpaninformasi jenis gambar ini, agar browser Anda tidak kebingungan saat menampilkannya. mysql> ALTER TABLE awak ADD JENIS VARCHAR(50);Cobalah untuk melihat apakah semuanya berhasil dengan mengetik: mysql> DESCRIBE awak;Jika proses penambahan field berhasil dijalankan, maka yang muncul di layar adalahsebagai berikut:Last update 5/5/2012
121. PHP? Siapa Takut! 121+----------+-------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+----------------+| KODE | int(11) | | PRI | NULL | auto_increment || NAMA | varchar(50) | | | | || PANGKAT | varchar(50) | | | | || JABATAN | varchar(50) | | | | || BERTUGAS | smallint(6) | | | 0 | || EMAIL | varchar(50) | | | | || HOBI | varchar(50) | | | | || FOTO | blob | YES | | NULL | || JENIS | varchar(50) | YES | | NULL | |+----------+-------------+------+-----+---------+----------------+9 rows in set (0.00 sec)Kini saatnya kita keluar dari MySQL Client dan memulai perjalanan dengan PHP andalankita. Ketikkan:mysql> QUITAku Masih Seperti Yang Dulu...Tanpa perlu menunggu sampai akhir hidup, mari kita gunakan skrip kita yang lamasebagai dasar pembuatan aplikasi untuk menyimpan gambar/image. Skrip tersebut antaralain: • koneksi.inc.php • awakdsp.php • awakinput.php • awakedit.php • awakdel.phpSkrip yang pertama, koneksi.inc.php, tidak perlu diubah kecuali disesuaikan nama userdan password untuk basis data MySQL. Berikut ini adalah skripnya.koneksi.inc.php <?php // set beberapa variabel untuk mengakses basis data MySQL. // nama server basis data MySQL $server = "localhost"; // nama pengguna basis data $namauser = "test"; // misalkan user adalah test // password pengguna basis data $passuser = "test"; // misalkan password adalah testLast update 5/5/2012
122. PHP? Siapa Takut! 122 // nama basis data $db = "uss_enterprise"; // membuka koneksi PHP ke basis data MySQL $koneksi = mysql_connect($server, $namauser, $passuser) or die("Salah server, nama pengguna, atau passwordnya!"); ?>Mana Gambarnya?Langkah pertama adalah memodifikasi skrip awakdsp.php agar menyediakan link untukmenampilkan gambar/foto awak. Hasilnya akan terlihat seperti di bawah ini.awakdsp.php <html> <head> <title>Menampilkan Isi Tabel Awak</title> <basefont face="Arial"> </head> <body> <?php // ambil data koneksi dari file koneksi.inc.php require("koneksi.inc.php"); // menentukan perintah SQL untuk query // saat tidak perlu melakukan query terhadap field FOTO // demi penghematan memori, cukup terhadap field JENIS saja $query = "SELECT KODE, NAMA, PANGKAT, JABATAN, BERTUGAS, EMAIL, HOBI, JENIS FROM awak"; // jalankan perintah SQL untuk query $hasil = mysql_db_query($db, $query, $koneksi) or die("Kesalahan pada query!"); // tampilkan hasilnya di halaman html dengan tabel echo "<font size=5>Data Awak USS Enterprise NCC-1701- D</font>n"; echo "<table border=1 cellpadding=1 cellspacing=0>n"; echo "<tr>n"; echo "<td>Kode</td>n"; echo "<td>Nama</td>n"; echo "<td>Pangkat</td>n"; echo "<td>Jabatan</td>n"; echo "<td>Tugas</td>n";Last update 5/5/2012
123. PHP? Siapa Takut! 123 echo "<td>Hobi</td>n"; echo "<td>Foto</td>n"; echo "<td>Pilihan</td>n"; echo "</tr>n"; // gunakan perulangan while // perulangan akan terjadi sepanjang masih ditemukan record while (list($kode,$nama,$pangkat,$jabatan,$bertugas, $email,$hobi, $jenis) = mysql_fetch_row($hasil)) { // modifikasi beberapa variabel hasil mysql_fetch_row() $bertugas = $bertugas." th"; $email = "mailto:".$email; // format dalam baris dan kolom tabel echo "<tr>n"; echo "<td>$kode</td>n"; echo "<td>"; echo "<a href=$email>$nama</a>"; echo "</td>n"; echo "<td>$pangkat</td>n"; echo "<td>$jabatan</td>n"; echo "<td>$bertugas</td>n"; echo "<td>$hobi</td>n"; if ($jenis) { // jika $jenis terisi data, tampilkan link ke fotodsp.php echo "<td>". "<a href="fotodsp.php? id=$kode">Tampilkan</a>". "</td>n"; } else { // jika $jenis tidak terisi data echo "<td>Tidak Tersedia</td>n"; } echo "<td>"; echo "<a href="awakedit.php? kodeawak=$kode">Edit</a>"; echo " "; echo "<a href="awakdel.php? kodeawak=$kode">Hapus</a>"; echo "</td>n"; echo "</tr>n"; } echo "</table>n"; echo "<center><p>"; echo "<a href="awakinput.php">Input Awak Baru</a>"; echo "</center>n"; // bebaskan memori yang digunakan untuk prosesLast update 5/5/2012
124. PHP? Siapa Takut! 124 mysql_free_result($hasil); ?> </body> </html>Huruf tebal pada skrip menunjukkan bagian skrip yang diubah. Maksud dari perubahanini adalah menambahkan daftar variabel $foto untuk menampung data biner dari fieldFOTO. Jika $foto terisi data, maka akan ditampilkan link untuk menampilkan foto awakUSS Enterprise. Tambahan lain adalah pemberian link untuk memasukkan data awakbaru. Cobalah jalankan skrip di atas, maka akan tampil sebagai berikut:Data Awak USS Enterprise NCC-1701-DKode Nama Pangkat Jabatan Tugas Hobi Foto Pilihan Jean luc Tidak Edit1 Captain Captain 5 th Archeology Piccard Tersedia Hapus William T. First Holodeck Tidak Edit2 Commander 5 th Riker Officer Game Tersedia Hapus Tidak Edit3 Deanne Troi Commander Counselor 2 th Fine Art Tersedia Hapus Input Awak BaruTentu saja, pada kolom Foto tertulis "Tidak Tersedia", karena kita memang belum pernahmemasukkan data foto sama sekali. Untuk itulah kita buat dulu modifikasi untuk skripawakinput.php sebagai berikut:awakinput.php <html> <head> <title>Memasukkan Awak Baru</title> <basefont face="Arial"> </head> <body> <?php // cek apakah kondisi form terkirim atau tidak if (!$tambah) { // jika form tidak dalam kondisi terkirim, // tampilkan form pencarian nama ?>Last update 5/5/2012
125. PHP? Siapa Takut! 125 <center> <form action="<?php echo $PHP_SELF ?>" method="POST" enctype="multipart/form-data"> <font size=5>Masukkan Data Awak USS Enterprise Baru</font> <p> <table border=0 cellspacing=2 cellpadding=2> <tr> <td>Nama Awak</td> <td> <input type="text" name="form_nama" size="50" maxlength="50"> </td> </tr> <tr> <td>Pangkat</td> <td> <input type="text" name="form_pangkat" size="50" maxlength="50"> </td> </tr> <tr> <td>Jabatan</td> <td> <input type="text" name="form_jabatan" size="50" maxlength="50"> </td> </tr> <tr> <td>Lama Bertugas</td> <td> <input type="text" name="form_bertugas" size="2" maxlength="2"> (dalam tahun) </td> </tr> <tr> <td>e-mail</td> <td> <input type="text" name="form_email" size="50" maxlength="50"> </td> </tr> <tr> <td>Hobi</td> <td> <input type="text" name="form_hobi" size="50" maxlength="50"> </td> </tr>Last update 5/5/2012
126. PHP? Siapa Takut! 126 <tr> <td>File Foto</td> <td> <input type="file" name="form_foto" size="40"> </td> </tr> <tr> <td colspan=2 align=center> <input type="submit" name="tambah" value=" Tambah "> </td> </tr> </table> </form> </center> <?php } else { // jika form dalam kondisi terkirim, // lakukan insert ke basis data // ambil variabel untuk koneksi basis data require("koneksi.inc.php"); // tentukan query dan kriteria pencarian // masukkan data gambar hanya jika $form_foto tidak kosong If ($form_foto != null) { // Jika $form_data terisi // baca file yang ditunjuk oleh $form_data sebesar ukuran file $data = "". addslashes(fread(fopen($form_foto, "rb"), filesize($form_foto))). ""; // PHP akan secara otomatis membuat variabel $form_foto_type // yang terisi dengan jenis file yang dibaca. // Isikan nilai variabel tersebut ke variabel $jenisdata $jenisdata = "".$form_foto_type.""; } else { // jika $form_foto kosongLast update 5/5/2012
127. PHP? Siapa Takut! 127 $data = "Null"; $jenisdata = "Null"; } $query = "INSERT INTO awak VALUES ( Null, ".addslashes($form_nama).", ".addslashes($form_pangkat).", ".addslashes($form_jabatan).", $form_bertugas, ".addslashes($form_email).", ".addslashes($form_hobi).", $data, $jenisdata )"; // lakukan proses query $hasil = mysql_db_query($db,$query,$koneksi) or die(Kesalahan pada proses query!); // Tampilkan pesan proses input telah selesai ?> <center> <font size=5>Proses Input Berhasil!</font><p> Data Awak Nama <b> <?php echo addslashes($form_nama) ?> </b> telah disimpan. <p> <a href="<?php echo $PHP_SELF ?>">Klik di sini isi data lagi</a> <br> <a href="awakdsp.php">Klik di sini jika selesai</a> </center> <?php } ?> </body> </html>Modifikasi pada skrip awakinput.php di atas bertujuan menambahkan komponen formtipe file yang dapat digunakan untuk mencari file pada komputer lokal/client dengankode:Last update 5/5/2012
128. PHP? Siapa Takut! 128 ........ <tr> <td>File Gambar</td> <td> <input type="file" name="form_foto" size="40"> </td> </tr> .........Jangan pernah melupakan untuk mengisi atribut enctype="multipart/form-data"pada tag <form> atau semua skrip Anda akan gagal melaksanakan tugasnya. Atribut iniberfungsi memastikan semua isian komponen form terkirim dengan baik sesuai denganjenisnya.Pada saat form ini dikirim maka akan terbentuk variabel $form_foto yang berisi pathdari file yang akan dimasukkan ke dalam database dan variabel $form_foto_type yangberisikan jenis file tersebut. Meskipun diskriminasi tidak sesuai dengan hak asasimanusia, tetap saja pada kasus ini perlu dibuat diskriminasi antara $form_foto yangterisi dan yang tidak terisi agar skrip kita bisa berjalan baik. $form_foto yang tidak terisifile akan memiliki nilai null. Dalam kondisi ini maka field FOTO dan JENIS akan diisidengan nilai Null. ........ If ($form_foto != null) { // Jika $form_data terisi // baca file yang ditunjuk oleh $form_data sebesar ukuran file $data = "". addslashes(fread(fopen($form_foto, "rb"), filesize($form_foto))). ""; // PHP akan secara otomatis membuat variabel $form_foto_type // yang terisi dengan jenis file yang dibaca. // Isikan nilai variabel tersebut ke variabel $jenisdata $jenisdata = "".$form_foto_type.""; } else { // jika $form_foto kosong $data = "Null"; $jenisdata = "Null"; } .........Last update 5/5/2012
129. PHP? Siapa Takut! 129Jika $form_foto terisi data, maka file yang ditunjuk oleh variabel $form_foto akandibaca dan diisikan ke dalam variabel data dengan perintah: ........ $data = "". addslashes(fread(fopen($form_foto, "rb"), filesize($form_foto))). ""; .........Baris perintah ini sebenarnya terdiri dari beberapa tahap, jika Anda sedikit problem untukmemahaminya, mungkin susunan perintah berikut dapat membantu Anda. ........ // buka file dengan fopen dan dengan parameter: // rb = read and binary // parameter b penting untuk sistem operasi non UNIX/LINUX $pointerfile = fopen($form_foto, "rb"); // cari ukuran file $ukuranfile = filesize($form_foto); // baca isi file sejumlah ukuran file $dataunformatted = fread($pointerfile,$ukuranfile); // format hasil pembacaan agar bisa digunakan dalam // perintah SQL dengan ditambah karakter "" $data = "".addslashes($dataunformatted).""; .........Terakhir gunakan variabel $data dan jenisdata untuk ditambahkan pada perintah SQLINPUT.Kini cobalah kembali jalankan skrip awakdsp.php lalu klik link "Input Awak Baru" yangakan memanggil skrip awakinput.php. Pada browser akan tampak komponen form baruyaitu komponen file lengkap dengan tombol Browse...Last update 5/5/2012
130. PHP? Siapa Takut! 130Isikan data sebagai berikut: Nama : Geordi LaForge Pangkat : Leutenant Jabatan : Engineer Bertugas : 4 tahun email : laforge@ncc1701d.mil.ufp Hobi : MusicUntuk isian Foto, gunakan tombol Browse... untuk mencari file gambar yang akandiisikan ke database. Dalam paket file yang disertakan dalam artikel ini terdapat gambarlaforge.gif yang dapat Anda gunakan untuk kelengkapan data Mas Geordi LaForge.Klik tombol Tambah dan jika proses berhasil maka klik link "Klik di sini untuk selesai"untuk kembali ke skrip awakdsp.php. Kini Anda akan mendapatkan tampilan sebagaiberikut:Data Awak USS Enterprise NCC-1701-DKode Nama Pangkat Jabatan Tugas Hobi Foto Pilihan Jean Luc Tidak Edit1 Captain Captain 5 th Archeology Piccard Tersedia Hapus William T. First Holodeck Tidak Edit2 Commander 5 th Riker Officer Game Tersedia Hapus Tidak Edit3 Deanne Troi Commander Counselor 2 th Fine Art Tersedia Hapus Geordi Edit4 Leutenant Engineer 4 th Music Tampilkan LaForge HapusLast update 5/5/2012
131. PHP? Siapa Takut! 131 Input Awak BaruAnda akan dapatkan bahwa kolom "Foto" pada data Geordi LaForge akan terisi link"Tampilkan". Link dapat digunakan untuk menampilkan foto Geordi LaForge. Cobalahklik link ini, maka Anda akan dapatkan tampilan:HTTP 404 - File Not FoundUps! Tentu saja, kita belum buat skrip fotodsp.php. Kalau begitu, sekarang kita buatdulu skrip untuk menampilkan gambar.fotodsp.php. <?php if ($id) { // ambil variabel untuk koneksi basis data require("koneksi.inc.php"); mysql_select_db("uss_enterprise", $koneksi); // baca FOTO dan JENIS dari database sesuai permintaan KODE awak $query = "SELECT JENIS, FOTO FROM awak WHERE KODE=$id"; $result = mysql_query($query); // masukkan hasil query ke variabel $data dan $jenis $data = mysql_result($result,0,"FOTO"); $tipe = mysql_result($result,0,"JENIS"); // header untuk mencegah cache di browser agar gambar selalu update header("Cache-control: private, no-cache"); header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Pragma: no-cache"); // header untuk memberi tahu browser jenis data yang akan ditampilkan header("Content-type: $tipe"); // data gambar/foto dikirim ke browser echo $data; } ?>Ulangi memilih link untuk menampilkan foto Pak LaForge, maka browser Anda akanmenampilkan file gambar (dalam ini berformat GIF). Mungkin Anda sedikit heran,bagaimana url http://[server_anda]/[direktori_skrip]/fotodsp.php?id=4 dapatmenampilkan gambar GIF, bukannya text keluaran skrip PHP. Kuncinya adalah padaperintah:Last update 5/5/2012
132. PHP? Siapa Takut! 132 header("Content-type: $tipe");Yang akan memaksa browser untuk menampilkankan data sesuai dengan isi variabel$tipe. Variabel $tipe memiliki nilai yang diambil dari field JENIS, yang dalam contohdi atas akan berisi image/gif. Tidak percaya? OK. Bukalah program MySQL ClientAnda dan ketikkan: mysql> select JENIS from awak WHERE KODE=4; +-----------+ | JENIS | +-----------+ | image/gif | +-----------+ 1 row in set (0.99 sec)Header Content-type: image/gif ini yang menyebabkan data hasil dari echo $data;ditampilkan sebagai gambar GIF pada browser, bukannya sebagai data biner biasa.Cobalah untuk melakukan remark terhadap perintah tersebut, hasil skrip fotodsp.phpakan sangat berbeda.Tiga header sebelumnya digunakan untuk mencegah terjadi browser caching terhadapgambar, yang dapat menyebabkan browser tidak menampilkan gambar yangterakhir/terupdate.Skrip fotodsp.php prinsipnya sangat sederhana, mengambil data biner dari field FOTOdan data jenis gambar dari field JENIS untuk field KODE sesuai dengan variabel $id padaurl-nya. Hasilnya dikirim ke browser. Anda juga dapat menggunakan skrip ini sebagai urlpada tag <img src="...">, jadi Anda dapat membuat sebuah file HTML dengan skripPHP, yang akan menampilkan data lengkap awak dengan fotonya. Untuk fotonya cukupdigunakan perintah skrip: <?php ....... echo "<img src="fotodsp?id=$id">"; ....... ?>Dengan $id adalah variabel hasil POST/GET atau variabel dari url yang memanggil skriptersebut.Bagaimana Dengan Data Yang Sudah Ada?Kini Anda perlu menambahkan foto pada data yang telah ada, misalkan dalam contoh diatas adalah foto Pak Piccard, Pak Riker, dan Ibu Deanne Troi. Tentu saja Anda dapatmelakukan hal ini dengan cara yang sangat primitif, yaitu menghapus data mereka lewatMySQL Client dan mengisi kembali data lengkap dengan foto melalui skripawakinput.php. Tetapi sebagai seorang manusia yang beradab, Anda tentu inginLast update 5/5/2012
133. PHP? Siapa Takut! 133melakukannya dengan cara yang lebih cerdas. OK, mari kita modifikasi skripawakedit.php menjadi seperti ini.awakedit.php. <html> <head> <title>Mengubah Data Awak</title> <basefont face="Arial"> </head> <body> <?php // ambil variabel untuk koneksi basis data require("koneksi.inc.php"); mysql_select_db($db, $koneksi); // cek apakah kondisi form terkirim atau tidak if (!$simpan) { // jika form tidak dalam kondisi terkirim, // tampilkan form pencarian nama // cek apakah variabel $kode dikirimkan if (!$kodeawak) { die(Tidak ada awak yang dipilih untuk diedit!); } // Tentukan query untuk ada yang akan diambil $query = "SELECT KODE, NAMA, PANGKAT, JABATAN, BERTUGAS, EMAIL, HOBI, JENIS FROM awak WHERE KODE=$kodeawak"; // jalankan query $hasil = mysql_query($query) or die(Kesalahan pada proses query!); // cek dan ekstrak hasil query $jml_rec = mysql_num_rows($hasil); if (!($jml_rec>0)) { die(Data tidak ditemukan!); } list($kode,$nama,$pangkat,$jabatan,$bertugas, $email,$hobi, $jenis) = mysql_fetch_row($hasil); ?> <center> <form action="<?php echo $PHP_SELF ?>" method="POST" enctype="multipart/form-data"> <font size=5>Edit Data Awak USS Enterprise</font>Last update 5/5/2012
134. PHP? Siapa Takut! 134 <?php // Jika terdapat gambar/foto awak, maka tampilkan pada browser if ($jenis) { echo "<p><img src="fotodsp.php? id=$kode">"; } ?> <p> <table border=0 cellspacing=2 cellpadding=2> <tr> <td>Nama Awak</td> <td> <input type="hidden" name="form_kode" value="<?php echo $kode ?>"> <input type="text" name="form_nama" size="50" value="<?php echo $nama ?>" maxlength="50"> </td> </tr> <tr> <td>Pangkat</td> <td> <input type="text" name="form_pangkat" size="50" value="<?php echo $pangkat ?>" maxlength="50"> </td> </tr> <tr> <td>Jabatan</td> <td> <input type="text" name="form_jabatan" size="50" value="<?php echo $jabatan ?>" maxlength="50"> </td> </tr> <tr> <td>Lama Bertugas</td> <td> <input type="text" name="form_bertugas" size="2" value="<?php echo $bertugas ?>" maxlength="2"> (dalam tahun) </td> </tr> <tr> <td>e-mail</td> <td> <input type="text" name="form_email" size="50" value="<?php echo $email ?>" maxlength="50"> </td> </tr>Last update 5/5/2012
135. PHP? Siapa Takut! 135 <tr> <td>Hobi</td> <td> <input type="text" name="form_hobi" size="50" value="<?php echo $hobi ?>" maxlength="50"> </td> </tr> <tr> <td>File Foto</td> <td> <input type="file" name="form_foto" size="40"> </td> </tr> <tr> <td colspan=2 align=center> <input type="submit" name="simpan" value=" Simpan "> </td> </tr> </table> </form> </center> <?php // bebaskan memori yang digunakan untuk proses mysql_free_result($hasil); } else { // jika form dalam kondisi terkirim, // lakukan perubahan basis data If ($form_foto != null) { // Jika $form_data terisi // baca file yang ditunjuk oleh $form_data sebesar ukuran file $data = ", FOTO=". addslashes(fread(fopen($form_foto, "rb"), filesize($form_foto))). ""; // PHP akan secara otomatis membuat variabel $form_foto_type // yang terisi dengan jenis file yang dibaca. // Isikan nilai variabel tersebut ke variabel $jenisdata $jenisdata = ", JENIS=".$form_foto_type."";Last update 5/5/2012
136. PHP? Siapa Takut! 136 } else { // jika $form_foto kosong $data = ""; $jenisdata = ""; } // tentukan query $query = "UPDATE awak SET NAMA=".addslashes($form_nama).", PANGKAT=".addslashes($form_pangkat) .", JABATAN=".addslashes($form_jabatan) .", BERTUGAS=$form_bertugas, EMAIL=".addslashes($form_email).", HOBI=".addslashes($form_hobi)." $data $jenisdata WHERE KODE=$form_kode"; // lakukan proses query $hasil = mysql_query($query) or die(Kesalahan pada proses query!); // Tampilkan pesan proses edit telah selesai ?> <center> <font size=5>Proses Edit Berhasil!</font><p> Data Awak Nama <b><?php echo addslashes($form_nama) ?></b> telah disimpan perubahannya.<p> <a href="awakdsp.php">Klik di sini untuk kembali</ a> </center> <?php } ?> </body> </html>Jalankan kembali skrip awakdsp.php dan pilih Edit untuk data Pak LaForge, maka padabrowser Anda akan tampil sebagai berikut:Last update 5/5/2012
137. PHP? Siapa Takut! 137Gambar LaForge muncul dengan manis di bagian atas dari data LaForge. Cobalah untukmengganti foto LaForge dengan foto Riker, misalnya, lalu simpan perubahan tersebut.Jika skrip awakedit dijalankan untuk data LaForge, maka kini yang muncul adalah fotoRiker. Ganti kembali foto tersebut dengan foto LaForge dan tambahkan foto untuk dataPiccard, Riker dan Deanne Troi. Nah, ternyata sangat mudah menjadi manusia beradab.Sudah Tiada Lagi Yang Perlu Dikenang...Bagian akhir dari seri pertama artikel ini akan membahas modifikasi terhadap skripawakdel.php yang digunakan untuk menghapus data awak. Perubahan yang terjadi padaskrip ini sangat minimal, hanya akan menambahkan bagian untuk menampilkangambar/foto awak sebelum dihapus. Lihatlah skrip yang telah dimodifikasi berikut ini.awakdel.php <html> <head> <title>Menghapus Data Awak</title> <basefont face="Arial"> </head> <body> <?php // ambil variabel untuk koneksi basis dataLast update 5/5/2012
138. PHP? Siapa Takut! 138 require("koneksi.inc.php"); mysql_select_db($db, $koneksi); // cek apakah kondisi form terkirim atau tidak if (!$hapus) { // jika form tidak dalam kondisi terkirim, // tampilkan form pencarian nama // cek apakah variabel $kode dikirimkan if (!$kodeawak) { die(Tidak ada awak yang dipilih untuk dihapus!); } // Tentukan query untuk ada yang akan diambil $query = "SELECT KODE, NAMA, PANGKAT, JABATAN, BERTUGAS, EMAIL, HOBI, JENIS FROM awak WHERE KODE=$kodeawak"; // jalankan query $hasil = mysql_query($query) or die(Kesalahan pada proses query!); // cek dan ekstrak hasil query $jml_rec = mysql_num_rows($hasil); if (!($jml_rec>0)) { die(Data tidak ditemukan!); } list($kode, $nama,$pangkat,$jabatan,$bertugas,$email,$hobi,$jenis) = mysql_fetch_row($hasil); ?> <center> <form action="<?php echo $PHP_SELF ?>" method="POST"> <font size=5>Edit Data Awak USS Enterprise</font> <?php // Jika terdapat gambar/foto awak, maka tampilkan pada browser if ($jenis) { echo "<p><img src="fotodsp.php? id=$kode">"; } ?> <p> <table border=0 cellspacing=2 cellpadding=2> <tr> <td>Nama Awak</td> <td> <input type="hidden" name="form_kode" value="<?php echo $kode ?>"> <?php echo $nama ?> </td> </tr> <tr> <td>Pangkat</td> <td> <?php echo $pangkat ?>Last update 5/5/2012
139. PHP? Siapa Takut! 139 </td> </tr> <tr> <td>Jabatan</td> <td> <?php echo $jabatan ?> </td> </tr> <tr> <td>Lama Bertugas</td> <td> <?php echo $bertugas ?> tahun </td> </tr> <tr> <td>e-mail</td> <td> <?php echo $email ?> </td> </tr> <tr> <td>Hobi</td> <td> <?php echo $hobi ?> </td> </tr> <tr> <td colspan=2 align=center> <input type="submit" name="hapus" value=" Hapus Data "> </td> </tr> </table> </form> </center> <?php // bebaskan memori yang digunakan untuk proses mysql_free_result($hasil); } else { // jika form dalam kondisi terkirim, // lakukan penghapusan data // tentukan query $query = "DELETE FROM awak WHERE KODE=$form_kode"; // lakukan proses query $hasil = mysql_query($query) or die(Kesalahan pada proses query!); // Tampilkan pesan proses hapus telah selesai ?> <center> <font size=5>Proses Hapus Berhasil!</font><p> Data Awak Nama <b><?php echo addslashes($form_nama) ?></b>Last update 5/5/2012
140. PHP? Siapa Takut! 140 telah dihapus. <p> <a href="awakdsp.php">Klik di sini untuk kembali</ a> </center> <?php } ?> </body> </html>Cobalah menghapus satu dua data awak dengan skrip di atas.Menghela Nafas SejenakTernyata tidak terlalu sulit menyimpan gambar/foto ke dalam database MySQL denganmenggunakan PHP. Cuma butuh trik saja. Untuk sementara ini, Anda dapat menghelanafas sejenak, karena Anda telah sedikit lepas dari tekanan pekerjaan. Apa yangdiperintahkan Kapten Piccard, telah Anda kerjakan dengan baik. Kini saatnya Andaminum segelas minuman dingin dan bersiap mempresentasikan hasil karya Anda kepadaKapten. Anda tentu berharap Kapten Piccard antusias dengan kerja Anda kali ini.Benarkah? Nantikan seri kedua artikel ini....Last update 5/5/2012
141. PHP? Siapa Takut! 141Bagian 2: Bagaimana Jika Diurai?Masih Belum PuasHari ini Anda selaku officer pengolahan data pada USS Enterprise mempresentasikanaplikasi basis data awak kapal yang telah Anda bangun lebih canggih, karena dilengkapidengan data foto awak kapal. Anda berharap sistem yang Anda buat ini mampu membuatKapten Piccard terkesan. Karir Anda dipetaruhkan pada presentasi ini. Setelah bla-bla-bladengan semangat maju tak gentar sampai kerongkongan Anda kering, tibalah saatnyaAnda mendengar komentar para komandan kapal USS Enterprise."Luar Biasa!" kata Riker. "Ini sebuah kemajuan yang berarti dalam sistem basis dataawak USS Enterprise. Kita dapat mengembangkannya untuk database yang lain."Kapten Piccard masih belum berpendapat, namun kelihatannya ia tersenyum cerah.Rupanya ia cukup terkesan. Kelihatannya semua baik-baik saja dan berjalan seperti yangAnda inginkan. Namun tunggu!"Boleh saya bicara, Kapten?" Letnan Data minta izin bicara.Setelah mendapatkan jawaban dari Kapten Piccard, Data langsung bicara, "Kapten,sistem ini memang merupakan langkah maju bagi sistem basis data kita, namunproblemnya sistem ini mungkin hanya sesuai digunakan pada USS Enterprise. Perbedaanantara sistem komputer yang digunakan Bumi dan sistem komputer Vulcan mungkindapat menimbulkan masalah pada saat akses data dari sistem ini oleh sistem komputerVulcan. Saya tahu persis sistem komputer Vulcan dibangun dengan menggunakan sistemMikocok Visual Basilus. Sistem itu tidak memungkinkan akses dan manipulasi data biner8-bit secara mudah dan cepat. Ini akan jadi hambatan dalam proses transfer data.""Usul Anda bagaimana, Data?" tanya Kapten Piccard."Saya mengusulkan agar data gambar biner 8-bit dapat disimpan kondisi data 7-bit yanguniversal, sehingga mudah bagi sistem komputer Vulcan untuk bertukar data. Berartiaplikasi ini harus dimodifikasi lagi," ungkap Data."Dan siapkah Anda melakukan perubahan itu?" tanya Kapten Piccard kepada Anda.Tidak ada pilihan lain bagi Anda selain menyatakan kesanggupan. Sebagai seorangofficer Starfleet, tidak ada pilihan lain untuk berjuang sampai titik darah penghabisan.Dan itulah yang akan Anda lakukan jika tidak ingin menghabiskan sisa hidup dan karirsecara membosankan di salah satu Starbase terpencil.Tumpuan Yang KuatLast update 5/5/2012
142. PHP? Siapa Takut! 142Untuk dapat menyimpan data dalam format 7-bit, kita membutuhkan pengkodean yangdapat mengkonversi format 8-bit menjadi 7-bit dan sebaliknya. Dalam sistem e-mail atausurat elektronik kita mengenal pengkodean yang memungkinkan dilakukannyapengiriman file biner via protokol e-mail yang menggunakan sistem 7-bit (ASCII).Sistem pengkodean yang lazim digunakan adalah base-64. Kita juga akanmenggunakannya, alasannya sederhana, PHP secara native memiliki fungsi enkoding dandekoding base-64. Karena algoritma base-64 ini umum digunakan, komponen/fungsiuntuk hampir semua lingkungan pemrograman banyak tersedia, baik yang gratis maupunyang komersial. Tinggal dicari saja dari internet.Secara prinsip yang akan kita kerjakan saat ini adalah mengubah jenis data biner 8-bitmenjadi data ASCII 7-bit sebelum data tersebut disimpan dalam basis data MySQL. Padasaat menampilkan data biner tersebut, data ASCII 7-bit tersebut haruslah dikonversi lagimenjadi data biner 8-bit agar dapat ditampilkan dengan baik pada komputer pengakses.Cara seperti ini memang mengandung kerugian dari sisi bertambahnya waktu yangdibutuhkan untuk melakukan akses dan penyimpanan, serta tentu saja ukuran file yangdisimpan menjadi sedikit lebih besar ketimbang ukuran aslinya.Di samping kelemahan tersebut, trik ini juga memiliki keunggulan dalam kompatibilitasdata. Anda dapat menggunakan basis data apa pun, sepanjang bisa menyimpan data teksASCII dalam ukuran yang besar. Tidak dibutuhkan field biner pada basis data.Keuntungan lain, sistem-sistem yang memiliki kelemahan dalam pengolahkan stringbiner dapat dengan mudah mengakses basis data ini. Hal yang penting lagi, Anda lebihmudah melakukan dump basis data yang perlu Anda lakukan pada saat Andamemindahkan sebuah sistem basis data dengan perintah SQL standar dari satu server keserver lainnya.Masih Juga Dengan Kawan Lama KitaMasih ingat dengan basis data yang kemarin telah kita modifikasi pada bagian pertamaartikel ini? Karena kita tidak akan menyimpan data gambar dalam field biner melainkandalam teks ASCII 7-bit, maka kita cukup menggunakan field berjenis TEXT. Seperti jugapada jenis field BLOB, MySQL menyediakan jenis field TINYTEXT, TEXT,MEDIUMTEXT, dan LONGTEXT. Untuk mudahnya, gunakan saja TEXT, itu sudahcukup.Kini saatnya untuk mulai mengacak-acak kembali basis data uss_enterprise pada tabelawak. Pertama kali kita akan menghapus (DROP) field FOTO yang berjenis BLOB. BukaMySQL Client (CLI) dan ketik perintah berikut ini: mysql> ALTER TABLE awak DROP FOTO;Kemudian membuat kembali membuat field FOTO yang berjenis TEXT. Perintahnyaadalah sebagai berikut: mysql> ALTER TABLE awak ADD FOTO TEXT AFTER HOBI;Last update 5/5/2012
143. PHP? Siapa Takut! 143Baris perintah di atas adalah untuk membuat field bernama FOTO dengan jenis TEXT dandisisipkan setelah field HOBI. Tentunya Anda dapat juga melakukan perubahan ini dengansatu perintah SQL saja yaitu: mysql> ALTER TABLE awak CHANGE FOTO FOTO TEXT;Patut diingat perintah di atas tidak langsung menghapus isi field FOTO namun hanyamengubah jenis field. Untuk dapat memulai segalanya dengan bersih, sebaiknya gunakancara yang pertama (dihapus dahulu kemudian dibuat field yang baru), atau lakukanUPDATE terhadap field FOTO dengan mengisi field FOTO menggunakan nilai Null.Langkah berikutnya yang penting adalah menghapus data pada field JENIS, agar prosesinput/edit dapat berjalan dengan benar. mysql> UPDATE awak SET JENIS=Null;Jika proses modifikasi field berhasil dijalankan, maka yang muncul di layar adalahsebagai berikut:+----------+-------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+----------------+| KODE | int(11) | | PRI | NULL | auto_increment || NAMA | varchar(50) | | | | || PANGKAT | varchar(50) | | | | || JABATAN | varchar(50) | | | | || BERTUGAS | smallint(6) | | | 0 | || EMAIL | varchar(50) | | | | || HOBI | varchar(50) | | | | || FOTO | text | YES | | NULL | || JENIS | varchar(50) | YES | | NULL | |+----------+-------------+------+-----+---------+----------------+9 rows in set (0.00 sec)Kini saatnya kita keluar dari MySQL Client dan memulai perjalanan dengan PHP andalankita. Ketikkan: mysql> QUITYang Itu Terus, Bosan Ah...Kali ini kita akan menggunakan skrip dasar dari bagian pertama artikel ini. Mengapatidak buat yang baru? Alasan utamanya adalah karena saya tergolong species manusiasuper pemalas yang tidak suka mengetik skrip terlalu banyak. Masalah yang dihadapi punsama, jadi lebih baik modifikasi saja. Skrip tersebut antara lain: • koneksi.inc.phpLast update 5/5/2012
144. PHP? Siapa Takut! 144 • awakdsp.php • awakinput.php • awakedit.php • awakdel.php • fotodsp.phpTidak ada perubahan pada skrip koneksi.inc.php, awakdsp.php, dan awakdel.php.Tetaplah setia gunakan seperti apa adanya.Meskipun pemalas, saya tidak pelit. Untuk sesama pemalas dilarang saling mendahului ...ups ... maksud saya, untuk sesama pemalas, saya menyediakan skrip yang telahdimodifikasi sesuai bagian kedua artikel ini, yang dapat Anda download di sini.Benarkah Kau Telah Berubah?Modifikasi untuk skrip awakinput.php dapat dilihat sebagai berikut:awakinput.php <html> <head> <title>Memasukkan Awak Baru</title> <basefont face="Arial"> </head> <body> <?php // cek apakah kondisi form terkirim atau tidak if (!$tambah) { // jika form tidak dalam kondisi terkirim, // tampilkan form pencarian nama ?> <center> <form action="<?php echo $PHP_SELF ?>" method="POST" enctype="multipart/form-data"> <font size=5>Masukkan Data Awak USS Enterprise Baru</font> <p> <table border=0 cellspacing=2 cellpadding=2> <tr> <td>Nama Awak</td> <td> <input type="text" name="form_nama" size="50" maxlength="50"> </td> </tr> <tr> <td>Pangkat</td> <td> <input type="text" name="form_pangkat" size="50" maxlength="50">Last update 5/5/2012
145. PHP? Siapa Takut! 145 </td> </tr> <tr> <td>Jabatan</td> <td> <input type="text" name="form_jabatan" size="50" maxlength="50"> </td> </tr> <tr> <td>Lama Bertugas</td> <td> <input type="text" name="form_bertugas" size="2" maxlength="2"> (dalam tahun) </td> </tr> <tr> <td>e-mail</td> <td> <input type="text" name="form_email" size="50" maxlength="50"> </td> </tr> <tr> <td>Hobi</td> <td> <input type="text" name="form_hobi" size="50" maxlength="50"> </td> </tr> <tr> <td>File Foto</td> <td> <input type="file" name="form_foto" size="40"> </td> </tr> <tr> <td colspan=2 align=center> <input type="submit" name="tambah" value=" Tambah "> </td> </tr> </table> </form> </center> <?php } else { // jika form dalam kondisi terkirim, // lakukan insert ke basis data // ambil variabel untuk koneksi basis data require("koneksi.inc.php"); // tentukan query dan kriteria pencarian // masukkan data gambar hanya jika $form_foto tidak kosongLast update 5/5/2012
146. PHP? Siapa Takut! 146 If ($form_foto != null) { // Jika $form_data terisi // baca file yang ditunjuk oleh $form_data sebesar ukuran file $data = "". base64_encode(fread(fopen($form_foto, "rb"), filesize($form_foto))). ""; // PHP akan secara otomatis membuat variabel $form_foto_type // yang terisi dengan jenis file yang dibaca. // Isikan nilai variabel tersebut ke variabel $jenisdata $jenisdata = "".$form_foto_type.""; } else { // jika $form_foto kosong $data = "Null"; $jenisdata = "Null"; } $query = "INSERT INTO awak VALUES ( Null, ".addslashes($form_nama).", ".addslashes($form_pangkat).", ".addslashes($form_jabatan).", $form_bertugas, ".addslashes($form_email).", ".addslashes($form_hobi).", $data, $jenisdata )"; // lakukan proses query $hasil = mysql_db_query($db,$query,$koneksi) or die(Kesalahan pada proses query!); // Tampilkan pesan proses input telah selesai ?> <center> <font size=5>Proses Input Berhasil!</font><p> Data Awak Nama <b> <?php echo addslashes($form_nama) ?> </b> telah disimpan. <p> <a href="<?php echo $PHP_SELF ?>">Klik di sini isi data lagi</a> <br> <a href="awakdsp.php">Klik di sini jika selesai</a> </center>Last update 5/5/2012
147. PHP? Siapa Takut! 147 <?php } ?> </body> </html>Perbedaan antara skrip ini dengan skrip aslinya adalah pada: ........ $data = "". base64_encode(fread(fopen($form_foto, "rb"), filesize($form_foto))). ""; ........Kali ini kita gunakan fungsi base64_encode() untuk memformat data biner hasilpembacaan file menjadi bentuk 7-bit ASCII base-64. Fungsi addslashes() tidak lagidibutuhkan, karena hasil dari fungsi base64_encode() telah berupa string ASCII 7-bit.Jalankan skrip awakinput.php ini dan isikan data sebagai berikut: Nama : Data Pangkat : Leutenant Jabatan : Operations Officer Bertugas : 3 tahun email : data@ncc1701d.mil.ufp Hobi : ComputerIsikan foto dengan menggunakan tombol Browse... untuk mencari file gambar yangakan diisikan ke database. Dalam paket file yang disertakan dalam artikel ini terdapatgambar data.gif yang dapat Anda gunakan. Klik tombol Tambah dan jika prosesberhasil maka klik link "Klik di sini untuk selesai" untuk kembali ke skrip awakdsp.php.Enkoding base-64 terhadap gambar data.gif memberikan hasil string ASCII 7 bitkurang lebih seperti berikut ini: R0lGODlheABaAPcAADMeICceICwbIiciJCYbIhUXIhUZKRcZIhkbJ BUbMBcZIBkbIhAVJBcZHhkbIBUZIhcbJB4gJBUZIBcbIg0VIqu2yB UbJA0VIIKgyBseIhceJxkeJBUZHhcbIKywtRUbIois0xIZIHycvWd 8kh4iJgsVHiIxP4Cnyn+btWWJphceJBUbINvj6hAZIBIbIh4rNXCW shAVGRkeIhsgJBcbHomSmRIZHjpGTj9bbFp/l0pneTpQXhAZHhIbI BkiJxceIpaiqeny9xUbHhUZGxAbIBUeIhcgJHOOm1xzfRkeIGl9hR IbHhIZGxceIBkgIsvV2FdmahUeIBcgIr7IyiAmJ6+5uhkgIAsNDYS JiaeoqOPs609cWXV9e5aamRUeG6yurRUXFeXz0+bwy/X840FDOxcZ EPD204WHd4+Qh15fVOnsw2lqWH9/ZPPzzOPjwI2NfyQkIikpJ318W fHwxYyLd3NrEHNwUGdlSFZUPu3pu4eFa+bju+zpwXBmDWllPG9qQO Xgtd7atZWTf5mYjm1iDWNeOGdeLF5WKTAsFSYkF4iBVdjTtWtcEGh aEERAK4+JbGhXEGFSEu7kuZKNeHx4ZpmWiWdVEGVSEFVJG0E4F1dN KZKOgJWSh+batPPnwaCZgmROEmn ............ dstLast update 5/5/2012
148. PHP? Siapa Takut! 148Skrip fotodsp.php juga perlu sedikit dimodifikasi. Lihatlah skrip hasil modifikasiberikut ini.fotodsp.php. <?php if ($id) { // ambil variabel untuk koneksi basis data require("koneksi.inc.php"); mysql_select_db("uss_enterprise", $koneksi); // baca FOTO dan JENIS dari database sesuai permintaan KODE awak $query = "SELECT JENIS, FOTO FROM awak WHERE KODE=$id"; $result = mysql_query($query); // masukkan hasil query ke variabel $data dan $jenis $data = base64_decode(mysql_result($result,0,"FOTO")); $tipe = mysql_result($result,0,"JENIS"); // header untuk mencegah cache di browser agar gambar selalu update header("Cache-control: private, no-cache"); header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Pragma: no-cache"); // header untuk memberi tahu browser jenis data yang akan ditampilkan header("Content-type: $tipe"); // data gambar/foto dikirim ke browser echo $data; } ?>Pada skrip di atas digunakan fungsi base64_decode() untuk mengembalikan bentuk datateks ASCII 7-bit ke bentuk biner 8-bitnya. Hasilnya (biner) akan dikirimkan ke browseryang mengakses skrip ini.Pengubah Yang Perlu DiubahSkrip awakedit.php juga perlu dimodifikasi, karena skrip ini menjadi seperti ini.awakedit.php. <html> <head> <title>Mengubah Data Awak</title> <basefont face="Arial"> </head>Last update 5/5/2012
149. PHP? Siapa Takut! 149 <body> <?php // ambil variabel untuk koneksi basis data require("koneksi.inc.php"); mysql_select_db($db, $koneksi); // cek apakah kondisi form terkirim atau tidak if (!$simpan) { // jika form tidak dalam kondisi terkirim, // tampilkan form pencarian nama // cek apakah variabel $kode dikirimkan if (!$kodeawak) { die(Tidak ada awak yang dipilih untuk diedit!); } // Tentukan query untuk ada yang akan diambil $query = "SELECT KODE, NAMA, PANGKAT, JABATAN, BERTUGAS, EMAIL, HOBI, JENIS FROM awak WHERE KODE=$kodeawak"; // jalankan query $hasil = mysql_query($query) or die(Kesalahan pada proses query!); // cek dan ekstrak hasil query $jml_rec = mysql_num_rows($hasil); if (!($jml_rec>0)) { die(Data tidak ditemukan!); } list($kode,$nama,$pangkat,$jabatan,$bertugas, $email,$hobi, $jenis) = mysql_fetch_row($hasil); ?> <center> <form action="<?php echo $PHP_SELF ?>" method="POST" enctype="multipart/form-data"> <font size=5>Edit Data Awak USS Enterprise</font> <?php // Jika terdapat gambar/foto awak, maka tampilkan pada browser if ($jenis) { echo "<p><img src="fotodsp.php? id=$kode">"; } ?> <p> <table border=0 cellspacing=2 cellpadding=2> <tr> <td>Nama Awak</td> <td> <input type="hidden" name="form_kode"Last update 5/5/2012
150. PHP? Siapa Takut! 150 value="<?php echo $kode ?>"> <input type="text" name="form_nama" size="50" value="<?php echo $nama ?>" maxlength="50"> </td> </tr> <tr> <td>Pangkat</td> <td> <input type="text" name="form_pangkat" size="50" value="<?php echo $pangkat ?>" maxlength="50"> </td> </tr> <tr> <td>Jabatan</td> <td> <input type="text" name="form_jabatan" size="50" value="<?php echo $jabatan ?>" maxlength="50"> </td> </tr> <tr> <td>Lama Bertugas</td> <td> <input type="text" name="form_bertugas" size="2" value="<?php echo $bertugas ?>" maxlength="2"> (dalam tahun) </td> </tr> <tr> <td>e-mail</td> <td> <input type="text" name="form_email" size="50" value="<?php echo $email ?>" maxlength="50"> </td> </tr> <tr> <td>Hobi</td> <td> <input type="text" name="form_hobi" size="50" value="<?php echo $hobi ?>" maxlength="50"> </td> </tr> <tr> <td>File Foto</td> <td> <input type="file" name="form_foto" size="40"> </td> </tr> <tr> <td colspan=2 align=center> <input type="submit" name="simpan" value=" Simpan "> </td> </tr> </table> </form> </center>Last update 5/5/2012
151. PHP? Siapa Takut! 151 <?php // bebaskan memori yang digunakan untuk proses mysql_free_result($hasil); } else { // jika form dalam kondisi terkirim, // lakukan perubahan basis data If ($form_foto != null) { // Jika $form_data terisi // baca file yang ditunjuk oleh $form_data sebesar ukuran file $data = ", FOTO=". base64_encode(fread(fopen($form_foto, "rb"), filesize($form_foto))). ""; // PHP akan secara otomatis membuat variabel $form_foto_type // yang terisi dengan jenis file yang dibaca. // Isikan nilai variabel tersebut ke variabel $jenisdata $jenisdata = ", JENIS=".$form_foto_type.""; } else { // jika $form_foto kosong $data = ""; $jenisdata = ""; } // tentukan query $query = "UPDATE awak SET NAMA=".addslashes($form_nama).", PANGKAT=".addslashes($form_pangkat).", JABATAN=".addslashes($form_jabatan).", BERTUGAS=$form_bertugas, EMAIL=".addslashes($form_email).", HOBI=".addslashes($form_hobi)." $data $jenisdata WHERE KODE=$form_kode"; // lakukan proses query $hasil = mysql_query($query) or die(Kesalahan pada proses query!); // Tampilkan pesan proses edit telah selesai ?> <center> <font size=5>Proses Edit Berhasil!</font><p> Data Awak Nama <b><?php echo addslashes($form_nama) ?></b> telah disimpan perubahannya. <p>Last update 5/5/2012
152. PHP? Siapa Takut! 152 <a href="awakdsp.php">Klik di sini untuk kembali</ a> </center> <?php } ?> </body> </html>Jalankan kembali skrip awakdsp.php dan pilih Edit, untuk awak Data, pastikan fotoData sekarang telah muncul di browser Anda. Kini tugas Anda menambahkan foto untukPiccard, Riker dan Deanne Troi, dan LaForge.Skrip lainnya tidak perlu mengalami perubahan, namun tidak ada salahnya Andamencoba kembali skrip-skrip tersebut.Kini, Anda tidak perlu lagi ragu-ragu jika ingin memindahkan basis data yangmengandung image/gambar dari satu server ke server lainnya dengan perintah SQL yangdihasilkan oleh program mysqldump. Image/gambar dalam basis data yang disimpanmelalui skrip di atas hanyalah merupakan data ASCII 7-bit biasa dan tidak akanmenimbulkan masalah waktu disertakan dalam perintah SQL-nya.Berkat trik yang Anda lakukan, kini sistem komputer bumi dan sistem komputer Vulcandapat saling bertukar basis data gambar. Penguasa Vulcan sangat menghargai jasa Andadan menawarkan cuti liburan di sebuah lembah yang paling indah pada sistem planetVulcan. Tentu saja Anda tidak dapat menolaknya.Rencana awalnya artikel ini hanya akan dibuat dua seri saja, namun kita memang cumabisa berencana saja karena tiba-tiba saya memutuskan untuk menjadikan tiga seri. Tidakperlu protes, demo atau unjuk rasa, karena keputusan sudah final tidak bisa diganggugugat. Di bagian ketiga artikel ini, saya akan berbagi cara menyimpan gambar padasistem file yang ada, bukan pada basis data MySQL. Pada MySQL hanya akan disimpaninformasi mengenai gambarnya. Model penyimpanan gambar seperti ini sesungguhnyapaling lazim digunakan karena tidak membebani basis data. Selamat berlibur di Vulcansambil menantikan artikel bagian ke 3.Last update 5/5/2012
153. PHP? Siapa Takut! 153PDF? Pakai PHP saja!Oleh: Ivan Irawan <ivan@smg.linux.or.id>Saya yakin jika Anda cukup bergaul dan melek internet, pasti pernah mendengar,membaca, juga barangkali membuat dokumen dalam bentuk format PDF (PortableDocument Format). Ketika Anda membaca artikel ini secara online, saya semakin yakinbahwa tidak mungkin Anda tidak pernah mendengar mengenai PDF. Paling tidak Andatelah mendengar mengenai PDF judul dari judul artikel ini :)Bisa beli PDF-nya, Pak?Format dokumen PDF pertama kali dikenalkan oleh Adobe System(http://www.adobe.com), hasil dari pengembangan Dr. John Warnock di awal tahun 90-an. Proyek PDF dimaksudkan membuat format file untuk distribusi dokumen di dalamperusahaan yang dapat ditampilkan di berbagai platform komputasi.PDF akhirnya menjadi format dokumen yang universal dan lintas platform, karenatersedia di berbagai platform komputasi. Program untuk membaca dokumen PDF dalamberbagai platform disediakan secara gratis untuk didownload oleh Adobe System. Plug-in program pembaca untuk browser populer juga tersedia, sehingga dokumen PDF dapatdibaca langsung secara online dari situs internet tanpa perlu mendownload dokumen danmembacanya denga program yang terpisah dari browser web.PDF memiliki beberapa fitur keunggulan antara lain: • Universal dan Lintas Platform. Dokumen PDF dapat dibaca di berbagai platform, bahkan dapat dibaca secara online melalui browser yang telah dilengkapi dengan plug-in pembaca PDF. Tools dan printer driver untuk membuat dokumen PDF pun banyak tersedia. Keunggulan ini menyebabkan dokumen PDF dapat digunakan secara luas di seluruh dunia. • Yang Anda Lihat, Yang Anda Dapatkan. Berbeda dengan format HTML/SGML, PDF lebih dapat menjamin apa yang ditampilkan pada monitor, maka serupa itu pula yang akan kita dapatkan jika dokumen dicetak. Dengan format HTML/SGML, maka hasil cetakan bisa jadi akan berbeda dengan yang tampak di monitor, bahkan dokumen yang tampak di monitor pun bisa jadi berbeda-beda tergantung dari browser yang digunakan. Hasilnya, PDF sangat sesuai digunakan untuk menampilkan informasi kritis yang tidak memperbolehkan variasi dalam presentasinya, misalnya invoice, tanda terima, dan laporan-laporan baku lainnya. • Hemat Ukurannya. Secara native file PDF telah dikompresi sedemikian rupa, sehingga ukuran filenya akan lebih kecil daripada jika file tersebut dalam format HTML, misalnya.Last update 5/5/2012
154. PHP? Siapa Takut! 154 Kecilnya ukuran file PDF ini menyebabkan PDF populer digunakan untuk tukar- menukar dokumen lewat internet karena tidak memboroskan bandwidth data. • Pengamanan Dokumen Dapat Diandalkan. PDF juga memiliki fitur pengamanan dokumen dari kemungkinan pencurian isi, duplikasi, dan pencetakan dokumen oleh yang tidak berhak. Sebuah dokumen PDF dapat pula diberikan tanda tangan digital (digital signature) sehingga penyebaran dokumen dapat lebih dikendalikan. Fitur ini tidak dimiliki oleh format dokumen universal seperti HTML/SGML.Benarkah Perlu PDF?Kecuali jika Anda hanya ingin bekerja dengan dokumen-dokumen non presisi dan tidakmenginginkan kemudahan bertukar dokumen, maka Anda kemungkinan besarmembutuhkan 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,Saya berani memberi saran kepada Anda untuk menghindari kerja keras memformatdokumen dalam bentuk HTML dengan menggunakan format dokumen PDF.Sebagai pecinta PHP, Anda benar-benar dimanjakan karena PHP memiliki kemampuanuntuk membuat dokumen PDF. Pada artikel ini kita akan coba mempelajarinya.Pilih Yang Mana...Cukup banyak ekstensi PHP tersedia yang memungkinkan Anda membuat dokumen PDFmelalui 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.Last update 5/5/2012
155. PHP? Siapa Takut! 155Dalam tulisan ini, kita akan menggunakan fungsi-fungsi yang ada pada PDFLib. Sebelummemulai semuanya, sebaiknya Anda pastikan dulu ekstensi PDFLib telah terpasang padasistem PHP Anda. Jangan lupa juga, Anda juga harus memastikan browser Anda telahterinstalasi plug-in untuk membaca dokumen PDF.Untuk lebih memudahkan Anda, maka telah tersedia source code dan hasilnya (dalamdokumen PDF) dalam bentuk file .zip. Anda tinggal download saja file artpdf.zip ini.Jika Anda telah siap, mari kita lanjutkan dengan membuat dokumen PDF palingsederhana.PDF Pertamaku, Tak Terlupakan...Sesungguhnya saya tidak menyukai memulai sesuatu dengan rutinitas. Ketika Andabelajar bahasa pemrograman apa pun, selalu kita dipaksa untuk mengucapkan, "Hello,World!" dalam bahasa pemrograman baru. Saya juga akan mengajak Anda untukmelakukannya lagi saat ini, namun untuk sedikit mengurangi kejenuhan, mari kita ubahprogram ini menjadi program "PDF Pertamaku".Coba Anda buat skrip seperti di bawah ini, dan coba jalankan di PHP melalui browserfavorit 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 LangitMembuat dokumen PDF, sebenarnya mirip dengan proses menggambar pada kanvas.Agar Anda mampu menempatkan gambar maupun tulisan di tempat yang sesuai dengankeinginan Anda, maka Anda perlu mengetahui cara penentuan letak pada dokumen PDF.Last update 5/5/2012
156. PHP? Siapa Takut! 156Pada dokumen PHP berlaku sistem koordinat dua dimensi (x,y), dimana titik asal ataukoordinat (0,0) ada di pojok kiri bawah dokumen. Arah koordinat x adalah arahhorisontal (dari kiri ke kanan) dan arah koordinat y adalah arah vertikal (dari bawah keatas). Sistem ukuran dasar/skala yang digunakan adalah point atau disingkat pt, dengankonversinya: 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 digunakandalam satuan pt. Tabel berikut ini akan memberikan informasi ukuran jenis kertas dalamsatuan pt. Jenis Ukuran Kertas Horisontal Vertikal US Letter 612 792 US Legal 612 1008 US Ledger 1224 792 11x17 792 1224 A0 2380 3368 A1 1684 2380 A2 1190 1648 A3 842 1190 A4 595 842 A5 421 595 A6 297 421 B5 501 709Mari Anda coba skrip di bawah ini untuk belajar bermain dalam koordinat halamanberukuran 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 halamanLast update 5/5/2012
157. PHP? Siapa Takut! 157 $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); ?>Skrip di atas akan menghasilkan dokumen PDF serupa ini.Anda memiliki kemungkinan untuk mengubah titik asal (0,0) dan membalik arahkoordinat, sebagai contoh, Anda dapat membuat pojok kiri atas sebagai titik asalLast update 5/5/2012
158. PHP? Siapa Takut! 158koordinat 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 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 TulisanDalam contoh-contoh skrip di atas, Anda telah mencoba menulis pada halaman PDF. Kaliini Anda akan mendapatkan penjelasan mengenai fungsi-fungsi dasar yang digunakanuntuk membuat tulisan pada dokumen PDF. Sebagian dari fungsi-fungsi ini telah pernahAnda gunakan.pdf_show_xy()Fungsi ini digunakan untuk menuliskan text pada posisi tertentu yang diberikan. Contoh: <? pdf_show_xy($halaman,"Tulisan Saya",50,100); ?>Last update 5/5/2012
159. PHP? Siapa Takut! 159Contoh di atas akan menuliskan text "Tulisan Saya" mulai pada koordinat (50,100) padahalaman PDF yang didefinisikan oleh variabel $halaman.pdf_show()Fungsi ini digunakan untuk menuliskan text pada posisi tertentu yang telah diset terlebihdahulu 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 skripberikut ini akan memberi kesempatan bagi Anda untuk mengerti maksud penggunaanfungsi 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); 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);Last update 5/5/2012
160. PHP? Siapa Takut! 160 $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 berikutini.Kusuka BentuknyaPDFLib 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.Last update 5/5/2012
161. PHP? Siapa Takut! 161Anda juga dapat menggunakan jenis huruf AFM, Postscript Type-1, dan TTF. Mari kitacoba 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 inimenunjukkan caranya. <?php // Ubah nilai variabel ini sesuai dengan path file pdflib.upr // di sistem PHP Anda. $file_upr = "/usr/share/fonts/pdflib/pdflib.upr"; $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);Last update 5/5/2012
162. PHP? Siapa Takut! 162 // 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 padaFontOutline lengkap dengan path dari file .ttf. Jika berhasil, Anda akan memperolehhasil 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 halamandokumen PDF. Kali ini kita akan mempelajari cara penempatan gambar pada dokumenLast update 5/5/2012
163. PHP? Siapa Takut! 163PHP. PDFLib mampu menangani beberapa format gambar untuk dijadikan dokumenPDF, 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 dataAnda dapat menyisipkan gambar pada dokumen PDF dengan perintah pdf_open_jpeg()untuk membuka file gambar dan diikuti dengan perintah pdf_place_image() untukmeletakkan gambarnya pada dokumen PDF. Untuk menutup file gambar, digunakanperintah 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;Last update 5/5/2012
164. PHP? Siapa Takut! 164 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 padadokumen 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"); Header("Content-Length:$panjangbuffer"); Header("Content-Disposition:inline; filename=sisipgambar2.pdf");Last update 5/5/2012
165. PHP? Siapa Takut! 165 echo $buf; pdf_delete($halaman); ?>Program di atas akan memberikan hasil kurang lebih seperti gambar berikut.Mari Menggambar BersamaSelain menggunakan gambar yang telah ada untuk disisipkan ke dokumen PDF, Andadapat juga langsung menggambar pada dokumen PDF dengan beberapa perintah gambarsederhana. Pada dasarnya, menggambar di dokumen PDF adalah menentukan ataumendefinisikan path untuk kemudian ditampilkan pada dokumen PDF. Sebuah pathterdiri 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);Last update 5/5/2012
166. PHP? Siapa Takut! 166 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); ?>Jika skrip di atas dijalankan, maka akan terlihat hasil sebagai berikut.Anda dapat menggunakan perintah pdf_closepath() untuk menutup path secaraotomatis dan pdf_fill_stroke() untuk mengisi kurva tertutup tersebut dengan warnaisian. <?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 lingkaranLast update 5/5/2012
167. PHP? Siapa Takut! 167 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); ?>Hasil dari skrip di atas adalah dokumen PDF seperti berikut ini.Mari kita coba contoh menggambar berikutnya. Anda dapat membuat garis putus-putusdengan 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 ArcLast update 5/5/2012
168. PHP? Siapa Takut! 168 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); ?>Inilah hasil gambar dari skrip di atas.Satu Untuk Semua, Semuanya Dari SatuAdakalanya kita ingin mencetak bentuk, gambar atau tulisan secara berulang padabeberapa halaman PDF yang kita akan buat. Naluri kepemalasan kita akan berontak. Bisatidak 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 lebihkecil ukurannya dengan memanfaatkan template. Contoh skrip berikut ini dapat cobaAnda pahami.Last update 5/5/2012
169. PHP? Siapa Takut! 169 <?php $halaman = pdf_new(); pdf_open_file($halaman); // 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");Last update 5/5/2012
170. PHP? Siapa Takut! 170 echo $buf; pdf_delete($halaman); ?>Dokumen PDF dua halaman akan terbentuk sebagai berikut.Contoh aplikasi dalam dunia nyata adalah untuk dokumen atau pencetakan invoice,kuitansi, packing list, dan dokumen-dokumen lain yang berbentuk form baku.Mewarnai dengan PolaPola isian mirip dengan pola baku/templates, hanya saja pola isian digunakan untukpengganti warna isian. Anda dapat menggambar kurva/path, garis atau bentuk primitifkurva 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 pdf_close_image ($halaman,$gambar); pdf_begin_page($halaman,595,842);Last update 5/5/2012
171. PHP? Siapa Takut! 171 // 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 PentingAnda dapat menandai bagian-bagian yang penting dalam dokumen PDF denganbookmark, sehingga navigasi dokumen menjadi lebih mudah. Bookmark ini bisaberbentuk struktur pohon (tree structure) menyerupai daftar isi. Selain berupa bookmark,Anda dapat juga mempermudah navigasi dokumen dengan membuat daftar thumbnailhalaman-halaman yang ada pada dokumen PDF. Contoh berikut ini akan membantuuntuk 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 KeduaLast update 5/5/2012
172. PHP? Siapa Takut! 172 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); 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 memilikidasar yang cukup untuk membuat dokumen PDF dengan PHP dan PDFLib. Keteranganmengenai fungsi-fungsi PDF yang digunakan dalam skrip contoh di artikel ini dapatAnda pelajari lebih detil pada Manual PHP yang tersedia di http://www.php.net. Selamatmenjadi PDF Maker!