Dalam membuat sebuah sistem yang mengambil data dari database, hal yang seringkali dilupakan adalah antisipasi ketika tidak ada data yang dikembalikan oleh sistem. Atau NULL. Ini bisa saja karena belum ada datanya, atau tidak ada data yang sesuai dengan parameter/kriteria yang diinginkan.
Misalnya saja, saya ingin mengambil data semua agenda dari table agenda. Namun karena sistem itu baru saja diluncurkan, maka belum ada agenda. Atau ketika saya ingin mengambil agenda di tanggal 12 Juni 2009, namun karena tidak ada agenda pada tanggal tersebut, maka sistem mengembalikan nilai NULL. Dan akan muncul halaman/bagian halaman yang kosong.
Alangkah baiknya jika kita mengantisipasinya. Misalnya dengan kata ‘Belum ada agenda’ atau ‘Agenda tidak ditemukan’.
Selanjutnya yang sering dilupakan adalah pemeriksaan tipe variable yang digunakan untuk query ke dalam database (Selain untuk query dari database, bisa saja untuk keperluan lain dalam sistem.). Misalnya kita menggunakan ‘id’ yang berupa angka sebagai primary key. Dan kita mengambilnya dari segment URL. Misalnya http://example.com/berita/11. Dimana ’11’ adalah nilai id yang akan digunakan untuk query ke dalam database. Misalnya masih berupa angka, maka semua akan baik-baik saja. Namun ketika dimasukkan huruf, maka akan menghasilkan pesan eror. Yang kemudian mungkin bisa digunakan untuk ‘keperluan lain’, misalnya SQL injection.
Kemudian menyambung dari sebelumnya, yang sering dilupakan lagi adalah menyembunyikan pesan error dari eksekusi sistem. Pesan error yang saya maksud misalnya eror parsing halaman, query ke database dan pesan error dari sistem yang lain. Dan bukan pesan error yang memang sengaja dimunculkan untuk notifikasi ke user. Misalnya page not found, error dalam pengisian form dan lain sebagainya.
Pesan eror sangat berguna ketika sistem belum online maupun masih dalam pengembangan. Namun ketika sistem sudah online, maka pesan eror bisa menjadi bumerang karena bisa dianalisa untuk ‘keperluan lain’, misalnya saja mencari kelemahan sistem. Menurut saya, ketika eror itu terjadi, sebaiknya user diarahkan ke halaman error not found. Dan tidak memunculkan log error dari sistem.
Mohon koreksi kalau ada kesalahan.
(Ditulis dalam ‘kekacauan jiwa’..hehe)
Gambar diambil dari sini
untuk zero record oleh database, boleh di check dengan fungsi yang sudah tersedia. Misalkan mysql_num_rows() untuk jenis php-mysql, atau pg_num_rows() untuk php – postgre dan lain-lain.
klo untuk mengatasi sql injection, saya menyarankan model prepare statement dari pada model escaped character. cara ini lebih reliable dan lebih aman dari bandingkan model escape.
istilahnya error user friendly lah ya, bukan error developer friendly. hahahaha.. atau error yang mengerikan yang pernah saya temukan di muka bumi ini waktu mengkompile C program. Segmentation Fault/Core Dump. Error yang membuat saya gila, karena kurang saya mengerti. belum lagi error bahasa assembly. hahahahaha
@ganda:
makasih bro tanggapannya….
yups.. untuk zero record memang sudah ada fungsi defaultnya, tapi kadang itu terlupakan.. karena biasanya saya ngecek dengan data sample. hehe..
saya belum biasa menggunakan prepared statement. hehe.. sekarang juga dimanjakan dengan adanya framework code igniter. jadi saya ga mikir masalah query ke database. tapi saya akan mempelajarinya. Maklumlah newbie..hehehehe..
yups.. eror yang user friendly.. kan tujuan pesan error itu biar user tau erornya. bukan membuat tambah bingung.. hehehe.. saya malah belum pernah coding C. biasanya pake Java. itupun pake IDE Netbeans. Erornya keliatan dimana… hehehehehhe…
@d3ptzz, hmm.. kadang2 saya juga sering lupa sih. Saya mengambil data menggunakan php dari database dan mengirimkannya ke aplikasi flex. Metodenya mirip XMLRPC, ajax, atau SOA juga.
Prepared statement sangat nyaman di gunakan bro, saya sering menggunakannya untuk aplikasi java. 😀 Tapi saya rasa framework code igniter pastilah sudah mengimplementasikan fungsi ini. bener gak yah? Anyway, saya juga pernah buat framework php sederhana untuk database2 sepert ini menggunakan OO PHP. tapi malas juga. Soalnya saya jarang pakai, sehingga saya jadi malas membuatnya. hehehehe… *di lempar keyboar sama d3ptzz*
Hmm.. klo untuk java, Eclipse adalah favourite saya. Saya malah mengkoding php pakai eclipse. I love eclipse. 😀 Mengenai perang Eclipse dengan Net Beans, di menangkan oleh eclipse bukan ya? Tapi kadang2 saya juga pakai net beans dengan keperluan tertentu, misalnya design GUI. hehehehehe… Sisanya, eclipse lah yang beraksi..
@ganda: wah lanjutkan aja php frameworknya, nanti saya jadi usernya yang pertama.. hehehehe..
kalau netbeans sama eclipse, sementara ini saya lebih suka pake netbeans. entahlah menurut kata hati saya lebih nyaman. haha. walaupun kadang selingkuh juga pake eclipse. untuk coba-coba.. ehehe.. Saya sudah terbiasa dengan interface netbeans yang kotak, kaku itu. haha.. Dari pertama sudah make netbeans. hehehe..
Ya setiap orang punya pendapat sendiri lah.. hehe.. Dan tak perlu diperdebatkan yang penting hasil akhirnya bagus.. ahaha..
Btw jadi tertarik dengan flex, mau coba belajar ah. Nanti mohon bimbingannya bro…:D
spertinya komentar saya di tangkap akismet ya
@ganda: bukan mas, tapi database server sepertinya error… tadinya udah mau saya reply,.. ee tiba-tiba ngilang… maapkan server saya mas..:-)
kalau berkenan mohon postingkan lagi komentarnya… hehehe
oalah. sudah lupa saya.. hahahaha…. forget it lah bro.. gak berkurangkan jadinya duitmu??? hahahaha…. saya tetap berkomentar ria koq di sini.. 😀
@ganda: hehehehhee… makasih banget juragan master suhu mahaguru sudah mau mampir ke blog cupu ini..:D
halah.. itu sudah berlebihan bro.. hahahaha
wuahahahhahah….
mantabs tuh gan.. :))
ternyata NULL itu penting banget y000..
berarti otak juga harus di set NULL di /dev/null
jadi blank deeeehhhh…
otak ama dengkul jadi sinkron
wkwkkwkwk…
:)) :))
hmmm,, btw sukses buat perkembangannya di website n java ya brooo… ^^
wish u the best…
[-=C3=-]
@eko budi prasetyo: Amin.. makasih bro….:)
0wiya gan.. sory buat tadi pagi y0000..
salam hangat dari saya..
senang punya kakak angkatan yang sabar seperti mas d3ptzz.. ^^
[-=C3=-]
Om kunjungi blog q ya
@Tpao: ok ok ok….:-) terimakasih telah berkunjung ke blog saya..:-)
misi numpang tanya lok misal na mau capture data dari web lain tanpa select DB dengan PHP gmn ya???
jadi web kita yang kita bwad selalu mengikut bila web yang kita capture apdet…..
mksih ya kang…………..
@rieskhy: bisa menggunakan RSS/Atom Feed.. bisa dilihat di kandangbuaya.com itu mengambil post dari semua subdomain di kandangbuaya.com termasuk blog ini.. 🙂
@d3ptzz, mngkin lebih spesifik ke coding mungkin mas pake php bsa g mas??
mhon ptunjuk mas..
thank…
@rieskhy: bisa menggunakan: simple pie (http://simplepie.org)
kalau untuk codingnya bisa dilihat di dokumentasinya..
@rieskhy, karena rss sudah berformat XML, tinggal menggunakan fitur XML parser yang available pada programming yang di gunakan. untuk check misal setiap 1 jam, boleh menggunakan cron jobs linux atau scheduled task di windows.