Kategori Random

Membuat Kode Transaksi Unik pada CodeIgniter MySQL

Posted : 02 Mei 2015 | 08:46:15 , Dibaca 14448 kali

Salam, kali saya akan berbagi membuat kode id unik di codeigniter.

Pada sebuah field tabel mysql yg kita buat menjadi primary key, kita harus membuat data nya unik dan tidak boleh sama, jika membuat nilai fieldnya auto increment (AI) mungkin masalah itu teratasi namun jika bukan AI akan berbeda pastinya masalah yg timbul. Bagaimana cara membuatnya mari kita bahas.

Pertama rancang database buat tabel seperti dibawah ini, contoh kasus kita akan buat pada kode pegawai:

CREATE TABLE `t_pegawai` (
  `kd_pegawai` varchar(14) NOT NULL,
  `nm_pegawai` varchar(150) NOT NULL,
  `alamat` tinytext NOT NULL,
  `kota` varchar(100) NOT NULL,
  `provinsi` varchar(100) NOT NULL,
  `no_telp` varchar(50) NOT NULL,
  `dt_created` int(11) DEFAULT NULL,
  PRIMARY KEY (`kd_pegawai`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

Kemudian mari kita mulai untuk rancangan mada controllernya simpan dengan nama home.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Home extends CI_Controller {

	public function __construct(){
		parent::__construct();
		$this->load->model('mgeneral');                  
    }
	
	public function index()
	{
		$table = 't_pegawai';
		$data['title'] = 'Tutorial Membuat Kode Unik dengan CodeIgniter dan MySQL';
		$data['keyword'] ='Tutorial Membuat Kode Unik dengan CodeIgniter dan MySQL';
		$data['description'] ='Tutorial Membuat Kode Unik dengan CodeIgniter dan MySQL';
		
		$data['query'] = $this->mgeneral->getalldata($table);
		$this->load->view('vhome', $data);
	}
	public function add ()
	{
		$table = 't_pegawai';
		
		$data['title'] = 'Form Kode Unik dengan CodeIgniter dan MySQL';
		$data['keyword'] ='Form Kode Unik dengan CodeIgniter dan MySQL';
		$data['description'] ='Form Kode Unik dengan CodeIgniter dan MySQL';
		$data['aksi'] = 'act_add';
		
		$data['kodeunik'] = $this->mgeneral->getkodeunik($table);
		$this->load->view('fhome',$data);
		
	}
	
	public function edit($id){
		$table = 't_pegawai';
		
		$ar_data = array('kd_pegawai' =>$id);
		$data['title'] = 'Form Kode Unik dengan CodeIgniter dan MySQL';
		$data['keyword'] ='Form Kode Unik dengan CodeIgniter dan MySQL';
		$data['description'] ='Form Kode Unik dengan CodeIgniter dan MySQL';
		$data['aksi'] = 'act_edit';
		
		$data['query'] = $this->mgeneral->getbydata($table,$ar_data);
		$this->load->view('fhome',$data);
	}
	
	
	public function aksi(){
		$aksi = $this->uri->segment('3');
		#print $aksi;
		$table = 't_pegawai';
		$iduri = $this->uri->segment('4');
		
		//post
		$kode	= $this->input->post('kdpegawai');
		$nama 	= addslashes($this->input->post('nmpegawai'));
		$alamat	= addslashes($this->input->post('alamat'));
		$telp	= addslashes($this->input->post('notelp'));
		$kota	= $this->input->post('kota');
		$prov	= $this->input->post('provinsi');
		
		if($aksi =='del'){
			$where = array(
				'kd_pegawai' => $iduri
			);
			$this->mgeneral->delete_data($table,$where);
			$this->session->set_flashdata("pesan", "<div class=\"alert alert-danger\" id=\"alert\"><i class=\"glyphicon glyphicon-trash\"></i> Data has been deleted </div>");
			redirect('home');
			
		}elseif($aksi =='act_add'){
			$data = array(
				'kd_pegawai' 	=> $kode,
				'nm_pegawai'	=> $nama,
				'alamat'		=> $alamat,
				'kota' 			=> $kota,
				'provinsi'		=> $prov,
				'no_telp'		=> $telp,
				'dt_created'	=> time()
			);
			$this->mgeneral->insert_data($table,$data);
			$this->session->set_flashdata("pesan", "<div class=\"alert alert-success\" id=\"alert\"><i class=\"glyphicon glyphicon-ok\"></i> Data has been success insert</div>");
			redirect('home');
			
		}elseif($aksi =='act_edit'){
			$data = array(
				'nm_pegawai'	=> $nama,
				'alamat'		=> $alamat,
				'kota' 			=> $kota,
				'provinsi'		=> $prov,
				'no_telp'		=> $telp,
			);
			$where = array('kd_pegawai' => $kode);
			$this->mgeneral->update_data($table,$data,$where);
			$this->session->set_flashdata("pesan", "<div class=\"alert alert-warning\" id=\"alert\"><i class=\"glyphicon glyphicon-ok\"></i> Data has been success update</div>");
			redirect('home');
		}
	}
}

kemudian untuk koneksi ke tabelnya buat model seperti dibawah ini, beri nama mgeneral.php

<?php  
 class Mgeneral extends CI_Model {      
     public function __construct() {  
     parent::__construct();      
   }  

   function insert_data($table,$data) {  
     $this->db->insert($table, $data);  
   }
   
   function update_data($table,$data,$key) {  
     $this->db->where($key);  
     $this->db->update($table, $data);  
   }
   
   function delete_data($table,$where=0) {  
     if($where != 0) {  
       foreach($where as $key=>$val){  
         $this->db->where($key, $val);  
       }    
     }  
     $this->db->delete($table);  
   }
   
   function getbydata($table, $where) {  
     $this->db->from($table);
     $this->db->where($where);  
     $query = $this->db->get();  
      
     return $query->row();  
   }
   
   function getalldata($table) {  
     $this->db->select('*');  
     $this->db->from($table);     
     $query = $this->db->get();          
     return $query->result();  
    }
    
   function getkodeunik($table) {  
        $q = $this->db->query("SELECT MAX(RIGHT(kd_pegawai,4)) AS idmax FROM ".$table);
        $kd = ""; //kode awal
        if($q->num_rows()>0){ //jika data ada
            foreach($q->result() as $k){
                $tmp = ((int)$k->idmax)+1; //string kode diset ke integer dan ditambahkan 1 dari kode terakhir
                $kd = sprintf("s", $tmp); //kode ambil 4 karakter terakhir
            }
        }else{ //jika data kosong diset ke kode awal
            $kd = "0001"; 
        }
        $kar = "PEL."; //karakter depan kodenya
        //gabungkan string dengan kode yang telah dibuat tadi 
        return $kar.$kd; 
   }  
 }  

pada model diatas semua dibuat dalam variabel yang dibawa dari controller. Jadi semua fungsi bisa digunakan ke controller tabel lain jika ingin digunakan.
Seperti pada judul, kode uniknya  kita buat di model ini. Kita bisa liat di function getkodeunik fungsi inilah yang mengenerate kode pegawai otomatis setiap kita menambah informasi pegawai.

Kemudian agar tampilannya view pegawainya rapi buat view beri nama vhome.php buat seperti skrip dibawah ini

<? $this->load->view("iheader");?>
    <div class="container">
      <div class="panel panel-default">
  <div class="panel-heading"><b>Daftar Pegawai</b></div>
  <div class="panel-body">
    <p><?=$this->session->flashdata('pesan')?> </p>
      <a href="<?=base_url()?>home/add" class="btn btn-sm btn-success"><i class="glyphicon glyphicon-plus"></i> Tambah</a>

       <table class="table table-striped">
        <thead>
         <tr>
         <th>No</th>
         <th>Kode Pagawai</th>
         <th>Nama Pegawai</th>
         <th>Alamat</th>
         <th>No Telp</th>
         <th></th>
         </tr>
        </thead>
        <tbody>
        <? if(empty($query)){ ?>
         <tr>
          <td colspan="6">Data tidak ditemukan</td>
         </tr>
        <? }else{
          $no=0;
          foreach($query as $rquery){ $no++;
          ?>
         <tr>
          <td><?=$no?></td>
          <td><?=$rquery->kd_pegawai?></td>
          <td><?=$rquery->nm_pegawai?></td>
          <td><?=$rquery->alamat?>, <?=$rquery->kota?>, <?=$rquery->provinsi?></td>
          <td><?=$rquery->no_telp?></td>
          <td>
            <div class="btn-group">  
 <a  href="home/edit/<?=$rquery->kd_pegawai?>" class="btn btn-info btn-sm"><i class="glyphicon glyphicon-pencil"></i></a>
 <a href="home/aksi/del/<?=$rquery->kd_pegawai;?>" class="btn btn-sm btn-danger" onclick="return confirm('Yakin  ingin menghapus data ini ?')"><i class="glyphicon glyphicon-trash"></i></a>  
 </div>  
        </td>
         </tr>
        <? }}?>
        </tbody>
       </table>
        </div>
    </div>    <!-- /panel -->
    </div> <!-- /container -->
 <? $this->load->view('ifooter');?>

Pada vhome.php terdapat dua file load view lainnya yaitu iheader.php dan ifooter.php mungkin bisa dilihat pada artikel-artikel sebelumnya bisa dicopy dari sana.

Untuk tampilan form nya buat dengan nama fhome.php buat seperti dibawah

<? $this->load->view("iheader");
if($aksi =='act_edit'){
  $kodeunik = $query->kd_pegawai;
  $nama   = $query->nm_pegawai;
  $alamat = $query->alamat;
  $kota   = $query->kota;
  $prov   = $query->provinsi;
  $notelp = $query->no_telp;
}else{
  $nama   = "";
  $alamat = "";
  $kota   = "";
  $prov   = "";
  $notelp = "";
}
?>

<div class="container">
<!-- Main component for a primary marketing message or call to action -->
<div class="panel panel-default">
  <div class="panel-heading"><b>Form Pegawai Pegawai</b></div>
  <div class="panel-body">
    <p><?=$this->session->flashdata('pesan')?> </p>
     <form action="<?=base_url()?>home/aksi/<?=$aksi?>" method="post">
       <table class="table table-striped">
         <tr>
         <td>Kode Pegawai</td>
         <td>
          <div class="col-xs-3">
            <input type="text" readonly name="kdpegawai" value="<?=$kodeunik?>" class="form-control">
         </div>
         </td>
        </tr>
         <tr>
          <td>Nama Pegawai</td>
          <td>
            <div class="col-xs-8">
              <input type="text" name="nmpegawai" class="form-control" value="<?=$nama?>" required>
            </div>
          </td>
         </tr>
         <tr>
          <td>Nomor Telepon</td>
          <td>
            <div class="col-xs-4" >
            <input type="text" name="notelp" class="form-control" value="<?=$notelp?>" required>
            </div>
          </td>
         </tr>
         <tr>
          <td>Alamat</td>
          <td>
            <div class="col-xs-7" >
              <textarea name="alamat" class="form-control"><?=$alamat?></textarea>
            </div>
          </td>
         </tr>

         <tr>
          <td>Kota</td>
          <td>
            <div class="col-xs-3" >
            <select name="kota" class="form-control" required>
             <option></option>
             <option value="Jakarta" <? if($kota =='Jakarta'){echo"selected";}?>>Jakarta</option>
             <option value="Medan" <? if($kota =='Medan'){echo"selected";}?>>Medan</option>
             <option value="Bandung" <? if($kota =='Bandung'){echo"selected";}?>>Bandung</option>
             <option value="Bali" <? if($kota =='Bali'){echo"selected";}?>>Bali</option>
             <option value="Tarutung" <? if($kota =='Tarutung'){echo"selected";}?>>Tarutung</option>
             <option value="Berastagih" <? if($kota =='Berastagih'){echo"selected";}?>>Berastagih</option>
          </select>
            </div>
          </td>
         </tr>
                  <tr>
          <td>Provinsi</td>
          <td>
            <div class="col-xs-3" >
            <select name="provinsi" class="form-control" required>
             <option></option>
             <option value="Sumatera Utara" <? if($prov =='Sumatera Utara'){echo"selected";}?>>Sumatera Utara</option>
             <option value="DKI Jakarta" <? if($prov =='DKI Jakarta'){echo"selected";}?>>DKI Jakarta</option>
             <option value="Jawa Barat" <? if($prov =='Jawa Barat'){echo"selected";}?>>Jawa Barat</option>
             <option value="Bali" <? if($prov =='Bali'){echo"selected";}?>>Bali</option>
          </select>
            </div>
          </td>
         </tr>
         <tr>
          <td colspan="2"><input type="submit" value="<? if($aksi=='act_edit'){echo"Update";}else{echo"Simpan";}?>" class="btn btn-primary btn-lg">
          
          <a href="<?=base_url()?>home" class="btn btn-default btn-lg">Kembali</a></td>
         </tr>
       </table>
      </form> 
        </div>
    </div>    <!-- /panel -->
    </div> <!-- /container -->
 
 <? $this->load->view('ifooter');?>

 

Kode Uniknya bisa dikombinasikan dengan berbagai kondisi seperti tanggal dan lain-lain agar lebih unik lagi. Tergantung kreatif pengembangan agan-agan.

Mungkin sekian tutorial kali ini, semoga bermanfaat.

Postingan Terkait
» Cetak Laporan Format Excel di Codeigniter ( 25 Jan 2017 | 06:39:12 , 888 hits )
» Membuat Laporan PDF dengan DomPDF di CodeIgniter ( 04 Nov 2016 | 07:42:55 , 1887 hits )
» Edit dan Hapus Foto Upload Codeigniter ( 31 Okt 2016 | 08:25:06 , 4628 hits )
» Membuat Paging dan Search Bootstrap CodeIgniter ( 11 Okt 2016 | 16:26:41 , 8244 hits )
» Menambah Web File Menager pada CKEditor di CodeIgniter ( 15 Sep 2016 | 09:10:43 , 2237 hits )