Simple CRUD with CodeIgniter II

Hallo semua, sebelumnya saya minta maaf jika ada beberapa komentar-komentar dan permintaan untuk bertukar link yang belum ditanggapi. Karena ada kesibukan jadi saya tak sempat ngurus blog ini . Baiklah sekarang kita kembali saja ke judul. Sesuai dengan judulnya, postingan kali ini merupakan kelanjutan dari postingan sebelumnya yaitu Simple CRUD with CodeIgniter. Jika sebelumnya kita sudah membuat program CRUD sederhana, sekarang kita akan menambahinya dengan form validation dan information message.

Seperti sebelumnya, kita harus mengatur konfigurasi library dan helper di file autoload.php. Kali ini kitambahkan library form_validation dan session.
$autoload['libraries'] = array('database', 'form_validation', 'session');
$autoload['helper'] = array('form', 'url');
Sedangkan untuk konfigurasi database di file database.php masih tetap sama.
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '';
$db['default']['database'] = 'ci';
Nama database yang digunakan adalah "ci" dan nama tabelnya "cd".
CREATE DATABASE ci;
USE ci;
CREATE TABLE `cd` (
  `kode_cd` int(11) NOT NULL auto_increment,
  `judul` varchar(50) default NULL,
  `kategori` varchar(25) default NULL,
  `stok` int(11) default '0',
  `harga` int(11) default '0',
  PRIMARY KEY  (`kode_cd`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
Coding model pada file crud_model.php juga masih tetap sama.
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Crud_model extends CI_Model {
 private $table_name; 
 
 public function __construct()
 {
  parent::__construct();
  $this->table_name = 'cd'; //setting nama tabel
 }

 function create_data($data) //untuk manambah record
 {
    $this->db->insert($this->table_name, $data);
    if($this->db->affected_rows() > 0){
   return true;
  } else {
   return false;
  }
 }
 
 function read_data() //untuk membaca seluruh record
 {
  $sql = $this->db->get($this->table_name);
    if($sql->num_rows() > 0){   
   foreach($sql->result() as $row){
    $data[] = $row;
   }   
   return $data;
  } else {
   return null;
  }
 }
 
 function update_data($kode,$data) //untuk meng-update record
 {
    $this->db->where('kode_cd', $kode);
    $this->db->update($this->table_name, $data);
    if($this->db->affected_rows() > 0){
   return true;
  }
  else{
   return false;
  }
 }
 
 function delete_data($kode) //untuk menghapus record
 {
    $this->db->where('kode_cd', $kode);
    $this->db->delete($this->table_name);
  if($this->db->affected_rows() > 0){
   return true;
  }
  else{
   return false;
  }    
 }
 
 function get_data($kode) //untuk mengambil record berdasarkan kodenya
 {
  $this->db->where('kode_cd', $kode);
  $query = $this->db->get($this->table_name);
  if($query->num_rows() > 0){
   return $query->row();
  }
  else{
   return null;
  }
 } 
 
}
Sedangkan coding untuk controller yang ada di file crud.php terdapat perubahan. Dengan library form_validation kita dapat menentukan aturan tiap-tiap field. Misalnya, field "title" tidak boleh kosong, field "stock" harus berupa bilangan integer positif, dsb.
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Crud extends CI_Controller 
{

    public function __construct()
    {
        parent::__construct();
  $this->load->model('crud_model');
    }

 function index() //untuk menampilkan form awal yaitu form tambah data cd 
 {
  $data['cd'] = '';
  $data['cd_row'] = $this->crud_model->read_data();
  $this->load->view('crud_view', $data);
 }
 
 function edit() //untuk menampilkan form edit data cd
 {
  $code = $this->input->post('code');
  if (!empty($code)) $kode = $code;
  else $kode = $this->security->xss_clean($this->uri->segment(3));
  $result = $this->crud_model->get_data($kode);
  if ($result == null) redirect('crud');
  else $data['cd'] = $result;
  $data['cd_row'] = $this->crud_model->read_data();
  $this->load->view('crud_view', $data);
 }
 
 function delete() //untuk menghapus data cd
 {   
  $kode = $this->security->xss_clean($this->uri->segment(3));
  $result = $this->crud_model->get_data($kode);
  if ($result == null) {
   redirect('crud');
  } else { 
   $delete = $this->crud_model->delete_data($kode);
   // tampilkan information message
   if ($delete) $this->session->set_flashdata('message', 'Data deleted!');
   else $this->session->set_flashdata('message', 'Failed to delete data!');
   redirect('crud');
  }
 }
 
 function create() //untuk menambah data cd
 {
  // setting konfigurasi form validation
  $this->form_validation->set_error_delimiters('<div id="error">', '</div>');
  $this->form_validation->set_rules('title', 'Title', 'trim|required|xss_clean');
  $this->form_validation->set_rules('category', 'Category', 'trim|required|xss_clean');
  $this->form_validation->set_rules('stock', 'Stock', 'trim|required|is_natural_no_zero|xss_clean');
  $this->form_validation->set_rules('price', 'Price', 'trim|required|is_natural_no_zero|xss_clean');
  
  // jika tidak lolos validasi
  if ($this->form_validation->run() == FALSE){
   $this->index();
   
  // jika lolos validasi
  } else {
   $data = array(
    'judul' => $this->input->post('title'),
    'kategori' => $this->input->post('category'),
    'stok' => $this->input->post('stock'),
    'harga' => $this->input->post('price')   
   );
   $create = $this->crud_model->create_data($data);
   // tampilkan information message
   if ($create) $this->session->set_flashdata('message', 'Data created!');
   else $this->session->set_flashdata('message', 'Failed to create data!');
   redirect('crud');
  }
 }
 
 function update() //untuk meng-update data cd
 {
  // setting konfigurasi form validation
  $this->form_validation->set_error_delimiters('<div id="error">', '</div>');
  $this->form_validation->set_rules('title', 'Title', 'trim|required|xss_clean');
  $this->form_validation->set_rules('category', 'Category', 'trim|required|xss_clean');
  $this->form_validation->set_rules('stock', 'Stock', 'trim|required|is_natural_no_zero|xss_clean');
  $this->form_validation->set_rules('price', 'Price', 'trim|required|is_natural_no_zero|xss_clean');
  
  // jika tidak lolos validasi
  if ($this->form_validation->run() == FALSE){
   $this->edit();
   
  // jika lolos validasi
  } else {
   $code = $this->input->post('code');
   $data = array(
    'judul' => $this->input->post('title'),
    'kategori' => $this->input->post('category'),
    'stok' => $this->input->post('stock'),
    'harga' => $this->input->post('price')   
   );
   $update = $this->crud_model->update_data($code,$data);
   // tampilkan information message
   if ($update) $this->session->set_flashdata('message', 'Data updated!');
   else $this->session->set_flashdata('message', 'Failed to update data!');
   redirect('crud');
  }
 }
 
}
Coding view pada file crud_view.php juga terdapat perbuahan. Untuk menampilkan error message tiap-tiap field, kita tambahkan kode <?php echo form_error('nama field');?> seperti dibawah ini.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>CRUD CodeIgniter</title>
<link rel="stylesheet" href="<?php echo base_url();?>css/style.css" type="text/css" />
</head>
<body>
<?php
 if (empty($cd)) {
     $cd->kode_cd = '';
  $cd->judul = '';
  $cd->kategori = '';  
  $cd->stok = ''; 
  $cd->harga = '';
  $type = 'create'; 
 } else {
  $type = 'update';
 }
?>
<div id="container">
 <h1>CRUD Data CD</h1>
    <!-- information message -->
    <div id="message"><?php echo $this->session->flashdata('message'); ?></div>
    <!-- end information message -->
    <div id="form">
  <?php
         echo form_open('crud/'.$type);
   echo form_hidden('code',$cd->kode_cd);
  ?>
        <div id="field">
            <span class="label">Title</span>
            <?php echo form_input(array('name'=>'title','maxlength'=>50,'value'=>$cd->judul));?>
            <?php echo form_error('title'); // tampilkan error (jika ada) ?>
        </div>
        <div id="field">
            <span class="label">Category</span>
            <?php
                $options = array(
                    '' => '- select category -',
                    'action' => 'Action',
                    'animasi' => 'Animasi', 
                    'drama'  => 'Drama',
                    'horor'   => 'Horor',  
                    'Komedi'    => 'Komedi'
                );
                echo form_dropdown('category', $options,$cd->kategori);
    echo form_error('category'); // tampilkan error (jika ada)
            ?>
        </div>
        <div id="field">
            <span class="label">Stock</span>
            <?php echo form_input(array('name'=>'stock','value'=>$cd->stok));?>
            <?php echo form_error('stock'); // tampilkan error (jika ada) ?>
        </div>
        <div id="field">
            <span class="label">Price</span>
            <?php echo form_input(array('name'=>'price','value'=>$cd->harga));?>
            <?php echo form_error('price'); // tampilkan error (jika ada) ?>
        </div>
        <div id="field">
            <span class="label">&nbsp;</span>
            <?php echo form_submit(array('name'=>'submit','id'=>'submit','value'=>'Submit'));?>
   <?php if ($type=='update') { ?>
            <input type="button" id="button" value="Cancel" onclick="window.location.href='<?=site_url('crud');?>'"/>
            <?php } ?>
        </div>
        <?php echo form_close(); ?>
    </div>
    <div id="table">
        <table align="center">
         <tr id="head">
             <td id="no">No</td>
                <td id="judul" align="center">Title</td>
                <td id="kategori">Category</td>
                <td id="stok">Stock</td>
                <td id="harga">Price</td>
                <td id="action">Action</td>
            </tr>
            <?php
   if ( !empty($cd_row) ) {
    $no = 1; 
    foreach ($cd_row as $row) { ?>
    <tr id="row">
     <td id="no"><?php echo $no;?></td>
     <td id="judul"><?php echo $row->judul;?></td>
     <td id="kategori"><?php echo $row->kategori;?></td>
     <td id="stok"><?php echo $row->stok;?></td>
     <td id="harga"><?php echo $row->harga;?></td>
     <td id="action"> <a href="<?php echo site_url('crud/edit/'.$row->kode_cd);?>">Edit</a> | <a href="<?php echo site_url('crud/delete/'.$row->kode_cd);?>" onclick="return confirm('Are you sure?');">Delete</a></td>
    </tr>
    <?php
     $no++;
    }
   } else { ?>
                <tr id="row">
                <td colspan="6" align="center">EMPTY</td>
                </tr>
            <?
   }
   ?>
        </table>
    </div>
</div>
</body>
</html>
Setelah semua coding pada model, controller, dan view sudah beres, selanjutnya kita jalankan aplikasinya dengan mengetikkan pada browser http://localhost/ci/index.php/crud. Maka akan tampil halaman aplikasi CRUD seperti dibawah ini.
Setelah itu kita coba tes validasinya dengan memasukkan inputan kosong, jika validasinya sukses maka akan tampil seperti dibawah ini.
FYI, selain dapat menampilkan error message pada tiap-tiap field, CodeIgniter juga dapat menampilkan semua error message manjadi 1. Caranya cukup dengan menuliskan satu baris kode saja yaitu <?php echo validation_errors(); ?>, maka secara otomatis semua error message akan tempil menjadi 1. Untuk keterangan lebih jelas dapat dilihat di http://codeigniter.com/user_guide/libraries/form_validation.html.

Selamat mencoba

22 Comment:

Klik Saya said...

Siplah tulisannya.

Anonymous said...

terima kasih mas

Neesa Technologies Ltd said...

Nice Post Thanks for sharing this information which is useful for all.

php web development

Anonymous said...

Mas bagaimana caranya: ketika TITLE sudah di isi tetapi STOK masih kosong saat di submit isian TITLE tidak hilang agar tidak mengisi ulang.

Sebelumnya terimakasih atas kedermawanan ilmunya.
-Adhi-

diulik said...

thanks info-nya.
Klo boleh saran, upload file-nya di mediafire atau indowebster aja mas. di ziddu lemot abis...
"cuma saran"

Anonymous said...

kalau kita melakukan update atau delete kok muncul ini mulu ya...
Message: Cannot modify header information - headers already sent by

rendra said...

nice code

bisa gak ya pesan kesalahan diseting sesuai dengan kata-kata yang kita inginkan ?

Anonymous said...

kalo pengen ditambah pagination gimana yha mas caranya??
-newbie-

Anonymous said...

ada contoh sistem admin di CI 2 mas, kalau ada bagi ya untuk belajar. Aku dapat yg versi luar dari codeigniter.com tapi ingin dapat yang versi dari Indonesia.

tjokro said...

mas kalo pk nya diinput gimana ,mas?
tidak otomatis seperti kode cd?

Ahmad Fikry said...

adhi: bisa diakali pakai session

rendra: bisa gan, nanti kapan waktu ane buat postingannya

tjokro: bisa mas, caranya sama..

Anonymous said...

$this->form_validation->set_rules('title', 'Title', 'trim|required|xss_clean'); gan itu title,Title . parameter keduanya buat apaan gan ??

Anonymous said...

nulis code view nya digenerate pakai apa ?

Jantung Bocor said...

siiiiiiiiiipppppp lah tulisannya,.,.
sangat bagus sekali untuk dicontoh,..,.

Anonymous said...

Mas, kok di tempat saya muncul warning

"Creating default object from empty value" ??

Pemula said...

mas kok sudah saya download dan di coba error gini
Parse error: syntax error, unexpected $end in crudview line 104
sudah saya cari kurung kurawalnya lengkap. mohon pencerahannya..

Anonymous said...

mas,udh saya coba code diatas tp ada bebrp eror sbb : input data g bs dr form krn setlh disubmit data yg tampil ditabel isinya angka 0 semua jd input data cm bisa dari database, sama halnya dengan edit data setelah dipilih data yg mw diedit lalu lakukan edit data lalu submit maka data yg masuk ke tabel semua nilainya 0.itu knp y?trims....

Anonymous said...

kalo misalnye kita nulis comment gini di text area, dan kita ada enternye. contoh
"AA--
--AA"
dan, nampilinnye gimane?

Anonymous said...

mas, saya uda ikutin semua tpi ko tiap kali kita input full data yg keluar malah form_validation yg ga diinput lengkap. kalao gtu apa yg kurang? help..

cepicahyana said...

mksh gan

Anonymous said...

A PHP Error was encountered

Severity: Warning

Message: Creating default object from empty value

Filename: views/crud_view.php

Line Number: 11

error begini ni bos

Perkutut said...

gan gk bisa di download nih source code nya

Post a Comment