Error Handling di PL/SQL dan Penerapannya pada Codeigniter

Setelah pada artikel lalu membahas tentang Store Procedure dan Store Function di MySQL, kini saya coba bahas sederhana penggunaan serta Error handlernya pada aplikasi sederhana. Biar ilmu bermanfaat dan gak cepet lupa ada yang bilang mesti diikat dengan catatan, diamalkan dan dishare. Aplikasi sederhananya hanya proses penambahan nasabah. Diharapkan teman-teman membaca artikel saya yang lalu karena ada sangkut-pautnya.

Penerapannya sangat sederhana agar tidak terlalu rumit dan nantinya teman-teman juga cepat memahami. Jadi misalnya ada penambahan nasabah pada bank, yang diinputkan no rekening, nama dan jumlah uang saldo awal. Kalau kita buat dengan query biasa tanpa PL/SQL mungkin mudah ya tapi agak panjang karena ingat no rekening bersifat unik dan menjadi primary key, jadi pada saat user memasukan no rekening, si alur program mesti mengecek terlebih dahulu apakah no rekening yang baru user ketikan itu sudah ada di database atau belum. Kebayang ya codingnya gemana…

Kalau teman-teman juga biasa menggunakan Codeigniter pasti pernah mengalami kesalahan manipulasi (CRUD) data ke database yang akibatnya secara tiba-tiba langsung muncul pesan error. Pesan error tersebut buat programmer sangat informatif, tapi bagaimana kalau user biasa yang tidak paham codingan menghadapi error itu,,jadi kurang userfriendly ya.

Ya mungkin memang kita sebagai pengguna Codeigniter mesti sabar menunggu versi baru Codeigniter yang sudah support PHP5 agar kondisi ini bisa ditangani dengan Try and Catch. Atau mungkin ada solusi lain selain Try and Catch di Codeigniter ?? saya belum tahu yang fix nyaman..tapi kalau ada saya sangat berterimakasih…

Uuh,,ngelantur malah curhat,,oce langsung ke codingan.

Awalnya kita buat dahulu Store function di table kita.

Saya tidak membahas mengenai store function karena sudah saya jelaskan sederhana pada artikel sebelumnya. Yang ingin saya jelaskan sedikit untuk diingat adalah pendefinisian Error Handling, lihat code line 9, seperti itulah cara mendefinisikan sebuah error handling

DECLARE handler_type HANDLER FOR condition_value statement

Handler_type ada 3, Continue, Exit, Undo ketiganya sudah saya jelaskan pada artikel ini. Yang penting adalah statement hasil tersebut dimana set hasil tersebut berfungsi untuk mengecek apakah terjadi error atau tidak, jika terjadi error maka variable hasil akan bernilai 1 namun bila tidak terjadi error maka value dari variable hasil tetap 0 yang berarti bahwa query berjalan dengan baik.

Oke jalankan Store Function Tambah_nasabah tersebut agar nanti kita bisa gunakan di aplikasi Codeigniter. Oiya jangan lupa sebelum menjalankan store function diatas, pastikan teman-teman sudah berada di database adi_lat dimana di dalam database tersebut terdapat table rekening. Lihat artikel sebelumnya.

Baik sekarang kita mulai coding di Codeigniter. Layout Codeigniter buatan saya seperti pada gambar dibawah.

Folder application yg defaultnya di folder System saya keluarkan, lalu saya tambahkan folder JS untuk file jquery disana. File jquery ini kita gunakan proses insert data dengan ajax di codeigniter.

Lalu pada folder Application-Config file config.php, saya setting terlebih dahulu seperti ini :

Pada Application-Config file autoload.php, saya setting hanya seperti ini :

Disini saya hanya nge-load library database, helper URL dan Form_helper. Bagi teman yg kurang mengerti silahkan baca manualnya di alamat ini.

Lalu pada file database.php saya setting sesuai dengan database yang saya gunakan.

Sesuaikan dengan settingan database di computer teman, kalau database, nanti sekalian sama donlotan CI-nya saya lampirkan.

Sepertinya settingan sudah cukup seperti itu, sekarang kita buat Controllernya. Buat Controller nasabah.php tepatnya di folder Application-Controllers

<?php
/*
	class controller nasabah
	dibuat oleh adiputra - ad1.putr4@yahoo.co.id - https://terusbelajar.wordpress.com
*/
class Nasabah extends Controller{
	
	function Nasabah(){
		
		parent::Controller();
		$this->load->model('m_nasabah');
		
	}
	
