Wednesday, December 24, 2014

Jepretcode: Codeigniter Max Id Atau Kode Otomatis

Codeigniter Max Id Atau Kode Otomatis

Max id otomatis untuk data kode seperti kode mahasiswa atau dosen, produk, buku dan lainnya. Lalu bagaimana cara membuat kode otomatis menggunakan codeigniter.
Didalam database seperti data mahasiswa atau data produk jika ingin membuat kode otomatis dan diambil dari kode yang tertinggi saat penyimpanan terakhir lalu ditambah beberapa kode lain seperti Untuk kode mahasiswa : MHS/2014/0001 ataupun seperti kode data dosen seperti DSN/2014/001 jadi ketika input data baru maka otomatis akan mendapatkan kode baru sebagai kode untuk data mahasiswa atau dosen.
Untuk keterangan kode didapat dari singkatan mahasiswa adalah MHS 2014 untuk tahun dan 0001 adalah nomor mahasiswa begitu juga untuk dosen.
Berikut langkah langkah untuk membuat Max Id / Kode menggunakan Codeigniter dan sekaligus untuk panduan membuat seperti :

  • controller untuk max id atau kode, 
  • controller input / tambah
  • controller edit / koreksi
  • controller delete / hapus
  • controller pagination / halaman (jika data lebih dari 10 maka otomatis membuat halaman berikutnya
Lakukan langkah berikut dan penjelasan error yang muncul dan cara mengatasi semua error yang muncul tersebut ketika melakukan langkah-langkah tersebut  :

Langkah Pertama

Download codeigniter saya menggunakan codeigniter 2.2.0 dan extract di localhost agar bisa diakses dengan nama sesuai yang diinginkan contoh buat folder "mahasiswa"

Langkah Kedua

Buat database dengan nama db_mahasiswa
CREATE TABLE IF NOT EXISTS `mahasiswa` (
`id` int(11) NOT NULL,
  `kode_mahasiswa` varchar(15) NOT NULL,
  `nama_mahasiswa` varchar(250) NOT NULL
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

Langkah Ketiga

Buat file controller dengan nama c_mahasiswa.php didalam aplikasi beri nama didalam folder application\controllers\dan isinya sebagai berikut:

<?php

class C_mahasiswa extends CI_Controller{
 
 public function __construct(){
  parent::__construct();
  
  $this->load->model('m_mahasiswa');
 }
 
 public function index(){
  redirect('c_mahasiswa/tambah_mahasiswa');
 } 
 
 //MODUL MAHASISWA
  
 public function tambah_mahasiswa(){
  if($this->uri->segment(3)==""){
   $offset=0;
  }else{
   $offset=$this->uri->segment(3);
  }
  $limit = 5; 
  $data['mahasiswa'] = $this->m_mahasiswa->getAllMahasiswa($offset, $limit);
  $data['count'] = $this->m_mahasiswa->getAllMahasiswa_count(); 
  $config = array();
  $config['base_url'] = base_url(). 'c_mahasiswa/tambah_mahasiswa/';
  $config['per_page'] = $limit;
  $config['uri_segment'] = 3;
  $config['num_links'] = 5;  
  $config['first_tag_open'] = '<li>';
  $config['first_link'] = 'First';
  $config['first_tag_close'] = '</li>';
  $config['prev_link'] = 'Prev';
  $config['prev_tag_open'] = '<li>';
  $config['prev_tag_close'] = '</li>';
  $config['cur_tag_open'] = '<li class="active"><a href>';
  $config['cur_tag_close'] = '</a></li>';
  $config['next_link'] = 'Next';
  $config['next_tag_open'] = '<li>';
  $config['next_tag_close'] = '</li>';
  $config['num_tag_open'] = '<li>';
  $config['num_tag_close'] = '</li>';
  $config['last_tag_open'] = '<li>';
  $config['last_link'] = 'Last';
  $config['last_tag_close'] = '</li>';
  $config['total_rows'] = $data['count'];
  $this->pagination->initialize($config);
  $this->session->set_userdata('row', $this->uri->segment(3));
  $data['kode_mahasiswa'] = $this->m_mahasiswa->get_kode_mahasiswa();
  $data['error'] = "";    
  $this->load->model('m_mahasiswa');  
  $this->load->view('admin/mahasiswa/tambah_mahasiswa', $data);
 }  
 
 public function submit_tambah_mahasiswa(){ 
  $this->form_validation->set_rules('nama_mahasiswa','Nama Mahasiswa', 'required|xss_clean|max_length[255]|trim|strip_tags');
  if($this->form_validation->run() == TRUE){ 
   
   $input_kode_mahasiswa = $this->input->post('kode_mahasiswa');   
   $input_nama_mahasiswa= $this->input->post('nama_mahasiswa');
   $ganti = array("'");
   $oleh = "&#039;";   
   $kode_mahasiswa = str_replace($ganti, $oleh, $input_kode_mahasiswa);
   $nama_mahasiswa = str_replace($ganti, $oleh, $input_nama_mahasiswa);
   $this->m_mahasiswa->inputMahasiswa($kode_mahasiswa, $nama_mahasiswa);
   
   $this->session->set_flashdata('info', "Mahasiswa berhasil ditambahkan.");
   redirect('c_mahasiswa/tambah_mahasiswa');
  }else{ 
  redirect('c_mahasiswa/tambah_mahasiswa');
 }}
   
 public function edit_mahasiswa($kode_mahasiswa){  
  $data['edit_mahasiswa'] = $this->m_mahasiswa->getEditMahasiswa($kode_mahasiswa)->row();
  $data['judul'] = "Edit Mahasiswa | Mahasiswa";
  $this->load->view('admin/mahasiswa/edit_mahasiswa', $data);
 }
 
 public function submit_edit_mahasiswa(){
 $id = $this->input->post('kode_mahasiswa'); 
 $this->form_validation->set_rules('nama_mahasiswa','Nama Mahasiswa', 'required|xss_clean|max_length[255]|trim|strip_tags');
   $input_nama_mahasiswa= $this->input->post('nama_mahasiswa');
   $ganti = array("'");
   $oleh = "&#039;";   
   $nama_mahasiswa = str_replace($ganti, $oleh, $input_nama_mahasiswa);
   $this->m_mahasiswa->updateMahasiswa($id, $nama_mahasiswa);
   $this->session->set_flashdata('info', "Siswa berhasil diubah, gambar diubah.");
   redirect('c_mahasiswa/tambah_mahasiswa');   
 } 
 
 public function hapus_mahasiswa($kode_mahasiswa){
  $query = $this->m_mahasiswa->getEditMahasiswa($kode_mahasiswa)->row();      
  $this->m_mahasiswa->hapus_mahasiswa($kode_mahasiswa);
  redirect('c_mahasiswa/tambah_mahasiswa');
 }
 
 //END MODUL MAHASISWA
}

Langkah keempat

Membuat file model dengan nama m_mahasiswa.php didalam folder application\models\dan berikut isinya:


<?php 

class M_mahasiswa extends CI_Model{
 
 public function __construct(){
  parent::__construct();
 }
 
 // AWAL QUERY MAHASISWA
 
 //BUAT MODEL MAX_KODE_MAHASISWA
 public function get_kode_mahasiswa() {
  $tahun = date("Y");
  $kode = 'MHS';
  $query = $this->db->query("SELECT MAX(kode_mahasiswa) as max_id FROM mahasiswa"); 
  $row = $query->row_array();
  $max_id = $row['max_id']; 
  $max_id1 =(int) substr($max_id,9,5);
  $kode_mahasiswa = $max_id1 +1;
  $maxkode_mahasiswa = $kode.'-'.$tahun.'-'.sprintf("%04s",$kode_mahasiswa);
  return $maxkode_mahasiswa;
 }
 
 public function getAllMahasiswa($offset, $limit){
  $query = $this->db->query("SELECT * FROM mahasiswa ORDER BY kode_mahasiswa DESC LIMIT $offset, $limit");
  return $query;
 }
 
 public function getAllMahasiswa_count(){
  $query = $this->db->query("
   SELECT * FROM mahasiswa
  ");
  return $query->num_rows();
 }
 
 public function inputMahasiswa($kode_mahasiswa, $nama_mahasiswa){
  $query = $this->db->query("INSERT INTO mahasiswa VALUES('', '$kode_mahasiswa', '$nama_mahasiswa')");
 }
                 
 public function getEditMahasiswa($kode_mahasiswa){
  $query = $this->db->query("SELECT * FROM mahasiswa WHERE kode_mahasiswa = '$kode_mahasiswa'"); 
  return $query;
 }
 
 public function updateMahasiswa($id, $nama_mahasiswa){
  $query = $this->db->query("UPDATE mahasiswa 
         SET nama_mahasiswa = '$nama_mahasiswa' WHERE kode_mahasiswa = '$id'
        ");
 }
 
 public function hapus_mahasiswa($id){
  $this->db->query("DELETE FROM mahasiswa WHERE kode_mahasiswa = '$id' ");
 }
 //AKHIR QUERY MAHASISWA  
}

Langkah Kelima

Membuat file tambah_mahasiswa.php tempatkan didalam folder application\views\admin\mahasiswa\ buat folder admin lalu buat folder mahasiswa didalam folder admin, dan isi file tambah_mahasiswa.php seperti dibawah ini:

<!DOCTYPE html>
<html lang="en">
<head>
    <style>
    body {
  padding-top: 10px;
  padding-left: 10px;
  padding-right: 20px;
  margin: 0;
  font-family: "Helvetica";
  font-size: 14px;
  line-height: 18px;
  color: #000000;
  background-color: #ffffff;
 }
 
 .container,
 .navbar-fixed-top .container,
 .navbar-fixed-bottom .container {
 width: 80%;
 }

 .table {
  width: 80%;
  margin-bottom: 18px;
 }

 .table th,
 .table td {
  padding: 8px;
  line-height: 18px;
  text-align: left;
  vertical-align: top;
  border-top: 1px solid #dddddd;
 }

 .table th {
  font-weight: bold;
 }

 .table thead th {
  vertical-align: bottom;
 }
 
 .table-bordered {
  border: 1px solid #dddddd;
  border-collapse: separate;
  *border-collapse: collapsed;
  border-top: 0;
  border-left: 0;
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
        border-radius: 4px;
 }

 .table-bordered th,
 .table-bordered td {
 border-left: 1px solid #dddddd;
 }

 .table-striped tbody tr:nth-child(odd) td,
 .table-striped tbody tr:nth-child(odd) th {
 background-color: #f9f9f9;
 }

 .table tbody tr:hover td,
 .table tbody tr:hover th {
 background-color: #f5f5f5;
 }
 
 #Halaman
  .pagination {
  height: 36px;
  margin: 18px 0;
  }
 
  .pagination ul {
  display: inline-block;
  }

  .pagination li {
  display: inline;
  }

  .pagination a {
  padding: 10px 14px;
  }

  .pagination a:hover,
  .pagination .active a {
  background-color: #f0f0f0;
  }
  
    </style>
</head>
<body>
<center>
 <div class="container"> 
  <h1>Tambah Mahasiswa</h1><br />
      
      <div><!-- div well & form -->
       <form class="form-horizontal" action="<?php echo base_url(); ?>c_mahasiswa/submit_tambah_mahasiswa" method="POST" enctype="multipart/form-data">
       <fieldset>
        <div><br />
         <label>Kode Mahasiswa :</label>
         <input name="kode_mahasiswa" readonly value="<?php echo $kode_mahasiswa; ?>">
        </div><br />     
        <div>
         <label>Nama Mahasiswa :</label>
         <input name="nama_mahasiswa" type="text" value="<?php echo set_value('nama_mahasiswa'); ?>">
        </div><br />
             
       <div class="form-actions"><!-- button action -->
        <button type="submit" class="btn btn-primary">Simpan</button>
        <button class="btn">Batal</button>
       </div>
       </fieldset>
       </form>
      </div>
 </div>
  
  <h3>Daftar Mahasiswa, diurutkan berdasarkan Data Kode Mahasiswa Terakhir.</h3>
  <h3>Semua Mahasiswa berjumlah sebanyak: <?php echo $count; ?> yang tersimpan.</h3>
  <table class="table table-striped table-bordered">
   <thead>
    <th>No</th>
    <th>Kode Mahasiswa</th>
    <th>Nama Mahasiswa</th>
    <th colspan="2">Aksi</th>
   </thead>
   <tr>
    <?php $no=1; 
     foreach($mahasiswa->result() as $row){ 
    ?>
    <td><?php echo $this->session->userdata('row')+$no; ?></td>
    <td><?php echo ucwords($row->kode_mahasiswa); ?></td>
    <td><?php echo ucwords($row->nama_mahasiswa); ?></td>
         
    <td border="0">
     <a title="Edit Siswa Siswa" href="<?php echo base_url(); ?>c_mahasiswa/edit_mahasiswa/<?php echo $row->kode_mahasiswa; ?>">Edit</a> 
     | 
     <a href="#" onClick="if(confirm('Anda yakin HAPUS data ini? ')){document.location='<?php echo base_url()?>c_mahasiswa/hapus_mahasiswa/<?php echo $row->kode_mahasiswa; ?>'}" title="Hapus Mahasiswa" >Hapus</a>
    </td>
   </tr>
    <?php 
     $no++;
     } 
    ?>
  </table>
  <div class="pagination">
   <ul>
    <?php echo $this->pagination->create_links(); ?>
   </ul>
  </div>
  <hr />
  <div>
   <div class="span2">
   <footer>
   <p>&copy; jepretcode 2014.</p>
   </footer>
   </div>
  </div><br />
</center>
  </body>
</html>

Langkah keenam

Buka file routes.php yang ada di dalam folder application\config\

$route['default_controller'] = "welcome";
mejadi
$route['default_controller'] = "c_mahasiswa";

Coba lalukan pemanggilan dilocalhost apa yang terjadi?. Jika terjadi kesalahan "Fatal error: Call to undefined function redirect() in"  maka fungsi redirect tidak jalan sesuai dengan isi pada controller c_mahasiswa.php yaitu

redirect('c_mahasiswa/tambah_mahasiswa');

dan redirect lainnya yang ada didalam file controller c_mahasiswa.php, lalu bagaimana cara mengatasi Fatal error: Call to undefined function redirect() in ? yaitu dengan cara:
  • Buka file autoload.php yang ada didalam folder application\config\
  • Rubah isi sesuai dengan yang dibawah ini
$autoload['helper'] = array();

Mejadi

$autoload['helper'] = array('url');
  • Coba ulang membuka atau refresh di localhost
  • Apa yang terjadi ?
Jika mendapati kesalahan "Fatal Error: Call to member funtion query() on a non-object in" dan pesan Message:Undefined property: C_mahasiswa::$db seperti gambar dibawah ini:
Codeigniter Message: Undefined property: Controlloer ::$db

maksudnya adalah adanya pesan error dari controller dari file c_mahasiswa.php ketika memanggil model m_mahasiswa.php tidak bisa memanggil atau autoload database (alasannya karena database belum diconnectkan secara autoload) sesuai perintah model m_mahasiswa.php oleh karena itu ada pesan error Message: Undefined property: C_mahasiswa::$db. 
Lalu bagaimana cara mengatasi pesan A PHP Error was encountered ini, adalah dengan cara menghubungkan database dengan membuka file autoload.php yang ada difolder application\config\ dan rubahlah sesuai keteranga dibawah ini:

$autoload['libraries'] = array();

Menjadi

$autoload['libraries'] = array('database');
  • Lakukan pemanggilan ulang di localhost dan lalu apa yang terjadi?
  • Tentunya akan terjadi kesalahan lagi... (makin pusing aja) lihat gambar dibawah ini:
Codeigniter No database selected

Terjadi kesalahan "A Database Error Occured No database selected", hal ini terjadi karena kita belum mengisi database yang dipanggil oleh perintah autoload.php tadi yang meminta database.php, yang mana database.php belum diisi data atau nama file database yang kita buat sesuai langkah kedua yaitu db_mahasiswa, lalu bagaimana cara mengatasi nya?
  • Buka file database.php yang ada didalam folder application\config\
  • rubah isinya sesuai dibawah ini
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = '';
$db['default']['password'] = '';
$db['default']['database'] = '';

Menjadi

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';  //username localhost (sesuaikan dengan username localhost anda)
$db['default']['password'] = 'mysql'; //password localhost (sesuaikan dengan password localhost anda)
$db['default']['database'] = 'db_mahasiswa';

Lakukan langkah refresh ulang di localhost dan lihat apa yang terjadi, tentunya ada error A PHP Error was encountered dengan pesan Undefined property: C_mahasiswa::$pagination seperti gambar dibawah ini:
Undefined property: Controller::$pagination

Hal ini terjadi karena didalam file controller c_mahasiswa.php kita menggunakan pagination untuk menampilkan data dari database agar lebih mudah dilihat. mungkin bisa dilihat isinya seperti controller c_mahasiswa diatas atau lihat dibawah ini:

$this->pagination->initialize($config);

Lalu bagaimana cara mengatasi pesan error Message: Undefined property: Controller::$pagination yang terjadi pada saat langkah ini? berikut penjelasannya
  • Buka lagi file autoload.php seperti langkah sebelumnya yang ada difolder application\config\
  • lalu tambahkan autoload pemanggilan file pagination.php yang ada didalam folder system\libraries\ dengan cara seperti dibawah ini:
$autoload['libraries'] = array('database'); 

Menjadi 

$autoload['libraries'] = array('database','pagination');

Langkah selanjutnya refresh lagi localhost lalu apa yang terjadi, masih menemukan pesan error?. Message: Undefined property:C_mahasiswa::$session lihat gambar dibawah ini:

Codeigniter Undefined property:Controller ::$session

Kenapa hal ini bisa terjadi error, karena didalam controller c_mahasiswa.php memanggil file session.php yang ada didalam folder system\libraries\ seperti isi yang ada didalam file c_mahasiswa.php diatas atau bisa dilihat yang seperti dibawah ini:

$this->session->set_userdata('row', $this->uri->segment(3));

Lalu bagaimana mengatasi pesan error "Message: Undefined property:C_mahasiswa::$session yang terjadi pada gambar diatas, yaitu sama dengan langkah sebelumnya berikut caranya:
  • membuka file autoload.php yang ada didalam folder application\confiq\
  • tambahkan autoload pemanggilan file session.php yang ada didalam folder system\libraries\ dengan cara seperti dibawah ini
$autoload['libraries'] = array('database','pagination');

Menjadi

$autoload['libraries'] = array('database','pagination','session');


Langkah Selanjutnya refresh localhost lagi, lalu lihat apa yang terjadi?. masih mendapati error in order to use the Session class you are required to set an encryption key in your confiq file,  lihat gambar dibawah :
Codeigniter in order to use the Session class you are required to set an encryption key in your confiq file

kenapa pesan error ini muncul? karena untuk menggunakan Session seperti diatas maka kita diminta untuk mengatur atau mengisi encryption key yang ada didalam config.php, lihat cara mengatasi pesan error in order to use the Session class you are required to set an encription key in your config file seperti dibawah ini:

$config['encryption_key'] = '';

Menjadi

$config['encryption_key'] = 'jepret0123456789code';

Untuk pengisian encryption _key silahkan cari tentang cara mengisi kode seperti diatas

Langkah selanjutnya refresh localhost lagi dan lihat apa yang terjadi?. Apakah masih belum tampil ?. apakah hanya tampil seperti gambar berikut:

Codeigniter Input / Tambah Data

Kalau dilihat gambar diatas maka semua seperti form, html, tabel dan lainnya belum tampil? Lalu bagaimana cara agar tampilannya sesuai yang kita inginkan seperti isi yang sesuai dengan tambah_mahasiswa.php seperti langkah kelima diatas. karena kalau diperhatikan isinya ada form pengisian seperti nama_mahasiswa dan tampilan tabel seluruh data mahasiswa belum tampil. lalu bagaimana cara mengatasi tampilan tabel form dan html tidak tampil ini, berikut caranya:
  • Buka lagi file autoload.php didalam folder application\config\
  • Tambahkan kode seperti dibawah ini
$autoload['helper'] = array('url',);

Menjadi

$autoload['helper'] = array('url','file','html','form');


Silahkan dilihat dan dirasakan (hehehe pakai perasaan ni yee) apakah tampilannya sudah seperti gambar dibawah ini?. Jika sudah maka Anda sudah sukses melakukan langkah demi langkah dan mengetahui kesalahan-kesalahan didalam codeigniter dan cara mengatasi kesalahan-kesalahan yang terjadi dan logika langkah ini dapat diterapkan untuk melakukan project lain yang menggunakan codeigniter.

Codeigniter Create Input Edit Delete

Tunggu dulu jangan senang dulu karena tampilannya sepertinya ok... coba deh diinput data baru?. Apakah terjadi kesalahan Not Found - 404 The requested was not found on this server. apakah muncul pesan seperti itu?. jika iya kenapa dan bagaimana mengatasinya?. Berikut keterangannya:
  • Kenapa muncul Not Found - 404? karena ketika input data dan memanggil function submit_tambah_mahasiswa yang ada didalam controller c_mahasiswa meminta redirect ke : "http://localhost/mahasiswa/c_mahasiswa/submit_tambah_mahasiswa" sementara default url kita menggunakan index.php seperti http://localhost/index.php/c_mahasiswa/submit_tambah_mahasiswa tentu tidak akan jalan.
redirect('c_mahasiswa/tambah_mahasiswa');
  • Lalu bagaimana cara mengatasinya?. lakukan langkah berikut
Bagaimana Cara Menghilangkan index.php di codeigniter
  • Buka confiq.php yang ada difolder application\confiq\
  • Sesuaikan seperti dibawah ini
$config['index_page'] = 'index.php';

Menjadi

$config['index_page'] = '';
  • Buat file .htaccess yang ada didalam folder utama dalam hal ini "mahasiswa"
  • Isi file seperti contoh dibawah ini.
<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php/?$1 [L]
</IfModule>
  • Coba dilihat lagi atau di refresh localhost nya.
  • Apakah masih ada kesalahan?
  • Tentu akan keluar pesan error Message: Undefined property: C_mahasiswa::$form_validation
Kenapa keluar pesan Message: Undefined property: Controller::$form_validation ini?. karena didalam controller c_mahasiswa.php meminta menjalankan Form_validation.php yang ada di folder system\libraries\ dengan perintah seperti dibawah ini yang ada didalam controller c_mahasiswa.php

$this->form_validation->set_rules('nama_mahasiswa','Nama Mahasiswa', 'required|xss_clean|max_length[255]|trim|strip_tags');

Lalu bagaimana cara mengatasi error Message: Undefined property: Controller::$form_validation ini?. Berikut caranya:

  • Buka lagi file autoload.php yang ada didalam application\config\
  • Lalu isi sesuai seperti kode dibawah ini
$autoload['libraries'] = array('database','pagination','session');

Menjadi

$autoload['libraries'] = array('database','pagination','session','form_validation');

Berikut video tutorial membuat max id otomatis dengan codeigniter


Bagaimana? apakah sudah jalan semua. jika sudah berarti sudah komplit deh caranya. selamat menikmati.
Senang bila dishare jika memang bermanfaat untuk anda dan yang lainnya.

10 comments:

  1. ini versi brp bang ci nya

    ReplyDelete
    Replies
    1. Kalau ini saya menggunakan Codeigniter v2.2.0

      Delete
  2. Sama CSS dimasukin jadi panjang bikin pusing

    ReplyDelete
  3. This comment has been removed by the author.

    ReplyDelete
  4. kalau salah dalam menampilakan formnya bagaimana??

    ReplyDelete
  5. This comment has been removed by the author.

    ReplyDelete
  6. This comment has been removed by the author.

    ReplyDelete
  7. This comment has been removed by the author.

    ReplyDelete
  8. Message: Call to undefined function set_value()

    Filename: D:\xampp\htdocs\mahasiswa\application\views\admin\mahasiswa\tambah_mahasiswa.php

    Line Number: 110

    ReplyDelete
  9. pembahasannya sudah lama (2014) TETAPI tetap sangat menarik & detail dengan trace error nya.

    semoga berkah bang :)
    muantapp

    ReplyDelete