Dokumen ini membahas tentang transaksi database untuk menjaga konsistensi data. Transaksi diperlukan ketika terdapat lebih dari satu query sekaligus agar semua query berhasil atau gagal bersamaan. Dokumen ini juga menjelaskan penggunaan form, grid, dan combo box menggunakan komponen DHTMLX untuk melakukan transaksi insert dan update data ke database.
2. TRANSACTION
PERHATIAN: TULISAN INI MEMBUTUHKAN DASAR-DASAR DHTMLX, SILAHKAN IKUTI MULAI
DARI TULISAN PERTAMA SERI BELAJAR PEMROGRAMAN WEB MENGGUNAKAN DHTMLX, PHP
DAN MYSQL
Transaction sangat diperlukan apabila kita melakukan lebih dari satu query pada saat
bersamaan. Misalkan saja 2 query bersamaan, dengan transaction dapat dipastikan semua
query berhasil atau semuanya gagal. Tidak boleh satu berhasil satu gagal.
Misalkan pada sebuah toko terjadi pembelian suatu barang, otomatis query yang pertama
adalah pembelian barang tersebut beserta jumlah dan tanggal pembeliannya (INSERT). Query
yang kedua adalah penambahan jumlah stok barang tersebut yang ada di gudang (UPDATE).
Apabila tanpa Transaction ada kemungkinan query pertama berhasil dan query kedua gagal
yang menyebabkan data hilang sebagian
Pada MySQL database Engine yang mendukung Transaction yaitu INNODB, sedangkan MyISAM
tidak mendukung Transaction. Lalu yang tidak kalah pentingnya yaitu variable “sql_mode” pada
MySQL. Default sql_mode pada MySQL mengizinkan :
nilai null pada data not null
format tanggal yang tidak jelas seperti 0000-00-00
Karakter yang panjang dapat masuk tanpa error dengan pemotongan jumlah karakter
misalkan “BURHANUDIN” dapat masuk ke field VARCHAR(5) menjadi “BURHA”
Untuk menghindari hal-hal di atas kita harus mengubah sql_mode menjadi TRADITIONAL. Bisa
dilakukan dengan konfigurasi mysql.ini, Tapi disini kita akan mengubahnya pada script php. Jadi
setiap ada operasi terhadap database MySQL otomatis sql_mode diset menjadi TRADITIONAL
DHTMLX PHP Connector (render_table,render_sql) tidak bisa digunakan disini. Oleh karena itu
kita akan menulis script php sendiri tanpa Connector.
3. DATABASE
- Tabel input
*On DELETE RESTRICT = Apabila di tabel input ada record yang menggunakan produk_id dari
tabel stok maka produk tersebut tidak bisa di delete dari tabel stok
*On UPDATE RESTRICT = Karena produk_id AUTOINCREMENT dan tidak bisa diupdate maka ini
bisa diabaikan
- Tabel Stok
*Unsigned tidak boleh ada nilai dibawah 0
Ini merupakan TULISAN UTAMA YANG KEDUA (Proteksi Kesempurnaan Data pada MySQL
tidak pada sisi PHP), pesan error yang ditampilkan adalah dari MySQL bukan PHP
Pada tulisan ini akan digunakan komponen-komponen DHTMLX:
1. dhtmlXLayout (untuk menempatkan komponen).
2. dhtmlXGrid (tampilkan data berupa tabel)
3. dhtmlxCombo (komponen untuk memilih (select), dengan terlebih dahulu memuat data
dari database)
4. dhtmlXForm
Langsung pada kode/script di bawah ini
4. xconn.php (PERHATIKAN SET SESION sql_mode=”TRADITIONAL”)
index.html (dasar sebelum script ditulis, nanti akan ditulis pada bagian //---SCRIPT--)
5. Layout (tempatkan pada myDiv, pola 3L –kiri satu kanan dua)
Form dan Form DataProcessor
- Form ditempatkan pada Layout.cells(“a”)
- Form DataProcessor akan dieksekusi setelah tombol Tambah ditekan
- Form DataProcessor AfterUpdate event untuk memberi respon setelah proses pada
database (sukses atau gagal), variable msg pada script merupakan respon dari server
Berikut ini adalah script untuk Form dan Form DataProcessor
6. Setelah tombol “Tambah” ditekan
(ids = id unik autogenerate, dhx_security dari grid.php line ConnectorSecurity::$security_key = true;)
Dan respon dari server (apabila berhasil)
8. Pada script ada menggunakan
dhx_security, merupakan token unik yang dihasilkan (generate) oleh perintah
ConnectorSecurity::$security_key = true; pada input_grid.php ataupun stok.php.
maksudnya untuk mencegah serangan CSRF and XSRF. Kalau DHTMLX PHP Connector cukup
menggunakan ConnectorSecurity::$security_key = true pada form.php maupun grid.php
ConnectorSecurity::filter, ini karena kita tidak menggunakan DHTMLX PHP Connector.
Tujuan dari ConnectorSecurity::filter adalah untuk filter input apabila ada tag html ataupun
XSS
GRID (read only tbl input & tbl stok)
Tbl input pada kanan atas dan Tbl stok kanan bawah
10. Combo (produk combo pada Form)
produk_combo.php
Kode lengkap secara berurutan silahkan download source code.
• Demo bisa dicoba di http://www.dhxapps.web.id/tutorial/8/index.html
• Source code dapat diperoleh di http://www.dhxapps.web.id/tutorial/8/trans.zip
PENULIS
Manuppak L. Tobing
Masih Newbie dalam DHTMLX Programming
http://tobingvps.com – Sadly VPS owner sold his company and price up
more 3x, moving tobingvps.com to shared hosting www.dhxapps.web.id
Email: lumban.tobing.m@gmail.com