On Thursday 20 February 2003 13:40, you wrote: > On 19-Feb-2003, Togu Raja wrote: > > Begini, saya membuat sebuah program aplikasi web dgn PHP. Di salah > > satu bagian program, user akan men-submit sebuah FORM untuk > > menginput data sekaligus mengedit data, jika sudah ada data > > sebelumnya. Saya ingin setelah ia men-submit FORM tsb, ia tidak > > dapat menekan tombol 'BACK' pada Browser, atau apa saja yg membuat > > pindah ke history browser sebelumnya. .........<cut..............>........................................................................... > Jadi problem sebetulnya adalah: gimana caranya supaya suatu form tidak > bisa disubmit dg data yg sama lebih dr sekali (misalnya supaya data yg > masuk gak dobel). > Menurut saya jika approachnya adalah mendisable back button itu tidak > tepat. Alasannya ya seperti yg saya bilang di posting saya yg satunya. > Salah satu solusinya adalah seperti yg digunakan oleh Apache Struts > (salah satu MVC framework open-source yg populer utk J2EE), yaitu dg > menggenerate suatu one-time-use token yg unique pada saat formnya > dipopulate utk disave di session dan juga di html formnya sbg hidden > input, lalu pada saat kita terima balik formnya (setelah disubmit) > kita cek tokennya, kalo gak valid berarti data ini udah pernah > disubmit sebelumnya. Jelasnya coba liat dokumentasi Struts utk > saveToken(), isTokenValid() dan resetToken() di class Action. Cara yg > sama tentunya bisa saja diterapkan di PHP... tapi buat homework aja ya > :) Hint: google "php prevent duplicate submit". > Ronny
kok repot amat ? di akalin pakai fungsi php header() kan uda cukup. Yg saya lakukan biasanya: waktu submit, data saya post ke satu page yg isinya hanya script php (anggap aja namanya proses.php) yg bertugas memproses / insert / update/ delete dkk (pokoknya yg berhubungan dengan database). Begitu script ini selesai memproses, langsung manggil header("Location:say_success.php"); Jadi browser ga meng cache proses.php, kalau tombol BACK di pencet, akan langsung kembali ke page awal (yg berisi form) bukan ke proses.php. Jadi data yg masuk ga akan dobel kalau di pencet Back/Foward (kecuali kalau udah di back, user nekan tombol submit lagi, ya data bisa masuk lagi....) diagramnya : form.html --> proses.php (di proses di server, ga masuk ke browser client) --> say_success.php(kalu berhasil) atau say_fail.php (kalo error) notes : *di proses.php tidak boleh terdapat fungsi semacam echo, soalnya ini bakal error kalau ketemu fungsi header(Location...) * kalau cuman menampilkan sesuatu (tidak nge save ke dalam database), ga perlu di redirect lagi...langsung aja tampilkan hasilnya dalam proses.php ... Biar lebih yakin dan aman, bisa pakai header("Cache-control:no-cache"); -- -- Adwin -- Utk berhenti langganan, kirim email ke [EMAIL PROTECTED] Informasi arsip di http://www.linux.or.id/milis.php3