	function view_tambah(){
		
		$this->load->view('nasabah/v_tambah');
		
	}
	
	function proses_tambah(){
		
		$data = array(
			'nomor' => $_POST['nomor'],
			'nama'  => $_POST['nama'],
			'saldo' => $_POST['saldo']
		);
		
		$hasil = $this->m_nasabah->insert_data($data);
		
		$value_hasil = array_values($hasil);
		
		if($value_hasil[0]){
			echo "Proses Tranksasi Gagal...!";
		}else{
			echo "Proses Transaksi Berhasil...!";
		}
		
	}

Hanya ada 3 function,

  • Function Nasabah sebagai function Constructor, jadi saat kita panggil atau instansiasi class ini maka secara otomatis nge-load model yang akan kita buat yaitu ‘m_nasabah’. Pembuatan model m_nasabah akan kita buat nanti.
  • Function View_tambah berguna hanya ngeload view dari form tambah nasabah yaitu file v_tambah di folder view-nasabah.
  • Function proses_tambah berguna saat user menekan tombol simpan, lalu yang user inputkan tersebut kita simpan pada variable-variable dan setelah itu kita kirim variable-variable dari inputan user ke model untuk dilakukan insert ke database. Penjelasan lebih detailnya nanti setelah semua file baik model maupun view kita buat.

Lalu sekarang kita buat modelnya di folder application-models. Buat dengan nama m_nasabah.php codingnya hanya seperti ini :

<?php
/*
	class model m_nasabah
	dibuat oleh adiputra - ad1.putr4@yahoo.co.id - https://terusbelajar.wordpress.com
*/
class M_nasabah extends Model{
	
	function insert_data($data){
		
		// fetch isi dari variable data
		for($i=0; $i<count($data); $i++){
			$nomor = $data['nomor'];
			$nama = $data['nama'];
			$saldo = $data['saldo'];
		}
		
		// panggil store fungsi tambah_nasabah
		$sql = "select tambah_nasabah('$nomor','$nama','$saldo')";
		
		// jalankan query
		$hasil = $this->db->query($sql);
		
		// return dengan query result tipe row_array();
		return $hasil->row_array();
	}
	
}

Hanya ada satu function insert_data yang fungsinya melakukan query penyimpanan data yang dikirim dari controller, dan fungsi ini mengeluarkan value hasil query ke database. Lalu dalam query tersebut kita tidak menuliskan SQL insert data biasa, tapi kita panggil saja function tambah_nasabah yang sebelumnya telah kita buat.

Lalu perhatikan juga nilai return yang kita keluarkan, saya menggunakan row_array(). Kenapa ? karena kalau kita menggunakan result() untuk mengeluarkan hasil query ke database hasilnya seperti gambar ini.

Lalu kalau kita menggunakan row_result();

Lihat perbedaannya kan ? kenapa pilih yang row_result() ? Hanya memudahkan saja, ya karena yang saya butuhkan atau tujuan kita buat function adalah ingin mengetahui status apakah ada error atau query berjalan dengan baik. Status bisa dilihat pada gambar, terdapat nilai 1 atau 0.

Lalu bagaimana mengambil value status tersebut ? Coba lihat kembali nasabah.php di folder controller. Terdapat fungsi untuk mengambil semua value dari array yaitu function array_values(), kalau mau ambil indexnya array, kita bisa gunakan function array_keys();

$hasil = $this->m_nasabah->insert_data($data);
				
$value_hasil = array_values($hasil);
		
if($value_hasil[0]){
	echo "Proses Tranksasi Gagal...!";
}else{
	echo "Proses Transaksi Berhasil...!";
}

Setelah kita dapatkan, lalu kita lakukan pengecekan return status. Jika kondisi true (nilai return status 1) maka tampilkan pesan bahwa proses transaksi gagal dan sebaliknya jika kondisi false (nilai return status 0) maka tampilkan pesan bahwa proses transaksi berhasil.

Oke,,sekarang kita buat view-nya, berikut code view-nasabah file v_tambah :

<html>
<head>
<style type='text/css'>
	label {
		display: block;
	}
	
	#container {
		width: 300px;
		border: 1px solid red;
		margin-top: 120px;
		margin-left: 340px;
	}
	
	#pesan {
		border: 1px solid green;
		margin: 5px;
		padding-left: 5px;
		padding-top: 2px;
		padding-bottom: 2px;
	}
	
	#form_tambah {
		border: 1px solid blue;
		margin: 5px;
		padding: 3px;
		padding-left: 80px;
	}
	
	
