Sebagai Web Developer, pernahkah Anda mengalami kesulitan ketika akan menampilkan informasi yang terkait Pengguna yang sudah berhasil login ke Aplikasi Web yang Anda bangun? Katakanlah di halaman yang pertama kali muncul setelah Pengguna berhasil login, Anda ingin menampilkan pesan selamat datang yang disertai dengan nama lengkap Pengguna tersebut. Biasanya, Web Developer melakukan query ulang ke database untuk mengambil data Pengguna berdasarkan ID Pengguna atau Username yang berhasil login tadi.
Melakukan query ulang ke database adalah cara konvensional atau paling kuno yang paling sering dilakukan oleh Web Developer. Mengapa? Karena dengan melakukan query ulang, maka Anda membuka koneksi ke database lagi, sehingga melakukan satu proses tambahan ke database yang bisa menambah waktu. Seharusnya, pada saat Pengguna berhasil login, sistem harus bisa menyediakan informasi Pengguna, karena data Pengguna sudah berhasil divalidasi.
Pertanyaannya adalah: Bagaimana caranya? Bagaimana menghindari melakukan koneksi dan query ulang ke database tadi? Apakah ada cara yang lebih efektif, sekaligus efisien untuk mendapatkan informasi Pengguna yang sudah berhasil login? Jawabannya: Tentu saja ada!
PHPMaker dapat mengatasi hal ini dengan sangat mudah dan cepat. PHPMaker telah menyediakan sebuah server event yang bernama User_Validated, yang dapat Anda akses dari lokasi: Server Events -> Global -> All Pages di project PHPMaker Anda. Seperti namanya, server event ini dieksekusi setelah Pengguna berhasil Login ke Aplikasi Web. Artinya, data Pengguna tersebut telah berhasil divalidasi oleh sistem.
Perlu diingat, bahwa server event ini merupakan member dari Class Security. Artinya, Anda dapat mengakses member lainnya secara langsung di class tersebut (jika dibutuhkan). Hal lain yang perlu diingat adalah, server event User_Validated tidak berlaku untuk Login yang dilakukan oleh Administrator menggunakan fitur Administrator Login (Hard-coded) yang terdapat di menu tab Security dari aplikasi PHPMaker. Anda sebagai Web Developer harus memastikan bahwa kode ini tidak diterapkan untuk Pengguna System Administrator.
Informasi Pengguna dilewatkan ke server event tersebut sebagai sebuah array. Argumen yang digunakan di server event ini adalah $rs. Anda bisa mendapatkan informasi Pengguna yang sedang login, lalu menggunakannya sesuai dengan kebutuhan di Aplikasi Web Anda. Contoh, di tabel users pada database yang Anda gunakan sebagai tabel untuk memverifikasi data Pengguna, terdapat field Nama_Lengkap. Anda bisa mendapatkan nilai dari field tersebut cukup dengan menggunakan $rs[“Nama_Lengkap”].
Berikut ini contoh kode yang dapat Anda gunakan untuk server event User_Validated:
function User_Validated(&$rs) { if (IsLoggedIn() && !IsSysAdmin()) { $_SESSION['UserNamaLengkap'] = $rs['Nama_Lengkap']; } }
Seperti yang Anda lihat dari kode tersebut, kita harus menangani kode ini hanya untuk Pengguna yang bukan Administrator yang login menggunakan fitur Administrator Login (Hard-coded) yang dapat Anda tentukan dari PHPMaker. Itu artinya, kita mengecualikan kode ini hanya untuk Pengguna yang System Administrator (Sys Admin).
PHPMaker telah menyediakan sebuah function untuk mendeteksi apakah Pengguna yang sedang login adalah Sys Admin atau bukan. Cukup dengan menggunakan !IsSysAdmin() untuk memastikan bahwa Pengguna bukan Sys Admin. Kita juga harus memastikan bahwa status Pengguna sudah login dengan menggunakan fungsi global di PHPMaker: IsLoggedIn(), karena jika tidak, maka akan menimbulkan error.
Jika kedua kondisi di atas tadi dipenuhi, maka dalam contoh tersebut kita dapat memperoleh data Nama Lengkap Pengguna (yang diambil dari field yang bernama Nama_Lengkap). Tentu saja kita asumsikan nilai field tersebut bukanlah string kosong. Hasilnya lalu kita tampung ke dalam sebuah variabel session yang bernama UserNamaLengkap. Karena telah ditampung ke variabel session, maka data ini bisa langsung Anda gunakan dari halaman apapun di Aplikasi Web Anda.
Dengan menggunakan server event User_Validated, maka Anda tidak perlu repot-repot melakukan query ulang ke database. Anda juga dapat memastikan bahwa data Pengguna yang diambil sudah valid, karena sudah divalidasi oleh sistem saat berhasil login ke Aplikasi Web.
Wouw! Betapa mudahnya mengimplementasikan business-logic di Aplikasi Web yang dibangun oleh PHPMaker. 🙂
Field nama lengkap apakah harus satu tabel dengan username ?
Betul sekali! 🙂
Jika saya ingin menampilkan informasi nama_lengkap ini pada header atau footer. Di mana saya menambahkan / menempatkan script ini pada Code (Server Event, Client Scipts and Custum Templates) tanpa saya harus merubah file hasil yang digenerated oleh PHPMaker.
Terima Kasih Pak.
Kalau tepat di dalam Header atau di dalam Footer belum ada server event khusus yang tersedia untuk itu. Meskipun demikian, ada dua server event yang mendekati dengan posisi Header atau Footer, masing-masing: Page_DataRendering dan Page_DataRendered.
Alternatif lainnya, Anda bisa membuat extension. Salah satu extension yang bisa digunakan sebagai contoh adalah MasinoHeaderFooter10.
Baik Pak terima kasih atas bantuan dan solusinya
Sama-sama.
Pak, saya mau tanya. Kalau cara insert otomatis ke database bagaimana caranya? Misalkan data Created, Createby, Modifed, Modifedby, Deleted, Deletedby, IPServer.
Dari project PHPMaker, pergi ke Fields setup -> General -> Auto-Update Value, lalu pilih CurrentUsername() untuk field Modifiedby, pilih ew_CurrentDateTime() untuk field Modified. Sedangkan untuk Created dan Createby copy-paste kedua function tadi ke kolom Add Page -> Default Value.
Khusus untuk Deleted and Deletedby, Anda bisa menggunakan server event Row_Deleting (baca Server Events and Client Scripts di help file untuk informasi lebih lanjut dan contoh-contoh kode-nya).
makasih atas jawabannya.
ada lagi pertanyaanya bagaimana cara nya tampilkan data berdasarkan account login.
misalkan : login user01 makanya data yg tampil hanya yg di input oleh user01 tersebut aja (bukan data profile).
trus bagaimana cara mengubah tampilan pada gridview. misalkan cuma ada tombol edit dan view aja.
makasih atas jawabannya.
Untuk menampilkan data yang diinput oleh user yang sedang login itu saja, silahkan baca dan ikuti topik Tutorial – Advanced Security – User ID Security yang terdapat di file Help aplikasi PHPMaker.
Sedangkan untuk menampilkan hak akses Edit dan View saja, silahkan baca dan ikuti topik Tutorial – Advanced Security – Dynamic User Level Security di file Help aplikasi PHPMaker.
Pak kalo kita mau melakukan auto-fill berdasarkan dari info user yang sedang login bagaimana yah?
misalnya:
tabel user isinya: userid, password, nama, bagian
tabel yang disi : tinggi badan, berat, golongan darah, usia, userid, nama, bagian,
saya ingin setelah user login maka kolom muncul yang disi user hanya: tinggi badan, berat badan, golongan darah, dan usia, sedangkan untuk userid, nama, bagian otomatis terisi dari lookup data pada tabel user.
terima kasih atas jawabannya.
Prinsipnya, Anda tinggal me-redirect saja ke halaman Edit milik table users yang mengelola data Pengguna tadi begitu Pengguna berhasil login. Gunakan server event Page_Redirecting yang lokasinya di bawah: Server Events -> Other -> Default Page.
Baca Server Events and Client Scripts di file Help yang disediakan oleh PHPMaker untuk informasi dan contoh lebih lanjut.
kalau ingin menampilkan data berdasarkan session bs ga?trus bagaimana caranya?
misal select * from table where session
Tergantung data apa yang mau diambil dari session.
Pak masino , izin tanya
saya ingin menampilkan foto berdasarkan user login, tapi yang muncul malah nama file foto nya
berikut code nya di client script->Global-> Startup script :
$(document).ready(function() {
$(“#ewHeaderRow”).append(
“ <?php echo "User : ” . CurrentUserInfo(“First_Name”) . ” ” . CurrentUserInfo(“Last_Name”) . “ “; ?> “);
});
mohon solusinya :
Karena memang kode Anda tersebut untuk menampilkan nilai dari field First_Name dan Last_Name. Jika ingin menampilkan foto, berarti Anda harus mengambil nama file foto-nya, lalu gunakan tag img src untuk menampilkan foto sebagaimana mestinya.
Maaf pak Masino, code nya seperti ini
Kode di atas tidak akan menghasilkan apapun, alias hanya menambah string kosong.
sudah fix pak masino, terima kasih
izin tanya lagi pak,
kalo mau menampilkan image dari database dengan autofill yang ada di Lookup Table gmn pak ??
saya sudah setting dan yang tampil hanya nama file imagenya saja pak, gmn caranya agar pada saat autofill yang muncul dalam format Image pak ??
terima kasih
Ada settingan bernama Auto-fill original value dari Tools -> Advanced Settings. Coba Anda aktifkan lalu generate ulang lagi semua file script, lalu coba lagi. Jika masih belum bisa, nonaktifkan setting tersebut, lalu generate ulang lagi semua file script, lalu coba kembali. Intinya, coba bermain-main dengan settingan tersebut, siapa tau ada pengaruhnya. Kabarkan hasilnya ya.
Izin bertanya pak Masino
Jika saya ingin menampilkan username yang sedang login pada field tertentu pada saat form ADD, bagaimana ya
Tergantung field tersebut menggunakan control Combox dengan Lookup Table, atau menggunakan control Textbox.
Kalau menggunakan Combobox yang lookup ke table user, maka bisa menggunakan kode berikut:
Kalau menggunakan Textbox, maka bisa menggunakan kode berikut:
Lalu, bagaimana jika dalam 1 form ADD yang ingin kita tampilkan banyak field : username, FirstName,Address, dan Phone.
Keduanya, Saya terapkan dibeberapa field terdapat error : Attempt to assign property “CurrentValue” on null
Ya tinggal ulangi kode yang sama untuk field terkait lainnya.
Kode yang saya berikan di atas taruh di server event Row_Rendered.
Sudah dicoba tapi ada notice : Notice: Indirect modification of overloaded property
Kodenya seperti apa?
pak masino, untuk pengaturan hanya menampilkan data sesuai dengan login nya gimana yah??
Bisa menggunakan server event Recordset_Selecting.