Saya yakin bahwa sebagai Web Developer kita pasti pernah ingin mengimplementasikan sebuah business-logic yang mengharuskan menyimpan data yang mirip (serupa tapi tak sama) ke dalam dua buah Table sekaligus. Artinya, saat Pengguna mengklik tombol Simpan satu kali, maka sistem akan menyimpan data yang diinput tadi ke dalam dua Table di Database sekaligus.
Di atas tadi saya mengatakan serupa tapi tak sama. Maksudnya adalah, data yang diinput di sebuah form terdiri dari data yang memiliki struktur Table yang mirip, tapi tidak sama. Bingung maksudnya? Jangan bingung dulu, karena di bawah ini saya sertakan contoh yang sederhana agar mudah dipahami.
Katakanlah kita memiliki dua buah table yang masing-masing bernama table1 dan table2. Kedua table tersebut juga masing-masing memiliki dua buah Field; tapi nama Field di kedua Table tadi berbeda (meskipun mirip), seperti yang ditunjukkan pada script SQL di bawah ini.
-- ---------------------------- -- Table structure for table1 -- ---------------------------- DROP TABLE IF EXISTS `table1`; CREATE TABLE `table1` ( `Kode1` char(3) NOT NULL, `Deskripsi1` varchar(50) DEFAULT NULL, PRIMARY KEY (`Kode1`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- ---------------------------- -- Table structure for table2 -- ---------------------------- DROP TABLE IF EXISTS `table2`; CREATE TABLE `table2` ( `Kode2` char(3) NOT NULL, `Deskripsi2` varchar(50) DEFAULT NULL, PRIMARY KEY (`Kode2`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Perhatikanlah bahwa untuk Table table1, maka nama Field-nya adalah Kode1 dan Deskripsi1. Sedangkan untuk Table table2, maka nama Field-nya adalah Kode2 dan Deskripsi2. See? Sudah mulai jelas apa yang saya maksudkan dengan istilah serupa tapi tak sama?
Untuk memudahkan pengimplementasiannya, maka berikut ini saya sertakan contoh data untuk kedua Table di atas tadi, seperti yang ditunjukkan pada SQL berikut:
-- ---------------------------- -- Records of table1 -- ---------------------------- INSERT INTO `table1` VALUES ('001', 'Satu'); INSERT INTO `table1` VALUES ('002', 'Dua'); INSERT INTO `table1` VALUES ('003', 'Tiga'); INSERT INTO `table1` VALUES ('004', 'Empat'); -- ---------------------------- -- Records of table2 -- ---------------------------- INSERT INTO `table2` VALUES ('001', 'One'); INSERT INTO `table2` VALUES ('002', 'Two'); INSERT INTO `table2` VALUES ('003', 'Three'); INSERT INTO `table2` VALUES ('004', 'Four');
Dari masing-masing 4 Record di kedua Table barusan, saya berharap sekarang Anda sudah semakin paham lagi dengan istilah serupa tapi tak sama yang saya maksudkan di atas tadi. Ya, dalam hal ini kedua Table memiliki relasi pada field Kode1 dan Kode2.
Dari kedua Table tersebut, selanjutnya kita harus membuat sebuah object baru di dalam Database berupa View (Database View). Katakanlah nama View tersebut adalah table1_join_table2. View ini nantinya digunakan sebagai dasar untuk membuat User Interface (Antar Muka Pengguna), yang digunakan untuk menginput data yang bertalian.
Seperti namanya, View tersebut akan men-join-kan kedua Table di atas tadi. Field yang digunakan sebagai relasi antara keduanya adalah Kode1 dan Kode2, seperti yang ditunjukkan pada SQL berikut:
-- ---------------------------- -- View structure for table1_join_table2 -- ---------------------------- DROP VIEW IF EXISTS `table1_join_table2`; CREATE VIEW `table1_join_table2` AS SELECT table1.Kode1, table1.Deskripsi1, table2.Deskripsi2 FROM table1 INNER JOIN table2 ON table1.Kode1 = table2.Kode2 ;
Perhatikan bahwa hanya ada 3 Field yang ditampilkan, yaitu Kode1, Deskripsi1, dan Deskripsi2.
Nah, berdasarkan View ini, maka kita dapat membangkitkan halaman Add yang dihasilkan oleh PHPMaker. Tapi, supaya sistem dapat memasukkan ke dalam 2 Table tadi sekaligus, maka kita hanya perlu memasukkan kode berikut ke dalam server event Row_Inserting milik object View table1_join_table2 tersebut.
Kode selengkapnya di server event Row_Inserting tadi adalah seperti ini:
// Row Inserting event function Row_Inserting($rsold, &$rsnew) { // Enter your code here // To cancel, set return value to FALSE ew_Execute("INSERT INTO table2 VALUES ('".$rsnew["Kode1"]."', '".$rsnew["Deskripsi2"]."')"); $this->UpdateTable = "table1"; unset($rsnew["Deskripsi2"]); return TRUE; }
Perhatikanlah bahwa dalam hal ini kita harus mengeksekusi terlebih dulu perintah INSERT INTO ke dalam table2 dengan menggunakan global function ew_Execute(). Mengapa? Karena jika perintah ini berada di urutan terakhir, maka data pada field Deskripsi2 akan hilang karena harus di-unset saat memasukkan data ke table1.
Untuk memasukkan data ke Table table1, maka kita hanya perlu mengeset property UpdateTable milik object Table/Page dengan nilai table1. Pastikan juga kita harus mengeluarkan nilai pada field Deskripsi2, karena field ini tidak terdapat di dalam table1. Caranya cukup dengan meng-unset field Deskripsi2.
Setelah semua file script di-generate ulang dari PHPMaker, maka untuk membuktikannya, cobalah untuk menambahkan Record yang kelima. Nilai di ketiga Field tersebut masing-masing adalah 005, Lima, dan Five. Setelah proses penambahan Record selesai, periksalah data di kedua Table tadi, seharusnya sudah terisi dengan data sebagaimana yang diharapkan.
Sebagai informasi tambahan, teknik di artikel ini sebenarnya mirip dengan artikel yang dulu sudah pernah saya tulis berjudul Mudahnya Mengelola Data yang Melibatkan Lebih Satu Table Melalui PHPMaker. Silahkan Anda bandingkan sendiri perbedaan di antara keduanya.
Betapa mudah, cepat, dan menyenangkan sekali, bukan? 😀
Bagus pak artikelnya, kebetulan sy blm menggunakan phpmaker krn saat ini msh menggunakan aplikasi sejenis yg lain kalau blh bertanya apakah ‘event’ di phpmaker dpt memproses query array yg cukup banyak misalkan mengambil data 1 set data master/detail invoice sekaligus dan menginsert/mengupdate sebagiannya ke tabel stok ( perintah di trigger dr master invoice). Terima kasih atas pencerahannya
Bisa. Silahkan baca dan pelajari topik Server Events and Client Scripts dari menu Help PHPMaker. Kalau sudah dipelajari, seharusnya Anda akan menemukan yang cocok dengan kebutuhan, khususnya Row_Inserting dan Row_Updating.
Tergantung pengertian sebagian yang Anda maksud itu data yang mana? Intinya, Anda bisa mengoptimalkan server event di table master atau table detail yang terkait. Selamat mencoba.
Terima kasih, saya akan baca di help phpmaker sesuai arahan, kebetulan memang saya banyak dapat referensi berguna dari forum pengguna phpmaker walaupun saya belum menggunakannya dengan alasan tampilan akhir yang perlu waktu untuk touch up sebelum deploy (tidak bisa langsung pakai seperti maestro sql). terima kasih atas responnya
Sama-sama.
bagaimana jika menyimpan dalam 2 tabel yang berbeda dengan fields yang berbeda pula?
apakah bisa diaplikasikan dengan kondisi itu?
termia kasih
Gunakan server event Row_Inserted untuk mengeksekusi SQL INSERT INTO ke table lain.
Pak Masino saya sudah menjalankan bebera contoh yg diatas hanya bagian terakhir saya belum mengerti
Untuk memasukkan data ke Table table1, maka kita hanya perlu mengeset property UpdateTable milik object Table/Page dengan nilai table1. Pastikan juga kita harus mengeluarkan nilai pada field Deskripsi2, karena field ini tidak terdapat di dalam table1. Caranya cukup dengan meng-unset field Deskripsi2.
Belum mengerti? Kan sudah ada contoh kode-nya di server event Row_Inserting itu? Ya itu penjelasan dari kode tersebut.
maaf, mungkin maksud pak sidik adalah bagaimana langkah2 melakukan perintah yang ada pada contoh diatas karena beliau masih belum/tidak tahu cara penggunaan software phpmaker ini, mari kita lebih bijaksana membantu sesama.
Langkah-langkahnya? Silahkan baca ulang lagi artikel di atas dengan teliti. Tidak ada yang sulit di artikel ini jika Anda membacanya dengan teliti karena struktur table pun sudah disertakan.
pak saya mau tanya, bagaimana mencegah agar tidak benturan dengan klien lain saat di input, mengingat insert ini menggunakan ceklis box, dimana setiap 1 ceck box mempunyai id kunci, jika kita cek 100 maka otomatis terinsert data dengan id 100 dan jika hanya 2 maka idnya 2, nah bagaimana jika klien lain juga menginsert sehingga id 1-100 tidak benturan dengan idkunci dari proses insert klien lain, apakah yang kita pakai dalam fungsi inser tersebut, jika klien mencoba insert dari lokasi lain secara bersamaan, sehingga klien yang satu mendapat id 1-100 dan yang satu lagi 101.
Jika Anda menggunakan ID yang AutoIncrement seperti di MySQL, maka tidak perlu ditangani dari sisi Aplikasi. Sistem Database yang akan otomatis menanganinya, sehingga tidak akan mungkin bentrok dengan user lain.
Pak kalo mau inputin data nah salah satu fieldnya itu ngambil dari primary key table lain, terus dalam inputannya itu udah ada pilihan primary key yang ada di table lain nah ketika kita milih pknya terus diinputin, data berdasarkan pk yang kita pilih tuh berkurang ters masuk ke tabel inputan tadi, caranya gimana ya pak?
Caranya? Tinggal tulis saja kode untuk memeriksa/mengambil/mengolah nilai tadi pada server event Row_Inserted.
Baca topik Server Events and Client Scripts dari menu Help PHPMaker untuk info lebih lanjut.
Pak Marsino,
Saya buat 2 table.
tb_kode
id, kode, nama, tanggal, pic
tb_kodes
id, kode, nama, tanggal, pic
di tb_kode saya masukan perintah
di common – Row_Inserterd
ew_Execute(“INSERT INTO tb_kodes(kode, nama, tanggal, pic) values (‘” . $rsnew[“kode”] . “‘, ‘” . $rsnew[“nama”] . “‘, ‘” . $rsnew[“tanggal”] . “‘, ‘” . $rsnew[“pic”] . “‘)”);
}
jika tanpa gambar sukses apa yang saya masukan di tb_kode akan
ada di tb_kodes hanya jika menggunakan gambar eror..
Failed to execute SQL. Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–’ at line 1
pencerahannya lagi pak hehe
Image-nya jangan diupload ke Database. Gunakan Upload to Folder.
mas saya punya case,
saya punya table master yaitu master barang yang isi field nya code,name,satuan dan jumlah
dan tablen untuk menambahkan jumlah stok di transaksi saya yang isi fieldnya stok_barang code,total
pada saat saya mau memasukan stok dan bisa langsung update jumlah di table stok_barang itu gmana caranya yah untuk bikin function save?
saya menggunakan php ci, saya masih baru menggunakan ini.
yang saya input berdasarkan code
function add($save)
{
$this->db->insert(‘stok_barang’,$save);
//pada saat save gimana caranya bisa langsung ke update jumlahnya ke table barang
}
Maaf, belum bisa bantu, karena tidak terkait dengan PHPMaker.
pak bagaimana caranya mengkoneksikan form login ke database yang saya buat
Baca topik Quick Start dari menu Help PHPMaker.