</style>
<script type='text/javascript' src='<?php echo base_url() . 'js/jquery-1.3.2.min.js'; ?>'></script>
<script type='text/javascript'>
	
	$(function(){
		$("#simpan").click(function(){
			
			// hilangkan kotak pesan
			$(".isi_pesan").fadeOut(100);
			
			// ambil data dari form lalu simpan pada variable data_post
			var data_post = {
				nomor: $("#nomor").val(),
				nama: $("#nama").val(),
				saldo: $("#saldo").val()
			};
			
			// ajax mulai disini
			$.ajax({
				url: "<?php echo site_url() . '/nasabah/proses_tambah'; ?>", //arahkan pada proses_tambah di controller nasabah
				data: data_post,
				type: "POST",
				success: function(msg){
					$(".isi_pesan").html(msg);
					$(".isi_pesan").fadeIn(1000);
				}
			});
			
			
			
			return false;
			
		});
	});
	
</script>
</head>
<body>
	<div id='container'>
		
		<div id='pesan'>
			<div class='isi_pesan'>Silahkan Isi Data Nasabah Baru.</div>
		</div>
		
		<div id='form_tambah'>
			<?php echo form_open('nasabah/proses_tambah'); ?>
			<label for='nomor'>No Rekening</label>
				<input type='text' name='nomor' id='nomor' />
			
			<label for='nama'>Nama</label>
				<input type='text' name='nama' id='nama' />
				
			<label for='saldo'>Saldo Awal</label>
				<input type='text' name='saldo' id='saldo'>
			
			<br />
			<br />
			<input type='submit' name='simpan' value='Simpan' id='simpan' />
			
			<?php echo form_close(); ?>
		</div>
	</div>
</body>
</html>

Di view tersebut, saya satukan antara css dan jquerynya, lalu saya tulis juga sintax ajax jquery-nya pada codeigniter di v_tambah.php ini. Saya tidak menjelaskan mengenai ajax-jquery di codeigniter, karena saya yakin teman-teman sudah paham. Dan selesai sepertinya ya…:)

Oiya,,saya juga blum menyisipkan validasi baik disisi client dengan javascriptnya (jquery) atau disisi server dengan bawaan form_validation() milik codeigniter, silahkan teman menambahkannya sendiri.

Silahkan dijalankan dan sebaiknya teman menggunakan firebug (plugin bawaan firefox) untuk mengecek apakah ajax yg kita pasang berjalan dengan baik atau tidak.

Kesimpulannya, penanganan error (error handler) pada PL/SQL di MySQL dengan penerapannya ke aplikasi sederhana ini sengaja digunakan untuk meneruskan (CONTINUE) aplikasi kita apabila terdapat error ( untuk query ke database ), sebenarnya penanganan ini dilakukan di prosedur Try and Catch namun karena basic dari Codeigniter adalah PHP4 sedangkan Try And Catch hanya support pada PHP5 jadi Try And Catch-nya tidak berfungsi.

Saya mohon kritikan dan saran mengenai tutorial ini. Terimakasih dan moga bermanfaat..

[ Download code ]

Iklan

