Masino Sinaga

Web Development and PHPMaker

Anda di sini: Beranda / PHPMaker / Mudahnya Menyaring Record Saat Halaman Dimuat di Aplikasi Web dari PHPMaker
Mengambil Informasi Recordset Setelah Record Dipilih di Aplikasi Web dari PHPMaker
Mudahnya Menyertakan File Javascript dan CSS di Aplikasi Web dari PHPMaker

Mudahnya Menyaring Record Saat Halaman Dimuat di Aplikasi Web dari PHPMaker

Sen, 2 Juni 2014 oleh Masino Sinaga 30 Komentar

Setelah kita membahas server event di PHPMaker yang akan dipanggil oleh semua halaman, maka tiba saatnya membahas server event yang dijalankan pada level Table. Artinya, kode yang ditambahkan ke server event ini hanya dipanggil oleh Table yang menggunakannya. Server event level Table berguna jika Anda sebagai Web Developer tidak ingin menerapkannya ke semua Table, tapi hanya untuk Table tertentu saja. Mulai di artikel ini, saya akan membahas server event level Table tersebut, yang dimulai dari server event yang paling sering dipanggil, atau dikenal dengan istilah Common.

PHPMaker secara standar akan mengambil semua record di suatu Table dan menampilkannya pada halaman List yang di-generate olehnya. Permasalahan timbul ketika jumlah record di suatu Table sudah semakin banyak, sehingga waktu yang dibutuhkan untuk memuat halaman List menjadi semakin lama (sekalipun PHPMaker sudah membaginya ke dalam beberapa halaman berdasarkan pengaturan jumlah record per halaman). Tentu saja untuk kondisi ini diperlukan penyaringan record sebelum ditampilkan di halaman List.

PHPMaker sudah menyediakan sebuah server event yang bernama Recordset_Selecting yang lokasinya berada di bawah Server Events -> Table-Specific -> Common. Pastikan sebelumnya Anda sudah memilih salah satu tabel yang Anda inginkan dari panel Database di sebelah kiri dari project PHPMaker Anda, untuk memastikan Anda menambahkan kode di server event pada Table yang tepat.

Seperti namanya, server event Recordset_Selecting akan dipanggil sebelum, atau istilahnya lebih dekat pada saat memilih atau mengambil, semua record dari Table tertentu di Database. Artinya, Anda sebagai Web Developer masih diberi kesempatan oleh PHPMaker untuk menyaring record-record tersebut sebelum sistem mengambil semua record tadi. Argumen server event ini hanya satu, yaitu variabel $filter (yang merupakan bagian dari klausa WHERE di pernyataan SQL) untuk memilih record-record. Anda dapat mengkostumisasi penyaringan untuk mengubah record-record yang dipilih oleh sistem.

Dalam contoh berikut kita akan menambahkan kriteria penyaringan sendiri, di mana nilai argumen $filter bisa saja sudah memiliki nilai, sehingga kita disarankan untuk menambahkan dengan kriteria penyaringan lainnya, dan bukan menimpanya.

function Recordset_Selecting(&$filter) {
    ew_AddFilter($filter, "Field1 = '1234'"); // tambahkan ekspresi filter 
}

Dalam contoh tersebut, Anda sebagai Web Developer dapat menambahkan (bukan menimpa) kriteria penyaringan dengan menggunakan Global Function yang sudah disediakan oleh PHPMaker bernama ew_AddFilter. Fungsi ini memiliki dua argumen. Argumen pertama merupakan variabel $filter, dan argumen kedua merupakan ekspresi filter yang diinginkan. Pastikan ekspresi filter tersebut valid untuk disisipkan ke dalam pernyataan SQL.

Perlu diingat, bahwa server event Recordset_Selecting akan dipanggil di hampir semua halaman yang di-generate oleh PHPMaker, kecuali halaman Add. Dengan kata lain, server event ini akan dipanggil dari semua halaman berikut:

  • List
  • View
  • Edit
  • Delete
  • Update

Jika seandainya Anda ingin menerapkan server event ini hanya untuk halaman List dan View saja, maka Anda dapat menggunakan kode seperti ini:

function Recordset_Selecting(&$filter) {
    if (CurrentPageID() == "list" || CurrentPageID() == "view") 
        ew_AddFilter($filter, "Field1 = '1234'"); // tambahkan ekspresi filter
}

