2 August 2016

Cara Menggunakan Prosedur Transaction MySQL di PHP


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 :

Table : nasabah

table nasabah pemilik rekening dan jumlah saldo

Table : transfer_saldo
table ini bertujuan untuk mencatat semua bukti transfer yang dilakukan

Silah kan tambah data pada table nasabah, 2 record seperti berikut :

di mana nanti pemilik rekening A akan mentransfernya k rekening B
yang perlu dilakukan adalah membuat form login terlebih dahulu, temen-temen bebas jika ingin menambahkan password jika teman ingin lakukan. Saya hanya sekedar contohnya saja.

tampilan halaman login nasabah 

halaman nasabah setelah login


Source code lengkapnya beirkut ini :

login_nasabah.php

<!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>&nbsp;</label>
 &nbsp; <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>

halaman_nasabah.php

<?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>&nbsp;</label>
 &nbsp; <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>

Jika kita coba melakukan transfer dana maka akan terlihat tampilan sebagai berikut :
input nomor rekening dan jumlah transfer

pesan yang akan disampaikan jika berhasil, jika tidak berhasil makan seluruh query kita akan di batalkan

Kebetulan prosesnya dalam satu page, maka kita perlu reload page...

Semoga bisa bermanfaat, dan dapat menambah wawasan kita semua.. Teriamakasih dan salam buat semua para programmer. Sampai jumpa di tutorial berikutnya.

Download Source Code lengkapnya :
  1. login_nasabah.php : Download
  2. halaman_nasbah.php : Download
  3. logout_nasbah.php : Download
  4. database : Download









Loading...

I am a fan of technology and i love coffee. I’m also interested in web programming and framework. below there are some accounts you can follow to contact me.

Comments

Thanks for comments.
EmoticonEmoticon