13 thoughts on “Error Handling di PL/SQL dan Penerapannya pada Codeigniter

  1. Mantabs Mas tutorialnya…
    tp saya ada pertanyaan sedikit mas…
    begini….
    saya mau sebelum di simpan ke db di validasi dulu, kalo tidak isi nama nasabah muncul pesan error mas…
    tp saya maunya berupa alert gitu mas yg di kirim dari php ke jquery

    Terimakasih…

  2. @Rius :
    owh,,mudah mas,,tinggal di tambahin

     $(function(){
            $("#simpan").click(function(){
                // hilangkan kotak pesan
                $(".isi_pesan").fadeOut(100);
                
               // PENAMBAHAN UNTUK VALIDASI YG KOSONG
              var err = false;
               $("form").find(":text").each(function(){
                     if($(this).val().length == 0) {// JIKA ISI PANJANG DARI FORM TYPE TEXT KOSONG
                         alert("Field tidak boleh kosong");
                         $(this).focus();
                         err = true;
                     }
               });
    
              if(err){
                    return false;
              }
              // AKHIR PENAMBAHAN         
     
                // ambil data dari form lalu simpan pada variable data_post
                var data_post = {
                    nomor: $("#nomor").val(),
                    nama: $("#nama").val(),
                    saldo: $("#saldo").val()
                };
                // ajax mulai disini
                $.ajax({
                    url: "<?php echo site_url() . '/nasabah/proses_tambah'; ?>", //arahkan pada proses_tambah di controller nasabah
                    data: data_post,
                    type: "POST",
                    success: function(msg){
                        $(".isi_pesan").html(msg);
                        $(".isi_pesan").fadeIn(1000);
                    }
                });
                return false;
            });
        });
    

    cek coba ya mas,,belum saya coba,,tapi semesti nya jalan..
    moga bisa bermanfaat..:)

  3. dan di controller adalah sebagai berikut:

     function save(){
       $nkp    =$this->input->post('nkp');
       $nama   =$this->input->post('nama');
      $data   =array(
          'nkp' => $nkp,
          'nama' =>$nama           
              );            
      
      if(!$nkp){ $error="NKP Masih Kosong";}
      elseif(!$nama){ $error="Nama Masih Kosong";}
      
      if($error){
        $open['salah']    =true;
        $open['pesan']   =$error;
      } else {   
        $open['salah']    =false;
        $this->db->insert('anak_sm',$data);
      }
      echo json_encode($open);
    }
    

    masalahnya adalah:
    alert erornya muncul,
    tp begitu semua field terisi, alert suksesnya tidak muncul mas

    Mohon bimbingan dan pencerahannya..

    Terimakasih

  4. @Rius :
    sebelumnya mw koreksi mas mengenai source code mas Rius. Mas sepertinya mesti memisahkan antara logic, manipulasi data (database), dan presentasi / view. ini yg dikenal dengan MVC di Codeigniter.
    lebih lengkap nya search di google ya, sy cuma saran baca kembali manual CI nya.
    kenapa saya mengoreksi ?? karna ada bagian manipulasi data (model) di controller mas..liat $this->db->insert();
    walau bisa2 saja sih di CI mas menuliskan method insert db di controller, namun tidak pas saja karna akan membingungkan nanti apabila sudah develop applikasi besar.

    lalu permasalahan mas mengapa saat proses berhasil tidak menampilkan pesan ??
    karna mas tidak mengirimkan variable pesan ke view.

    function save(){
    	$nkp    =$this->input->post('nkp');
    	$nama   =$this->input->post('nama');
    	$data   =array(
    		'nkp' => $nkp,
    		'nama' =>$nama
    	);           
    	if(!$nkp){ $error="NKP Masih Kosong";}
    	elseif(!$nama){ $error="Nama Masih Kosong";}
     
    	if($error){
    		$open['salah']    =true;
    		$open['pesan']   =$error;
    	} else {
    		$open['salah']    =false;
    		// sy edit disini
    		// $this->db->insert('anak_sm',$data);
    		// buat terlebih dahulu model di folder model table tujuan
    		$this->load->model('model_buat_manipulasi_tbl_tujuan');
    		// panggil method untuk save di model yg telah dibuat
    		$this->model_buat_manipulasi_tbl_tujuan->ini_fungsi_save($data);
    		
    		// jika berhasil insert
    		// kirim ke view lewat variable controller $open
    		$open['pesan'] = "data yang anda input telah tersimpan.";
    	}
    	
    	echo json_encode($open);
    }
    

    sampai sini moga dimengerti..:)

  5. Terimakasih mas atas responya.
    saya sudah coba mas tp sedikit saya modif di jsnya dan hasilnya ada yg belom jalan mas
    berikut code jsnya:

    $("#simpan").click(function(){
        $.ajax({
           type:'post',
           url: $("#frm_sm").attr('action'),
           data:$("#frm_sm").serialize(),
           dataType: 'json',
           success: function(Res){
             if(Res.salah==true){
               alert(Res.pesan);
               return false;            
             } else {
              alert("Sukses Tambah Data");
             }      
           }
           });
         });
    

    dan di controller adalah sebagai berikut:

     function save(){
       $nkp    =$this->input->post('nkp');
       $nama   =$this->input->post('nama');
      $data   =array(
          'nkp' => $nkp,
          'nama' =>$nama           
              );            
      
      if(!$nkp){ $error="NKP Masih Kosong";}
      elseif(!$nama){ $error="Nama Masih Kosong";}
      
      if($error){
        $open['salah']    =true;
        $open['pesan']   =$error;
      } else {   
        $open['salah']    =false;
        $this->db->insert('anak_sm',$data);
      }
      echo json_encode($open);
    }      
    

    masalahnya adalah:
    alert erornya muncul,
    tp begitu semua field terisi, alert suksesnya tidak muncul mas

    Mohon bimbingan dan pencerahannya..

    Terimakasih

Silahkan Komentar...

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s