Mudah sekali menerapkan penyaringan record berdasarkan kriteria Anda dengan menggunakan PHPMaker, bukan? Anda sebagai Web Developer cukup hanya menambahkan sedikit kode saja melalui server event Recordset_Selecting. Tidak perlu memodifikasi file script yang sudah di-generate oleh PHPMaker, dan tidak perlu juga mengkostumisasi file Template PHPMaker. 🙂

Ditempatkan di bawah: PHPMaker Ditag dengan:Common, PHPMaker Indonesia, Recordset_Selecting, Server Events, Tutorial PHPMaker

Masino Sinaga

Web Developer pengguna PHPMaker untuk membangun Aplikasi Web sejak tahun 2004. Sampai sekarang masih aktif dan rajin membagikan pengalamannya menggunakan PHPMaker melalui situs masinosinaga.com dan ilovephpmaker.com.

Mengambil Informasi Recordset Setelah Record Dipilih di Aplikasi Web dari PHPMaker
Mudahnya Menyertakan File Javascript dan CSS di Aplikasi Web dari PHPMaker

Komentar

  1. Herman mengatakan

    Rab, 4 Juni 2014 pada 4:12 pm

    Sore Pak.
    Jika saya memiliki tabel Pegawai berisi data – data mengenai kepegawaian. Bagaimana supaya pengguna (seorang Pegawai juga) yang telah login hanya dapat mengakses data tabel Pegawai / pengguna tersebut saja. Misal di tabel Pegawai ada field “nip” dan di tabel User juga ada field “nip”. Pada Tabel Pegawai saya coba ketik script dibawah ini (saya tempatkan di Server Events -> Table-Specific -> Common
    ->Recordset_Selecting ):

    function Recordset_Selecting(&$filter) {
        ew_AddFilter($filter, "nip = 'CurrentUserInfo(nip)'"); 
    }
    

    tapi data tidak muncul. Kira-kira salahnya dimana ya Pak?

    terima kasih sblmnya

    Balas
    • Masino Sinaga mengatakan

      Rab, 4 Juni 2014 pada 4:26 pm

      Kriteria filter-nya masih kurang tepat. Coba dengan yang ini:

      function Recordset_Selecting(&$filter) {
          ew_AddFilter($filter, "nip = '".CurrentUserInfo("nip")."'");
      }
      
      Balas
      • Herman mengatakan

        Kam, 5 Juni 2014 pada 4:52 pm

        Terima Kasih sebelumnya Pak.

        Sudah saya coba seperti ini :

        function Recordset_Selecting(&$filter) {
            ew_AddFilter($filter, "nip = '".CurrentUserInfo("nip")."'"); // tambahkan ekspresi filter
        }
        

        Namun muncul pesan error seperti ini Pak :
        Failed to execute SQL. Error: Unknown column ‘nip’ in ‘field list’
        Failed to execute SQL. Error: Unknown column ‘nip’ in ‘field list’

        Padahal sudah saya cek di table user, field nip sudah ada kok
        kira-kira apanya ya Pak yang menyebabkan error seperti ini?
        terima kasih sebelumnya

        Balas
        • Masino Sinaga mengatakan

          Kam, 5 Juni 2014 pada 5:05 pm

          Pastikan Anda sudah mengaktifkan (beri tanda centang) field ini dari Fields setup di kolom List Page -> List pada project PHPMaker, lalu generate ulang lagi semua file script.

          Balas
          • Herman mengatakan

            Kam, 5 Juni 2014 pada 6:18 pm

            Kalau yang ini sudah saya lakukan tapi masih tetap belum bisa Pak
            Kalau Pak Masino menuliskan :
            “Kalau di PHPMaker, field ini dianggap sebagai User ID yang akan menandai record tersebut milik Pengguna yang sedang login di tabel lain.”
            maskudnya gimana Pak? kalau di table User saya ada field iduser sendiri dan ada field nip sendiri (field nip ini baru saya tambahkan )
            mohon pencerahannya Pak

            Balas
        • Masino Sinaga mengatakan

          Kam, 5 Juni 2014 pada 5:07 pm

          Ups, sori. Pastikan field nip tersebut ada di tabel users tempat menyimpan data Pengguna untuk login. Artinya, field ini bisa saja namanya tidak sama dengan nip di tabel users. Kalau di PHPMaker, field ini dianggap sebagai User ID yang akan menandai record tersebut milik Pengguna yang sedang login di tabel lain.

          Balas
        • Masino Sinaga mengatakan

          Kam, 5 Juni 2014 pada 6:40 pm

          Herman, maksudnya sudah diuraikan dengan sangat jelas di topik berikut pada file Help aplikasi PHPMaker: Tutorial – Advanced Security – User ID Security.

          Balas
  2. Herman mengatakan

    Jum, 6 Juni 2014 pada 8:33 am

    Sekarang sudah berhasil Pak, ternyata saya yang keliru seharusnya table Employees bukan table User
    seperti yang saya katakan sebelumnya

    Terima Kasih Pak atas respon yang cepat dan bimbingannya

    Balas
    • Masino Sinaga mengatakan

      Jum, 6 Juni 2014 pada 9:22 am

      Sama-sama. Senang rasanya bisa membantu. 🙂

      Balas
  3. Rijal mengatakan

    Jum, 10 Juli 2015 pada 11:03 pm

    Pak Masino, mau tanya tentang Penyaringan Hak Akses.
    saya punya Tabel:
    1.Tabel_BAGIAN :
    kode_bagian, nama_bagian
    2.Tabel_Surat :
    nomor_surat, tanggal_surat, tujuan, kode_bagian.
    3.Tabel_User :
    id_user, password, hak_akses, kode_bagian

    saya akan buat jika yang login user dengan kode_bagian :001 (HRD) hanya bisa melihat Record di Tabel_Surat yang Punya Kode_bagian 001(HRD) juga, Jika yang Login Kode_Bagian : 002(Pemasaran) maka hanya bisa melihat Record di Tabel_Surat dengan kode Bagian 002(Pemasaran) juga dst….

    saya sudah coba buat Script seperti ini :

    function Recordset_Selecting(&$filter) {
    $value = ew_ExecuteScalar("SELECT kode_bagian FROM Tabel_Surat");
     if ($value == '001') { 
      ew_AddFilter($filter, "kode_bagian = '001'");    // hanya lihat data surat HRD
     }else if($value == '002') {
      ew_AddFilter($filter, "kode_bagian = '002'");   // hanya lihat data surat Penawaran Pemasaran
     //}else{
     //ew_AddFilter($filter, "");  // admin bisa lihat semua
    	}
    }
    

    saya sudah coba Script diatas tapi yang kebaca selalu yang ‘IF’ pertama yaitu 001, bahkan kalo yg login Admin pun hanya bisa lihat kode_bagian : 001 (IF Pertama).
    kira2 dimana ya Pak Kesalahannya.
    maaf masih belajar.

    Balas
    • Masino Sinaga mengatakan

      Sab, 11 Juli 2015 pada 12:30 am

      Karena dari SQL yang Anda gunakan di atas tidak menggunakan kriteria WHERE … sehingga secara standar (default), dia akan selalu mengambil Record pertama dari kumpulan Record yang di-SELECT dari table tersebut, yang dalam hal ini Record yang memiliki kode 001 pada urutan pertama.

      Balas
  4. heri w mengatakan

    Kam, 17 Desember 2015 pada 9:25 am

    Selamat pagi,

    perkenalkan saya heri :), saya baru 1 minggu mencoba phpmaker ini dan belum punya experience di php sebelumnya…kl boleh mau bertanya.

    terkait artikel ini, kalau kita mau menampilkan transaksi dr suatu tabel saat pertama di load hanya untuk transaksi today date seperti apa ya caranya?
    sudah coba code brikut :

    $dateTransact_search = date(‘Y-m-d’);
    ew_AddFilter($filter, “DATE_IN = ‘”.$dateTransact_search.”‘”);

    namun saat data sudah tampil dan kita lakukan search dgn tanggal berbeda namun hasilnya ‘record not found”.
    sepertinya data yg kita masukkan saat search tidak mengoverwrite code di Recordset_Selecting ini.
    please adv.

    Balas
    • Masino Sinaga mengatakan

      Kam, 17 Desember 2015 pada 11:03 am

      Memang seperti itu.

      Anda bisa menggunakan variabel global untuk mendeteksi halaman List tersebut baru pertama kali dimuat, maka terapkan filter tadi. Sedangkan jika sudah lebih dari sekali dimuat dan/atau jika user melakukan pencarian data, maka abaikan filter itu.

      Balas
      • heri w mengatakan

        Kam, 17 Desember 2015 pada 1:35 pm

        terima kasih sarannya,

        btw..adakah parameter bawaan phpmaker (semisal CurrentPageID) yang bisa digunakan untuk me-deteksi halaman tersebut pertama kali dimuat atau tidak?

        please adv.

        Balas
        • Masino Sinaga mengatakan

          Kam, 17 Desember 2015 pada 5:11 pm

          Tidak ada kalau bawaan PHPMaker. Tapi jika Anda menggunakan Masino Extensions untuk PHPMaker, Anda dapat memanfaatkan session variable yang saya tambahkan di setiap halaman, dan berisi nilai counter sudah berapa kali sebuah halaman yang berisi table tertentu diakses oleh user dalam satu session.

          Balas
          • heri w mengatakan

            Jum, 18 Desember 2015 pada 7:10 am

            terima kasih info nya.
            saya coba dulu dengan ‘memainkan’ session/global variable.

            salam

            Balas
            • Masino Sinaga mengatakan

              Jum, 18 Desember 2015 pada 10:18 am

              Sama-sama.

              Balas
  5. Mulyadi mengatakan

    Rab, 19 April 2017 pada 9:58 am

    Selamat Pagi Pak,

    mohon info contact bapak, bagaimana cara2 mendapatkan fitur2 /contoh2 coding bapak di website bapak ?
    bagaimana cara registrasinya ? dan berapa biaya donasinya ? terima kasih

    Salam
    Mulyadi

    Balas
  6. reffli mengatakan

    Sen, 9 Juli 2018 pada 2:17 pm

    gimana caranya menampilkan recordset dari tabel yang satu ke tabel transaksi

    Balas
    • Masino Sinaga mengatakan

      Kam, 8 November 2018 pada 8:03 pm

      Menampilkan atau menambahkan?

      Balas
  7. bagus mengatakan

    Sab, 22 Agustus 2020 pada 8:52 am

    pake filter cari ini, user masih bisa lihat data lainnya yg bukan milik dia. dengan cara ketik langsung di URL nya dan ganti dengan ID recordnya. agar tidak bisa diganti di URLnya bagaimana cara nya bang Masino ? selain pake cara setting di Advanced Security User ID. terimakasih sebelumnya

    Balas
    • Masino Sinaga mengatakan

      Sab, 22 Agustus 2020 pada 12:41 pm

      Anda bisa menggunakan server event Row_Selected.

      Balas
      • bagus mengatakan

        Sel, 25 Agustus 2020 pada 8:08 am

        beginikah yang dimaksud kan server event Row_Selected. ?
        tapi kok masih bisa user edit URL nya dan lihat record punya userid lain

        function Row_Selected(&$rs) {
        	//echo "Row Selected";
        	$my_id = $rs["lembaga_id"];
        	if ( ($rs["lembaga_id"] != $my_id && CurrentPageID() == "view") || 
        		($rs["lembaga_id"] != $my_id && CurrentPageID() == "edit") || 
        		($rs["lembaga_id"] != $my_id && CurrentPageID() == "add") || 
        		($rs["lembaga_id"] != $my_id && CurrentPageID() == "delete") ) {
        		$this->Terminate("lembagalist.php");
        	}
        }
        

        mohon koreksinya. terimakasih

        Balas
        • Masino Sinaga mengatakan

          Sel, 25 Agustus 2020 pada 10:32 am

          Itu logic-nya masih salah. Buat apa dibandingkan lagi antara $rs[“lembaga_id”] dengan variable $my_id yang sebelumnya sudah diisi dengan nilai dari $rs[“lembaga_id”]?

          Ya pasti kondisi itu tidak akan mungkin terpenuhi dong. Perbaiki logic if nya, dan pastikan dulu menggunakan kondisi yang sederhana, dengan cara membandingkan dengan satu nilai tertentu.

          Selain itu, method terminate menggunakan huruf kecil di awal. Jadi, bukan Terminate, tapi terminate.

          Balas
  8. Charly mengatakan

    Ming, 21 Maret 2021 pada 2:57 pm

    Selamat Sore,

    perkenalkan saya Charly.

    Pak Masino, mohon pencerahannya, untuk kasus Filter. Saya punya halaman Kontrol Progres Pekerjaan yang di dalamnya terdapat 3 Filter, yaitu Program, Kegiatan, dan Bulan. Yang ingin saya tanyakan bagaimana menyaring data berdasarkan Filter Bulan, artinya sebelum Filter Bulan dipilih walaupun sudah menekan tombol Search data tidak akan ditampilkan dan hanya menampilkan informasi, Filter bulan wajib dipilih…mohon bantuannya Pak Masino. Terima kasih

    Balas
    • Masino Sinaga mengatakan

      Sen, 22 Maret 2021 pada 2:25 pm

      Selamat sore Charly, salam kenal kembali…

      Untuk menentukan field yang mandatory (wajib diisi/dipilih) sebelum proses pencarian, silahkan kunjungi artikel ini ya:
      Mudahnya Menentukan Field Mandatory pada Kriteria Pencarian dari PHPMaker

      Balas
  9. Charly mengatakan

    Jum, 26 Maret 2021 pada 6:59 am

    Makasih banyak atas bantuannya Pak Masino.

    Balas
    • Masino Sinaga mengatakan

      Jum, 26 Maret 2021 pada 7:21 am

      Sama-sama.

      Balas

