Sering kita denger transaction, banyak terjadi transaction yang sering membingungkan. Ternyata metode transaction ini sangatlah mudah. Kejadi transaction ini biasanya jika terjadi banyak relasi antar table pada database kita, sehingga membuthkan banyak logika untuk menjalankan beberapa query sekaligus agar berjalan sesuai prosedur yang harus sesuai dengan aturan bisnis perusahaan.
Pada dasarnya fungsi transaction sudah ada pada DBMS (Data Base Managemen System) itu sendiri, dimana prosedur ini membuat orang dengan mudah menjalankan beberapa query yang nantinya jika terjadi error pada salah satu query dapat kita batalkan untuk query yang lainnya yang telah berhasil karena dapat mempengaruhi data yang akan di proses. Untuk lebih jelasnya mengenai transaction bisa baca di sini.
Bagaimana penerapan prosedur transaction pada pemorgraman PHP ?
Langsung saja kita praktikan, kali ini saya akan ceritakan sedikit bagaimana penerapan prosedur transaction ini, contoh transaksi pemindahan uang, saat kita melakukan transfer uang, jika kita melakukan transfer uang kita perlu melakukan pengurangan pada saldo kita dan akan ditambahkan pada saldo yang akan kita transfer. Bagaimana jika saat transfer terjadi trouble atau gangguaan, salah satu masalah yang bisa terjadi jumlah saldo kita berkurang dan saldo yang kita transfer tidak akan bertambah ke pemiliknya, maka perlunya ada pembatalan proses, hal yang seperti ini lah perlu adanya prosedur transaction akan di jalankan.
Makin pusing kalo saya bercerita, dari pada nalar saya semakin bertambah dan semakin panjangnya ketikan saya, lebih baik kita langsung contoh kan dalam bentuk source codenya..hehhe, mohon maaf dulu sebelumnya, apapun yang saya sampaikan semua ilmu ini berasalnya dari maha pencipta (Allah) dialah pemilik segala ilmu dan maha mengetahui, saya lah yang paling bodoh yang memiliki banyak kekurangan.
Untuk contoh lainnya seperti, transaksi penjualan, transaki peminjaman, kredit, dan lain sebagainya.
pertama perlu kita buat dulu sebuah database dengan struktur table sebagai berikut :
<!DOCTYPE html> <html> <head> <title>Login Nasabah</title> </head> <style type="text/css"> label { width: 120px; float: left; } </style> <body> <h2>Login Nasabah</h2><hr> <form action="" method="POST"> <p> <label>Nomor Rekening</label> : <input type="text" name="no_rek" placeholder="ketik nomor rekening ..."> </p> <p> <label> </label> <input type="submit" name="submit" value="Login"> </p> </form> <?php session_start(); mysql_connect("localhost", "root", ""); mysql_select_db("db_tes"); if (isset($_POST['submit'])) { $sql = "SELECT * FROM nasabah WHERE no_rek = '$_POST[no_rek]'"; $result = mysql_query($sql); $temukan = mysql_num_rows($result); if ($temukan > 0) { $_SESSION['norek'] = $_POST['no_rek']; header("location:halaman_nasabah.php"); } else { echo"Nomor rekening tidak ditemukan..."; } } ?> </body> </html>
<?php session_start(); if (!isset($_SESSION['norek'])) { header("location:login_nasabah.php"); } ?> <!DOCTYPE html> <html> <head> <title>Halaman Nasabah</title> </head> <style type="text/css"> label { width: 180px; float: left; } </style> <body> <h2>Halaman Nasabah</h2><hr> <?php mysql_connect("localhost", "root", ""); mysql_select_db("db_tes"); $sql = "SELECT * FROM nasabah WHERE no_rek = '$_SESSION[norek]'"; $result = mysql_query($sql); $n = mysql_fetch_assoc($result); $saldo_awal = $n['saldo']; echo"<p><b>$n[nama]</b> | [<a href='logout_nasabah.php'>Logout!</a>]<br> Saldo : Rp. ".number_format($n['saldo'])."</p><hr>"; echo"History Transfer<hr><i>"; $resHistory = mysql_query("SELECT * FROM transfer_saldo WHERE no_rek_pengirim = '$_SESSION[norek]'"); while ($h = mysql_fetch_assoc($resHistory)) { echo"$h[tgl_time] - Berhasil Transafer dana ke nomor rekening : $h[no_rek_penerima] senilai : Rp. ".number_format($h['jumlah_transfer']).",- <br>"; } echo"</i>"; ?> <br><br> <b>Lakukan Transfer Dana</b><hr> <form action="" method="POST"> <p> <label>Nomor Rekening Tujuan</label> : <input type="text" name="no_rek" placeholder="nomor rekening tujuan ..."> </p> <p> <label>Jumlah Transfer (Rp.)</label> : <input type="text" name="jml_transfer" placeholder="0"> </p> <p> <label> </label> <input type="submit" name="submit" value="Transfer"> </p> </form> <?php if (isset($_POST['submit'])) { if (is_numeric($_POST['jml_transfer']) AND ($saldo_awal > $_POST['jml_transfer'])) { //cek apakah nomor rekening sudah benar dan bukan nomor rekening pribadi, biar gak ngirim k rekening pribadi..hehhee, emangnya bisa transfer ke rekening pribadi..hahaaaa $cek_tujuan = mysql_query("SELECT * FROM nasabah WHERE no_rek = '$_POST[no_rek]' AND no_rek NOT LIKE '$_SESSION[norek]'"); if(mysql_num_rows($cek_tujuan) > 0) { //jika semua validasi sudah benar maka kita buat prosedur transaction dimulai dari sini //tapi sesua kebutuhan agan-agan mysql_query("START TRANSACTION"); //query pengurangan saldo $resPengurangan = mysql_query("UPDATE nasabah SET saldo = saldo - $_POST[jml_transfer] WHERE no_rek = '$_SESSION[norek]'"); //query penambah saldo $resPenambahan = mysql_query("UPDATE nasabah SET saldo = saldo + $_POST[jml_transfer] WHERE no_rek = '$_POST[no_rek]'"); //query tambah data transfer $resTransfer = mysql_query("INSERT INTO transfer_saldo(no_rek_pengirim, no_rek_penerima, jumlah_transfer, tgl_time) VALUES('$_SESSION[norek]', '$_POST[no_rek]', $_POST[jml_transfer], NOW())"); if (!$resPengurangan OR !$resPenambahan OR !$resTransfer) { echo"Gagal melakukan transfer senilai : Rp. ".number_format($_POST['jml_transfer']).",- ke nomor rekening : ".$_POST['no_rek']; mysql_query("ROLLBACK"); } else { echo"Berhasil melakukan transfer senilai : Rp. ".number_format($_POST['jml_transfer']).",- ke nomor rekening : ".$_POST['no_rek']. " | [<a href='halaman_nasabah.php'>Reload Page</a>]"; mysql_query("COMMIT"); } } else { echo"Nomor rekening tujuan tidak tepat!"; } } else { echo"Saldo tidak cukup"; } } ?> </body> </html>
- login_nasabah.php : Download
- halaman_nasbah.php : Download
- logout_nasbah.php : Download
- database : Download