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? 😀
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
Tidak perlu lagi memeriksa ada di Tab 2. Anda cukup menggunakan server event Row_Rendered untuk memanipulasi nilai di sebuah field.
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.
Kode seperti apa yang Anda ubah?
Catatan: bungkus kode Anda dengan tag:
[/code]
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.
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 ?
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? 😛
terima kasih, solved
Pak Masino. kalau untuk penambahan ke tabel hapus barang setelah add atau edit di tabel barang, kode script nya gmn pak?
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?
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
Apa kode yang terdapat di baris 897 dan 898 dari file hapus_baranginfo.php?
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….
Anda bisa mengeset property Filter dengan membuat pemeriksaan kondisi menggunakan format sintaks PHP seperti ini:
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
Bukan mungkin lagi, tapi PHPMaker jelas bisa!
Mau contoh? Klik di sini.
Maaf pak masino sya belum menemukan cntoh yg saya maksud dari contoh aplikasi yg pak masino berikan
Setelah berhasil login, klik menu Purchases, lalu klik tombol Add Purchases/Purchases Detail.
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
Anda bisa mendownload contoh kodenya dari file project PHPMaker untuk Stock Inventory tersebut setelah menjadi member di website I Love PHPMaker.
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
Kecilkan nilai property Size milik field yang bertalian dari tab Fields -> panel Edit Tag.
Trima kasih banyak pak
Sama-sama.
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.
Bisa, pakai fitur Custom Files.
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
Silahkan download file demo project yang sudah disediakan oleh PHPMaker. Setelah Anda generate, lihat hasilnya pada menu/halaman “Order Details”.
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 🙂
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.