Trackbacks

  1. Mudahnya Menyaring Hanya Sebuah Record di Aplikasi Web dari PHPMaker – Masino Sinaga berkata:
    Kam, 12 Juni 2014 pukul 9:52 am

    […] ingat dengan kemampuan PHPMaker yang memungkinkan Web Developer untuk menyaring kumpulan Record sebelum ditampilkan ke sebuah Aplikasi Web? Di tulisan ini kita akan membahas kemampuan yang mirip […]

    Balas
  2. Menyaring Record Tapi Pengguna Tetap Dapat Melihat Semua Record di PHPMaker – Masino Sinaga berkata:
    Jum, 5 Februari 2016 pukul 12:16 pm

    […] kita sudah pernah membahas bagaimana mudahnya menyaring Record di halaman List ketika pertama kali ditampilkan. Apalagi jika jumlah Record di sebuah table sudah sangat banyak, maka kita bisa menggunakan server […]

    Balas

Tinggalkan Balasan Batalkan balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses.

Pos-pos Terbaru

  • Begini Mudahnya Mengubah Lebar Modal Dialog di PHPMaker 2022
  • Item Menu Tetap Aktif Meskipun Sedang Menampilkan Halaman Tambah, Ubah, Tampilkan, Cari di PHPMaker 2022
  • Hati-Hati Memilih Versi PHP Sebelum Generate Code di PHPMaker 2022
  • Alasan AlwaysUseEnglishUSLocale Sebaiknya Aktif di Masino Extensions untuk PHPMaker 2022
  • MasinoInputMask18 Extension, Autoformat Angka dengan Fitur Lebih Kaya di PHPMaker 2022

