Di beberapa Aplikasi Web yang selama ini saya buat dengan PHPMaker, sering kali saya harus mencegah Pengguna menambah data di halaman tunggal table Detail. Artinya, Pengguna harus menambahkan data Detail tersebut di halaman Master/Detail Add yang berisi form untuk menambah data ke table Master dan table Detail sekaligus.
Saya yakin, Anda sebagai Web Developer pun pasti pernah ingin mengimplementasikan hal yang sama. Suatu saat Anda tidak ingin mengijinkan Pengguna menambah data secara langsung ke table Detail tanpa melibatkan data Master yang bertalian. Timbul pertanyaan, mengapa?
Penyebab utama hal ini biasanya untuk memastikan bahwa data di table Detail harus ditambahkan secara bersamaan dengan data di table Master. Jika Pengguna diberi kesempatan untuk menambahkan data Master maupun Detail dalam waktu yang berbeda, maka besar kemungkinan salah satu data terlewat untuk dimasukkan. Kalau sudah begini, maka halaman Master/Detail Add adalah solusinya.
Katakanlah kita memiliki dua buah table yang memiliki relasi sebagai Master/Detail. Masing-masing bernama orders (table Master) dan orderdetails (table Detail). Dalam hal ini kita tidak mengijinkan Pengguna menambahkan data secara langsung ke halaman Add milik table Detail orderdetails tanpa melibatkan data ke table Master-nya, yaitu orders.
Pertanyaannya adalah, bagaimana cara kita untuk mencegah Pengguna mengakses halaman Add milik table orderdetails tadi, dan sebagai gantinya, kita harus bisa mengarahkan Pengguna ke halaman Master/Detail Add yang berisi Form untuk menginput data orders dan orderdetails sekaligus?
Ternyata solusinya mudah sekali. Ehm, PHPMaker, gitu lho! Kita hanya perlu menambahkan satu baris kode PHP berikut ke dalam server event Page_DataRendered di bawah lokasi Server Events -> Table-Specific -> Add/Copy Page milik table orderdetails, sehingga kode selengkapnya menjadi seperti ini:
// Page Data Rendered event function Page_DataRendered(&$footer) { // Example: //$footer = "your footer"; if ($this->getCurrentMasterTable() <> "orders") { $this->Page_Terminate("ordersadd.php?showdetail=orderdetails"); } }
Kita menempatkan kode tersebut di dalam server event Page_DataRendered untuk memastikan semua kode utama yang memuat data di halaman Add tersebut sudah dimuat oleh sistem. Ini merupakan cara aman untuk meredirect ke halaman tertentu. Pastikan juga kita menempatkannya di table orderdetails (bukan di table orders).
Perhatikanlah bahwa kita juga harus memastikan apakah table Master yang saat itu di-load oleh sistem adalah orders dengan menggunakan method getCurrentMasterTable. Hal ini penting, untuk mengakomodir kemungkinan Pengguna menambahkan data baru di table Detail. Jika kita tidak melakukan pemeriksaan ini, maka sampai kapanpun kita tidak dapat menambahkan data baru di table Detail, sekalipun table Master orders dalam sedang keadaan di-load oleh sistem.
Jika tidak ada table Master orders yang di-load, maka langsung redirect Pengguna ke halaman Master/Detail Add menggunakan method Page_Terminate. Method ini memiliki sebuah parameter, yaitu URL halaman Master/Detail Add, di mana data Master orders yang akan ditambahkan berada di Form bagian atas, sedangkan data Detail orderdetails berada di Form bagian bawahnya. Keduanya berada di dalam satu halaman yang sama.
Luar biasa memang dahsyatnya PHP Framework yang dibangun oleh PHPMaker ini. Bayangkanlah, bahwa dia sudah menyediakan kerangka kerja yang demikian rapinya, sehingga memudahkan Web Developer untuk menambahkan hanya sedikit kode saja untuk mencegah Pengguna mengakses halaman tertentu.
Tentu saja kemampuan ini bisa dikembangkan, misalnya dengan menambahkan kondisi hanya untuk Pengguna dengan level tertentu. Itu semua tergantung kebutuhan saja. Yang pasti, kita dapat mengambil kesimpulan bahwa PHPMaker memang powerful sekaligus flexible.
Betapa mudah, cepat, dan menyenangkan sekali, ya? Pada akhirnya, kenikmatan yang tiada taralah yang bisa diperoleh saat menggunakan PHPMaker untuk membangun Aplikasi Web. Bagaimana dengan Anda? 😀
desthy mengatakan
bagaimana cara membatasi user hanya bisa menambahkan data pada table hanya 1 kali saja, setelah user tersebut sudah mamasukkan datanya maka user tersebut tidak dapat menambahkan data baru tapi mengeditnya masih tetap bisa. terimakasih.
Masino Sinaga mengatakan
Gunakan server event Row_Inserting untuk memeriksa jumlah record di table tersebut, dan jika hasilnya sudah ada 1 record, kembalikan nilai FALSE di server event tadi, untuk mencegah user menambah data.
Baca topik Server Events and Client Scripts dari menu Help PHPMaker untuk informasi lebih lanjut.