Di artikel sebelumnya kita sudah membahas bagaimana mudahnya kita sebagai Web Developer mengubah link Hapus di setiap Record pada halaman List. Seperti janji saya di artikel tersebut, kali ini kita akan membahas bagaimana cara menangkap data yang berasal dari URL di link Hapus pada tabel barang, untuk selanjutnya terisi secara otomatis pada halaman atau form Tambah di tabel hapus_barang.
Sebagai informasi, untuk memudahkan Anda mengikuti ulasan di bawah ini, maka saya sertakan struktur tabel yang terkait seperti berikut:
-- ---------------------------- -- Table structure for barang -- ---------------------------- DROP TABLE IF EXISTS `barang`; CREATE TABLE `barang` ( `Kode_Barang` char(3) NOT NULL, `Nama_Barang` varchar(20) DEFAULT NULL, PRIMARY KEY (`Kode_Barang`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- ---------------------------- -- Records of barang -- ---------------------------- INSERT INTO `barang` VALUES ('001', 'Barang Pertama'); INSERT INTO `barang` VALUES ('002', 'Barang Kedua'); INSERT INTO `barang` VALUES ('003', 'Barang Ketiga'); INSERT INTO `barang` VALUES ('004', 'Barang Keempat'); INSERT INTO `barang` VALUES ('005', 'Barang Kelima'); -- ---------------------------- -- Table structure for hapus_barang -- ---------------------------- DROP TABLE IF EXISTS `hapus_barang`; CREATE TABLE `hapus_barang` ( `ID_Hapus` int(5) NOT NULL AUTO_INCREMENT, `Kode_Barang` char(3) DEFAULT NULL, `Nama_Barang` varchar(20) DEFAULT NULL, `Keterangan` text, PRIMARY KEY (`ID_Hapus`) ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
Untuk mendapatkan data yang berasal dari parameter di URL, maka pertama kali kita cukup mengambil nilainya menggunakan $_GET. Tapi, supaya data tersebut tetap tersimpan sekalipun URL berikutnya sudah tidak menyertakan paramter Kode_Barang (misalnya jika sistem mengembalikan pesan validasi karena data masih kosong dan dalam hal ini parameter tidak disertakan lagi di URL), maka kita sebaiknya menyimpannya ke dalam variabel session.
Untuk itu, kita cukup menambahkan kode berikut ke dalam server event Page_Load yang terdapat di bawah Server Events -> Table-Specific -> Add/Copy Page, sehingga kode selengkapnya menjadi seperti ini:
// Page Load event function Page_Load() { //echo "Page Load"; if (isset($_GET["Kode_Barang"])) { $_SESSION["Kode_Barang"] = ew_RemoveHtml($_GET["Kode_Barang"]); } }
Perhatikanlah kode tersebut. Kita menggunakan function ew_RemoveHtml untuk menghilangkan tag HTML dari parameter Kode_Barang (jika seandainya Pengguna nakal dengan menyisipkan tag HTML atau Javascript), sehingga dapat mencegah serangan XSS.
Langkah selanjutnya, kita akan menampilkan data di form Tambah dalam mode Read-Only. Untuk itu, kita cukup menambahkan kode berikut ke dalam server event Row_Rendered milik tabel hapus_barang, sehingga kode selengkapnya menjadi seperti ini:
// Row Rendered event function Row_Rendered() { // To view properties of field class, use: //var_dump($this-><FieldName>); if (CurrentPageID() == "add") { $this->Kode_Barang->EditValue = $_SESSION["Kode_Barang"]; $this->Nama_Barang->EditValue = ew_ExecuteScalar("SELECT Nama_Barang FROM barang WHERE Kode_Barang = '".$_SESSION["Kode_Barang"]."'"); $this->Kode_Barang->ReadOnly = TRUE; $this->Nama_Barang->ReadOnly = TRUE; } }
Setelah itu, kita juga harus menambahkan kode berikut masing-masing ke dalam server event Row_Inserting dan Row_Inserted milik tabel hapus_barang:
Ini untuk server event Row_Inserting:
// Row Inserting event function Row_Inserting($rsold, &$rsnew) { // Enter your code here // To cancel, set return value to FALSE $rsnew["Kode_Barang"] = $_SESSION["Kode_Barang"]; $rsnew["Nama_Barang"] = ew_ExecuteScalar("SELECT Nama_Barang FROM barang WHERE Kode_Barang = '".$_SESSION["Kode_Barang"]."'"); return TRUE; }
Fungsi server event ini untuk memastikan bahwa data yang akan dimasukkan secara otomatis pada field Kode_Barang dan Nama_Barang sesuai dengan data yang terdapat pada link Hapus dari tabel barang.
Dan ini untuk server event Row_Inserted:
// Row Inserted event function Row_Inserted($rsold, &$rsnew) { //echo "Row Inserted" ew_Execute("DELETE FROM barang WHERE Kode_Barang = '".$rsnew["Kode_Barang"]."'"); $this->setSuccessMessage("Data berhasil dihapus dan tersimpan ke tabel log penghapusan"); }
Fungsi server event Row_Inserted untuk menghapus data di tabel barang, setelah data log penghapusan berhasil dimasukkan ke tabel hapus_barang. Kita bahkan bisa menampilkan pesan berhasil yang isinya kita tentukan sendiri, dengan cara memanggil method setSuccessMessage.
Wow, keren ya PHPMaker? 😀
Rijal mengatakan
Pak Masino apakah memungkinkan untuk menampilkan sebuah objek misal ‘Teks’ yg berisi informasi di Halaman add (di bagian Tab 2), jadi sy sudah membuat halaman add yg terdapat 2 Tab ( Pengaturan di Table=>Multi Page)
misal Tab 1 : berisi halaman input/ add
Tab 2 : berisi Informasi/ langkah2 Input atau data ambil dari Database. (atau hanya teks biasa)
( utk Tab2 sdh saya siasati dg menampilkan sebuah field yg nantinya sy Hidden)
sy sdh mempunyai gambaran berdasarkan artikel diatas, misal sperti ini :
function Row_Rendered() {
if (CurrentPageID() == “add” && *** $this->disini Jika halaman ‘Tab2’)*** {
// di sini ditampilkan sebuah informasi / jika memungkinan bisa ambil dari database
}
}
maksud logika diatas adalah : Jika yg Ditampilkan adalah Halaman Add dan ada Pada Bagian Tab 2.
tp sy tidak tau bgaimana fungsi yg Tab2 tersebut, atau memang tidak ada fungsi untuk hal itu.
apakah memungkinkan Pak untuk melakukan hal tersebut ?
Trimakasih
Masino Sinaga mengatakan
Tidak perlu lagi memeriksa ada di Tab 2. Anda cukup menggunakan server event Row_Rendered untuk memanipulasi nilai di sebuah field.
Rijal mengatakan
ehmm… maksudnya bagaimana ya pak, kok saya belum paham,
misalnya saya punya 3 field: NIM, Nama, Alamat.
untuk NIM dan Nama saya taruh di ‘Tab1’ sedangkan untuk Alamat saya taruh di ‘Tab 2’ . (utk Alamat di taruh di Tab 2 tujuanya hanya utk menampilkan 2 Page / Tab)
Nah, pada Tab 2 tersebut rencanaya akan saya tambahkan sebuah informsi atau misalnya List data Mahasiswa ( buatan sendiri pake PHP Manual) bukan Generate PHP MAKER,
saya sudah coba ubah2 scara manual dari File hasil Generate, di bagian ini :
// di bagian ini ditampilkan List (buatan sendiri) atau include(“tampil_mahasiswa.php”);
kode tersebut sudah berjalan seperti yang di harapkan, namun kelemahannya adalah setiap kali Project PHP Maker, di Generate ulang maka harus merubah2 lagi File Scriptnya secara Manual.
Nah, apakah memungkinkan Pak cara tersebut di buat dari project PHP Maker tanpa harus ngrubah2 File Script secara Manual… ?
Trimakasih.
Masino Sinaga mengatakan
Kode seperti apa yang Anda ubah?
Catatan: bungkus kode Anda dengan tag:
[/code]
Rijal mengatakan
cara diatas sdh berhasil , namun saya merubahnya melalui cara Manual yaitu dengan merubah file hasil Generate (bukan dari Project PHP Maker)
kelemahannya adalah ketika di Generate ulang maka harus merubah file Script secara manual lagi.
hendra mengatakan
Isi row_rendered
$this->Field1->EditValue= “001”
$this->Field2->EditValue= “ABC”
Saya mempunya table dg 2 field, field 1 KEY, kedua field varchar dan NOT null
isi row_rendered hanya diatas, namun error pada FIELD2, dengan error
“Creating default object from empty value in C:\xampp\htdocs\php11demo\XXinfo.php on line 836”
Apa ya pak yang salah ?
Masino Sinaga mengatakan
Apanya yang salah? Mau tahu apa yang salah? Pertama, info yang Anda sampaikan tidak jelas! Error itu terjadi pada saat apa? Halaman apa yang Anda sedang buka/tampilkan? Kedua, Anda tidak menjelaskan Field2 itu menggunakan control apa? TextBox, ComboBox, Radio Button, atau? Sudah tahu sekarang apa yang salah? 😛
hendra mengatakan
terima kasih, solved
Faris mengatakan
Pak Masino. kalau untuk penambahan ke tabel hapus barang setelah add atau edit di tabel barang, kode script nya gmn pak?
Masino Sinaga mengatakan
Kok agak aneh ya. Kenapa harus ditambahkan ke tabel hapus barang setelah add atau edit. Itu kan sudah gak sesuai lagi fungsi dari tabel hapus barang tersebut. Masak setelah add atau edit nambah ke tabel hapus barang?
Faris mengatakan
Notice: Undefined index: Kode_Barang in C:\Xampp1\htdocs\aplikasi\hapus_baranginfo.php on line 897
Notice: Undefined index: Kode_Barang in C:\Xampp1\htdocs\aplikasi\hapus_baranginfo.php on line 898
Masino Sinaga mengatakan
Apa kode yang terdapat di baris 897 dan 898 dari file hapus_baranginfo.php?
Faris mengatakan
Maaf Pak Masino Pertanyaan yang membingungkan, maksud saya waktu add otomatis add ke tabel yang lain, skrg sdh solved pak dengan code ini,
// Row Inserted event
function Row_Inserted($rsold, &$rsnew) {
//echo “Row Inserted”
// Copy record
// NOTE: Modify your SQL here, replace the table name, field name and the condition
$rsnew = ew_Execute(“INSERT INTO hapus_barang (kode_barang, nama_barang) SELECT kode_barang, nama_barang FROM barang WHERE Kode_Barang = ‘”.$rsnew[“Kode_Barang”].”‘”);
}.
Skrg saya mau tanya lagi Pak Masino, saya buat dynamic selection, waktu add saya tidak ingin mengeluarkan tersebut tp field tersebut muncul di list, bagaiman setting default value nya pak? dan waktu di edit dynamic selection nya keluar… Terimah kasih sebelumnya Pak Masino….
Masino Sinaga mengatakan
Anda bisa mengeset property Filter dengan membuat pemeriksaan kondisi menggunakan format sintaks PHP seperti ini:
trie mengatakan
Apakah mungkin php maker bisa imput data lebih dari satu item sekaligus dengan no sama …..contohnya……sya pnya konsumen A dia membeli 5 jenis barang yang berbeda dan sy ingin imput data tersebut sekaligus dengan 5 item satu konsummen…mohon penjelasanya
Masino Sinaga mengatakan
Bukan mungkin lagi, tapi PHPMaker jelas bisa!
Mau contoh? Klik di sini.
trie mengatakan
Maaf pak masino sya belum menemukan cntoh yg saya maksud dari contoh aplikasi yg pak masino berikan
Masino Sinaga mengatakan
Setelah berhasil login, klik menu Purchases, lalu klik tombol Add Purchases/Purchases Detail.
trie mengatakan
Contoh kodenya gimana ya pak…..bila ada pembeli nama A dia memesan 5 jenis barang yang berbeda dan di input sekaligus disimpan di list sementara setelah selesai baru simpan semua kedatabase..mohon bantuanya dan trims
Masino Sinaga mengatakan
Anda bisa mendownload contoh kodenya dari file project PHPMaker untuk Stock Inventory tersebut setelah menjadi member di website I Love PHPMaker.
alfa mengatakan
Selamat malam pak masino
…..sy punya data input barang dengan girdadd kolommya banyak pak tetapi karakternya cuma sedikit2. Pertannyaan saya gimana caranya memperkecil kolom digirdadd ya pak supaya tidak terlalu panjang kesamping…..mohon batuanya trima kasih
Masino Sinaga mengatakan
Kecilkan nilai property Size milik field yang bertalian dari tab Fields -> panel Edit Tag.
alfa mengatakan
Trima kasih banyak pak
Masino Sinaga mengatakan
Sama-sama.
Meidy N Surawinata mengatakan
Sore pak
Mau tanya apakah di PHPMaker dapat membuat laporan absensi per bulan. Mulai tanggal 1 sd akhir bulan dengan posisi menyamping ?
Apakah di set dlm bentuk report khusus ? Atau bagaimana pak ?
Apakah ada contoh nya ?
Terimakasih.
Masino Sinaga mengatakan
Bisa, pakai fitur Custom Files.
Riyantoko Agung mengatakan
mas boleh tanya ?
saya punya kasus seperti ini:
saya punya tabel barang, yang isi kolomnya id_barang, nama_barang, harga_satuan, jumlah, harga_total
saya kan buat isi data dalam tabel itu ditampilin semua
SELECT * FROM barang.
yang jadi pertanyaan gimana caranya membuat harga_total terisi otomatis setelah saya mengisi harga_satuan dan jumlah.
seandainya itu data dengan jumlah pasti saya bisa, tapi kendala saya disini data dalam tabel tersebut tidak pasti berapa baris.
saya sudah coba tetapi yang bisa terisi otomatis hanya baris pertama, untuk kedua dan seterusnya tidak bisa terisi otomatis
Masino Sinaga mengatakan
Silahkan download file demo project yang sudah disediakan oleh PHPMaker. Setelah Anda generate, lihat hasilnya pada menu/halaman “Order Details”.
Alief mengatakan
pak masino, mau tanya dong, saya buat file custom buat ngirim email, masalahnya, leng dari textbox nya itu ga muat kalo dikirim lewat URL, sedangkan yang saya tau kalo klik button, file custom di PHPMaker selalu ngelempar data ke URL, adakah cara lain?
Terima kasih 🙂
Masino Sinaga mengatakan
Anda bisa menggunakan server event yang bernama Email_Sending. Baca topik Server Events and Client Scripts dari menu Help PHPMaker untuk info dan contoh kode lebih lanjut.
wibisono mengatakan
Pak Masino
Selamat Siang
Ijinkan saya bertanya.
Misalkan kita punya barang dengan kode “ABC” tercetak dengan dengan barcode. Begitu barang tersebut akan dikeluarkan dan dengan discan, akan otomatis tersimpan tanggal dan waktu saat barang tersebut dikeluarkan saat di scan tanpa harus klik tombol Edit dan update.
Memungkinkan gak ya pak? dengan tujuan untuk mempercepat waktu kerja.
Terimakasih banyak Pak sebelumnya
Masino Sinaga mengatakan
Jawabannya: memungkinkan sekali dong. 😉
eka dalas pangestu mengatakan
Pak masino izin bertanya, bagaimana ya kita menggunakan excutescalar(select) berdasarkan data yang baru sedang kita input pak
terimakasih
Masino Sinaga mengatakan
Kalau data baru diinput, tinggal gunakan aja ExecuteScalar-nya di server event Row_Inserted.
Kwesi mengatakan
Hello Mr Masino,
Many thanks for you prompt replies. Keep it up Sir. I submitted a comment earlier but I guess you didn’t quite get me. To make it brief, please how do I get a value from a form (before the form is submited/Added). Again, where should this code be, in Row_inserting or Page_load functions etc?
For instance, I would like to auto calculate a balance given total and amount from the form values. That is, (balance = total – amount). And the value of balance is stored in the balance field in Database.
I tried doing this in Page_load function … “if (isset($_GET[“amountpaid”]){ $_SESSION[“amount”] =ew_RemoveHtml($_GET[“amountpaid”])};” And then I stored the session value in a global variable etc etc but that isn’t working. Kindly assist. Thank you.
Masino Sinaga mengatakan
You may simply use Row_Inserting server event. Just do calculation in that event, for example, as you mentioned above about the three fields: balance, total, and amount are located in the current table:
achmad fatchur rosid mengatakan
selamat siang pak masino, saya mau bertanya bagaimana cara untuk mengisi form otomatis/langsung terisi ketika add (jika fieldnya memakai lookup)?
Masino Sinaga mengatakan
Pakai fitur Auto fill milik Lookup Table di project PHPMaker.
Murniyati mengatakan
Apa kode diatas berjalan untuk phpmaker 2023, karena saya coba tidak berjalan
Masino Sinaga mengatakan
Anda betul. Kode di atas tidak berjalan di PHPMaker 2023, karena ada sedikit perbedaan untuk beberapa global function yang digunakan.
Pertama, ganti ew_RemoveHtml dengan RemoveHtml.
Kedua, ganti ew_ExecuteScalar dengan ExecuteScalar.
Ketiga, ganti ew_Execute dengan ExecuteStatement.
Udah, itu aja perubahannya. Lalu, silahkan coba lagi.
Murniyati mengatakan
Terdapat error seperti dibawah ini ketika kita tambah pada halaman
hapus barang
bagaimana penyelesaiannya
Warning: Undefined array key “Kode_Barang” in C:\xampp\htdocs\test\models\HapusBarang.php on line 1369
Warning: Undefined array key “Kode_Barang” in C:\xampp\htdocs\test\models\HapusBarang.php on line 1370
Masino Sinaga mengatakan
Seperti apa kode di baris 1369 dan 1370 pada file models/HapusBarang.php?
Murniyati mengatakan
Masino Sinaga mengatakan
Coba kode yang ini:
disesuaikan menjadi seperti ini:
Murniyati mengatakan
Berjalan dengan baik.
tapi ketika kita akan menghapus barang yang berikutnya makan hal itu tidak berjalan.
Masino Sinaga mengatakan
Betul. Penyesuaian kode barusan hanya untuk mengatasi jika variabel session Kode_Barang belum ada nilainya, maka harus diberikan nilai default, supaya tidak menimbulkan error sebelumnya. Idenya seperti itu.
Intinya, kode di artikel ini terkait dengan artikel sebelumnya yang berjudul Mudahnya Mengubah Link Hapus di Halaman List Aplikasi Web dari PHPMaker.
Murniyati mengatakan
Mantap, luar biasa PHP Maker dan Pak Masino.