Menu

  • Siapa Saya?
  • Web Development
  • PHPMaker
  • Umum
  • Syarat dan Ketentuan
  • Sitemap (Peta Situs)
  • Komentar

Komentar Terbaru

  • Masino Sinaga pada Project Stock Inventory untuk PHPMaker 2022 Sekarang Sudah Bisa Didownload
  • Stanislaus Ariyanto pada Project Stock Inventory untuk PHPMaker 2022 Sekarang Sudah Bisa Didownload
  • Masino Sinaga pada Mudahnya Mendapatkan Info Pengguna Setelah Login di Aplikasi Web dari PHPMaker
  • irwan pada Mudahnya Mendapatkan Info Pengguna Setelah Login di Aplikasi Web dari PHPMaker
  • Masino Sinaga pada Ini Dia Fitur-Fitur yang Terdapat di Masino Extensions untuk PHPMaker 2022

Situs Terkait

  1. I Love PHPMaker
  2. Situs Resmi PHPMaker
  3. Forum Diskusi PHPMaker
  4. PHPMaker di IlmuKomputer.com
  5. PHPMaker Learning

Baru di PHPMaker?

Baca ini terlebih dulu ...

  1. Ayo Menjadi Web Developer yang Cerdas!
  2. PHPMaker: PHP Code Generator + PHP Framework
  3. Pertanyaan-Pertanyaan yang Paling Sering Diajukan Seputar PHPMaker
  4. Tips buat Anda Pemula yang Baru Mengenal dan Menggunakan PHPMaker
  5. Bacalah Help, Bacalah Help, dan Bacalah Help di PHPMaker!

(c) Masino Sinaga 2009 - 2021 | WordPress | Catat masuk | Kembali ke atas