codeigniter indonesia
Tutorial

CodeIgniter Indonesia 10 CRUD dan Pagination Database

Setelah mengetahui cara menggunakan database maka kita akan mencoba melakukan perintah dasar pada sistem informasi CRUD (create, read, update dan delete) data menggunakan CodeIgniter. Selain CRUD, pada contoh ini juga akan dilakukan proses sorting dan pagination. Studi kasus yang akan diangkat adalah form data siswa.

Pada bab ini aplikasi CRUD yang akan dibuat adalah aplikasi yang memiliki fungsi untuk menampilkan seluruh data siswa. Data yang ditampilkan memiliki pagination (pembagian jumlah record yang ditampilkan pada sebuah halaman website). Pagination dibutuhkan karena kita tidak mungkin menampilkan semua data dalam satu layar. Selain itu daftar siswa tadi akan memiliki fitur pengurutan berdasarkan field dan memiliki menu action per daftar siswa.

Untuk melakukan pagination di Codeigniter tekah disediakan sebuah kelas yaitu kelas pagination. Untuk menggunakan kelas ini minimal harus memiliki tiga data yang selanjutnya akan menjadi konfigurasi pada library ini. Ketiga data tersebut adalah pagination base_url,   total_row (jumlah total baris atau record yang kita punya ) dan per_page (jumlah baris yang akan ditampilkan perhalaman). Contohnya

$this->load->library(‘pagination’);

$this->load->helper(‘url’);

$config[‘base_url’] = site_url(‘results/page/’);

$config[‘total_rows’] = 200;

$config[‘per_page’] = 20;

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

echo $this->pagination->create_links();

Contoh diatas menunjukkan cara penggunaan library pagination. Output dari library ini adalah link- link yang terdiri atas halaman dan link ke halaman berikut (next) atau sebelumnya (prev). Base_url harus berisi sebuah fungsi dari controller. Fungsi tersebut akan menerima dua parameter yaitu jumlah record perpage dan record berapa yang tampil. Selain  parameter-parameter diatas masih banyak  parameter  lainnya  yang  dapat  digunakan  untuk  mengkustomisasi  library  pagination. Adapun yang menjadi favorit penulis adalah

//menempatkan informasi record pada uri ke 3

$config[‘uri_segment’] = 3;

//mengganti tulisan next menjadi Berikutnya >

$config[‘next_link’] = ‘Berikutnya>’;

//mengganti tulisan prev menjadi < sebelumnya

$config[‘prev_link’] = ‘&lt; sebelumnya’;

Adapun langkah-langkah yang harus dilakukan untuk membuat CRUD dan pagination adalah

  1. Membuat Database Dan Table Data Siswa

Untuk memulai, Anda harus memiliki sebuah database. Selain database, Anda harus membuat sebuah tabel siswa. Adapun table yang harus di buat adalah

CREATE TABLE IF NOT EXISTS `siswa` (

`id` bigint(20) NOT NULL AUTO_INCREMENT,

`nama` varchar(50) DEFAULT NULL,

`alamat` varchar(200) NOT NULL,

`jenis_kelamin` char(1) DEFAULT NULL,

`tanggal_lahir` date DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;

Tabel siswa di atas memiliki lima field yaitu id siswa, nama siswa, alamat siswa, jenis kelamin, dan tanggal lahir. Tabel ini digunakan untuk menyimpan data siswa.

  1. Konfigurasi CodeIgniter

Sebelum memulai pengkodean, sebaiknya kita melakukan konfigurasi terhadap tools yang akan digunakan. Ada tiga konfigurasi yang harus disesuaikan, antara lain: config.php, database.php dan router.php. Adapun yang harus di lakukan adalah:

  • config.php – pada file configurasi ini yang perlu diubah adalah base_url. Konfigurasi ini berfungsi untuk menentukan path dasar dari aplikasi. Konfigurasi ini akan digunakan oleh helper form dan url. Contoh perubahan yang dilakukan:

$config[‘base_url’]=’http://localhost/crud’;//ganti   sesuai   path diserver Anda

  • database.php – lakukan konfigurasi di sini supaya aplikasi dapat terkoneksi ke database.

$db[‘default’][‘hostname’]=’localhost’;

$db[‘default’][‘username’]=’root’;

$db[‘default’][‘password’]=”;

$db[‘default’][‘database’]=’crud’;

$db[‘default’][‘dbdriver’]=’mysql’;

  • router.php –  berisi  konfigurasi  mengenai  default  conteroller  dan  routing  rule.  Pada konfigurasi ini yang diubah hanya default controller

$route[‘default_controller’]=”siswa”;

  1. Membuat Model Siswa

Model siswa ini adalah model yang bertugas dan bertanggung jawab untuk melakukan proses- proses yang berhubungan dengan database. Misalnya menyimpan, mengubah, menghapus serta mengambil data dari database.

Biasanya untuk memudahkan kita, pembuatan model mengikuti desain database atau dapat diartikan satu tabel dapat diwakili oleh satu model. Model tersebutlah yang bertanggung jawab pada semua operasi pada tabel tersebut.

Pada aplikasi CRUD ini kita akan membuat sebuah model siswa. Adapun isi dari model siswa adalah

  1. <?php

2.

  1. class Siswa_model extends CI_Model {

4.

  1. private $primary_key=’id’;
  2. private $table_name=’siswa’;

7.

  1. function construct(){
  1. parent::
  2. }

11.

construct();

  1. function get_paged_list($limit=10,$offset=0,
  2. $order_column=”,$order_type=’asc’)
  3. {
  4. if (empty($order_column)|| empty($order_type))
  5. $this->db->order_by($this->primary_key,’asc’);
  6. else
  7. $this->db->order_by($order_column,$order_type);
  8. return $this->db->get($this->table_name,$limit,$offset);
  9. }

21.

  1. function count_all(){
  2. return $this->db->count_all($this->table_name);
  3. }

25.

  1. function get_by_id($id){
  2. $this->db->where($this->primary_key,$id);
  3. return $this->db->get($this->table_name);
  4. }

30.

  1. function save($person){
  2. $this->db->insert($this->table_name,$person);
  3. return $this->db->insert_id();
  4. }

35.

  1. function update($id,$person){
  2. $this->db->where($this->primary_key,$id);
  3. $this->db->update($this->table_name,$person);
  4. }

40.

  1. function delete($id){
  2. $this->db->where($this->primary_key,$id);
  3. $this->db->delete($this->table_name);
  4. }
  5. }
  1. Membuat Controller Dan View Data Siswa

Controller berisi logika untuk melakukan proses-proses yang ada. Adapun proses yang akan ditangani oleh controller ini adalah menampilkan daftar siswa, menambah siswa, mengubah data siswa, menghapus data siswa dan melihat detail siswa.

  1. <?php
  2. class Siswa extends CI_Controller {

3.

  1. private $limit=10;

5.

  1. function  construct()
  2. {

 

  1. parent::

construct();

  1. #load library dan helper yang dibutuhkan
  2. $this->load->library(array(‘table’,’form_validation’));
  3. $this->load->helper(array(‘form’,’url’));
  4. $this->load->model(‘siswa_model’,”,TRUE);
  5. }

14.

  1. function index($offset=0,$order_column=’id’,
  2. $order_type=’asc’)
  3. {
  4. if (empty($offset)) $offset=0;
  5. if (empty($order_column)) $order_column=’id’;
  6. if (empty($order_type)) $order_type=’asc’;
  7. //TODO: check for valid column

22.

  1. // load data siswa
  2. $siswas=$this->siswa_model->get_paged_list($this->limit,
  3. $offset,$order_column,$order_type)->result();

26.

  1. // generate pagination
  2. $this->load->library(‘pagination’);
  3. $config[‘base_url’]= site_url(‘siswa/index/’);
  4. $config[‘total_rows’]=$this->siswa_model->count_all();
  5. $config[‘per_page’]=$this->limit;
  6. $config[‘uri_segment’]=3;
  7. $this->pagination->initialize($config);
  8. $data[‘pagination’]=$this->pagination->create_links();

35.

  1. // generate table data
  2. $this->load->library(‘table’);
  3. $this->table->set_empty(“&nbsp;”);
  4. $new_order=($order_type==’asc’?’desc’:’asc’);
  5. $this->table->set_heading(
  6. ‘No’,
  7. anchor(‘siswa/index/’.$offset.’/nama/’.$new_order,’Nama’),
  8. anchor(‘siswa/index/’.$offset.’/alamat/’.$new_order,’Alamat’),
  9. anchor(‘siswa/index/’.$offset.’/jenis_kelamin/’.$new_order,
  10. ‘Jenis Kelamin’),
  11. anchor(‘siswa/index/’.$offset.’/tanggal_lahir/’.$new_order,
  12. ‘Tanggal Lahir (dd-mm-yyyy)’),
  13. ‘Actions’
  14. );
  15. $i=0+$offset;
  16. foreach ($siswas as $siswa){
  17. $this->table->add_row(++$i,
  18. $siswa->nama,
  19. $siswa->alamat,
  20. strtoupper($siswa->jenis_kelamin)==’M’?
  21. ‘Laki-Laki’:’Perempuan’,
  22. date(‘d-m-Y’,strtotime(
  23. $siswa->tanggal_lahir)),
  24. anchor(‘siswa/view/’.$siswa->id,
  25. ‘view’,array(‘class’=>’view’)).’ ‘.
  26. anchor(‘siswa/update/’.$siswa->id,
  27. ‘update’,array(‘class’=>’update’)).’ ‘.
  28. anchor(‘siswa/delete/’.$siswa->id,
  29. ‘delete’,array(‘class’=>’delete’,
  30. ‘onclick’=>”return confirm(
  31. ‘Apakah Anda yakin ingin menghapus
  32. data siswa?’)”))
  33. );
  34. }
  35. $data[‘table’]=$this->table->generate();

71.

  1. if ($this->uri->segment(3)==’delete_success’)
  2. $data[‘message’]=’Data berhasil dihapus’;
  3. else if ($this->uri->segment(3)==’add_success’)
  4. $data[‘message’]=’Data berhasil ditambah’;
  5. else
  6. $data[‘message’]=”;
  7. // load view
  8. $this->load->view(‘siswaList’,$data);
  9. }

81.

82.

  1. function add(){
  2. // set common properties
  3. $data[‘title’]=’Tambah siswa baru’;
  4. $data[‘action’]= site_url(‘siswa/add’);
  5. $data[‘link_back’]= anchor(‘siswa/index/’,
  6. ‘Back to list of siswas’,array(‘class’=>’back’));

89.

  1. $this->_set_rules();

91.

  1. // run validation
  2. if ($this->form_validation->run()=== FALSE){
  3. $data[‘message’]=”;
  4. // set common properties
  5. $data[‘title’]=’Add new siswa’;
  6. $data[‘message’]=”;
  7. $data[‘siswa’][‘id’]=”;
  8. $data[‘siswa’][‘nama’]=”;
  9. $data[‘siswa’][‘alamat’]=”;
  10. $data[‘siswa’][‘jenis_kelamin’]=”;
  11. $data[‘siswa’][‘tanggal_lahir’]=”;
  12. $data[‘link_back’]= anchor(‘siswa/index/’,
  13. ‘Lihat Daftar Siswa’,array(‘class’=>’back’));

105.

  1. $this->load->view(‘siswaEdit’,$data);

107.

  1. } else {
  2. // save data
  3. $siswa= array(‘nama’=>$this->input->post(‘nama’),
  4. ‘alamat’=>$this->input->post(‘alamat’),
  5. ‘jenis_kelamin’=>$this->input->post(‘jenis_kelamin’),
  6. ‘tanggal_lahir’=> date(‘Y-m-d’,
  7. strtotime($this->input->post(‘tanggal_lahir’))));
  8. $id=$this->siswa_model->save($siswa);

116.

  1. // set form input nama=”id”
  2. $this->validation->id =$id;

119.

  1. redirect(‘siswa/index/add_success’);
  2. }
  3. }

123.

  1. function view($id){
  2. // set common properties
  3. $data[‘title’]=’siswa Details’;
  4. $data[‘link_back’]= anchor(‘siswa/index/’,
  5. ‘Lihat daftar siswas’,array(‘class’=>’back’));

129.

  1. // get siswa details
  2. $data[‘siswa’]=$this->siswa_model->get_by_id($id)->row();

132.

  1. // load view
  2. $this->load->view(‘siswaView’,$data);
  3. }

136.

  1. function update($id){
  2. // set common properties
  3. $data[‘title’]=’Update siswa’;
  4. $this->load->library(‘form_validation’);
  5. // set validation properties
  6. $this->_set_rules();
  7. $data[‘action’]=(‘siswa/update/’.$id);

144.

  1. // run validation
  2. if ($this->form_validation->run()=== FALSE){

147.

  1. $data[‘message’]=”;
  2. $data[‘siswa’]=$this->siswa_model->get_by_id($id)>row_array();
  3. $_POST[‘jenis_kelamin’]=
  4. strtoupper($data[‘siswa’][‘jenis_kelamin’]);
  5. $data[‘siswa’][‘tanggal_lahir’]= date(‘d-m-Y’,
  6. strtotime($data[‘siswa’][‘tanggal_lahir’]));

154.

  1. // set common properties
  2. $data[‘title’]=’Update siswa’;
  3. $data[‘message’]=”;

158.

  1. } else {
  2. // save data
  3. $id=$this->input->post(‘id’);
  4. $siswa= array(‘nama’=>$this->input->post(‘nama’),
  5. ‘alamat’=>$this->input->post(‘alamat’),
  6. ‘jenis_kelamin’=>$this->input->post(‘jenis_kelamin’),
  7. ‘tanggal_lahir’=> date(‘Y-m-d’,
  8. strtotime($this->input->post(‘tanggal_lahir’))));
  9. $this->siswa_model->update($id,$siswa);
  10. $data[‘siswa’]=$this->siswa_model->get_by_id($id)-

>row_array();

  1. // set user message
  2. $data[‘message’]=’update siswa success’;
  3. }
  4. $data[‘link_back’]= anchor(‘siswa/index/’,
  5. ‘Lihat daftar siswa’,array(‘class’=>’back’));
  6. // load view
  7. $this->load->view(‘siswaEdit’,$data);
  8. }

177.

  1. function delete($id){
  2. // delete siswa
  3. $this->siswa_model->delete($id);
  4. // redirect to siswa list page
  5. redirect(‘siswa/index/delete_success’,’refresh’);
  6. }

184.

  1. // validation rules
  2. function _set_rules(){

187.

  1. $this->form_validation->set_rules(‘nama’,’Nama’,
  2. ‘required|trim’);
  3. $this->form_validation->set_rules(‘jenis_kelamin’,’Password’,
  4. ‘required’);
  5. $this->form_validation->set_rules(‘alamat’,’Alamat’,
  6. ‘required|callback_valid_date’);
  7. $this->form_validation->set_rules(‘tanggal_lahir’,’Tanggal
  8. Lahir’,’required’);

196.

  1. }

198.

  1. // date_validation callback
  2. function valid_date($str)
  3. {
  4. if(!preg_match(‘/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/’,$str))
  5. {
  6. $this->form_validation->set_message(‘valid_date’,
  7. ‘date format is not valid. yyyy-mm-dd’);
  8. return false;
  9. }
  10. else
  11. {
  12. return true;
  13. }
  14. }
  15. }

Perhatikan  baris  ke-15  pada  fungsi  index($offset = 0, $order_column = ‘id’,

$order_type = ‘asc’). Pada fungsi tersebut ada 3 parameter yang bersifat optional yang dapat diberikan melalui URI. Parameter $offset berfungsi untuk menentukan record pertama yang  akan  ditampilkan,  $order_column berfungsi  untuk  menentukan  field  apa  yang  akan digunakan untuk mengurutkan data siswa dan $order_type berfungsi untuk menentukan jenis urutan (descending atau ascending). Untuk mendapatkan data yang sesuai dengan persyaratan (pengurutan dan pagination) maka dipanggil get_paged_list (baris 24). Setelah data siswa didapatkan maka akan digunakan library table untuk menampilkan data dalam bentuk tabel seperti

tampilan di bawah ini (baris 38-70).

Untuk mendapatkan tampilan seperti diatas maka perlu dibuat sebuah view seperti berikut ini. View ini disimpan dalam sebuah file bernama siswaList.php

  1. 1. <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 0 Transitional//EN”
  2. 2. “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
  3. 3. <htmlxmlns=“http://www.w3.org/1999/xhtml”>
  4. 4. <head>
  5. 5. <metahttp-equiv=”Content-Type”content=”text/html; charset=iso-8859-1″/>
  6. 6. <title>SIMPLE CRUD APPLICATION</title>
  7. 7. <linkhref=”<?php echo base_url();?>style/style.css”
  8. 8. rel=”stylesheet”type=”text/css”/>
  9. 9. </head>
  10. 10. <body>
  11. 11.
  12. 12.

    Contoh Insert Update dan delete

  13. 13.
  14. 14.
  15. 15.<br/>
  16. 16. <?php echo anchor(‘siswa/add/’,
  17. 17. ‘Tambah Siswa baru’,array(‘class’=>’add’));?>
  18. 18. </div>
  19. 19. </body>
  20. 20. </html>

Selain untuk menampilkan data, controller tadi memiliki fungsi ubah dan tambah data siswa. Kedua fungsi tersebut pada intinya sama. Perbedaannya adalah action  atau fungsi model yang dipanggil dan pemanggilan record yang akan di edit. Perhatikan fungsi add pada baris 82. Pada fungsi  add  tersebut  dilakukan  pemanggilan  terhadap  fungsi  $this->_set_rules(); fungsi tersebut  digunakan untuk mengeset  validation rule.  Jika  inputan  yang  dimasukkan  oleh  user sesuai dengan rule validasi maka akan dipanggil fungsi $this->siswa_model->save untuk menyimpan data tersebut. Adapun view yang digunakan adalah

  1. 1. <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 0 Transitional//EN”
  2. 2. “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
  3. 3. <htmlxmlns=“http://www.w3.org/1999/xhtml”>
  4. 4. <head>
  5. 5. <metahttp-equiv=”Content-Type”content=”text/html; charset=iso-8859-1″/>
  6. 6. <title>SIMPLE CRUD APPLICATION</title>
  7. 7. <linkhref=”<?php echo base_url();?>style/style.css”
  8. 8. rel=”stylesheet”type=”text/css”/>
  9. 9. </head>
  10. 10. <body>
  11. 11.
  12. 12.

  13. 13.
  14. 14.
  15. 15.
  16. 16.
  17. 17.
  18. 18.
  19. 19. ID
  20. 20.
  21. 21. value=””/>
  22. 22.
  23. 23. (isset($siswa[‘id’]))?$siswa[‘id’]:”;?>”/>
  24. 24.
  25. 25.
  26. 26. nama*
  27. 27.
  28. 28. (set_value(‘nama’))?set_value(‘nama’):$siswa[‘nama’];?>”/>
  29. 29.
  30. 30.
  31. 31.
  32. 32. Alamat
  33. 33.
  34. 34. set_value(‘alamat’)?set_value(‘alamat’):$siswa[‘alamat’];?>”/>
  35. 35.
  36. 36.
  37. 37.
  38. 38. jenis_kelamin*
  39. 39.
  40. 40. set_radio(‘jenis_kelamin’,’M’, TRUE);?>/> Laki-Laki
  41. 41.
  42. 42. set_radio(‘jenis_kelamin’,’F’);?>/> Perempuan
  43. 43.
  44. 44.
  45. 45.
  46. 46. Date of birth (dd-mm-yyyy)
  47. 47. style=”color:red;”>*
  48. 48.
  49. 49. value=”
  50. 50. set_value(‘tanggal_lahir’):$siswa[‘tanggal_lahir’];?>”/>
  1. 51.
  2. 52.
  3. 53.
  4. 54. 
  5. 55.
  6. 56.
  7. 57.
  8. 58.
  9. 59. </form>
  10. 60. <br/>
  11. 61. <?php echo $link_back;?>
  12. 62. </div>
  13. 63. </body>
  14. 64. </html>

View di atas juga digunakan oleh fungsi edit data siswa. Untuk melakukan penyimpanan maka perlu dipanggil fungsi $this->siswa_model->update($id,$siswa); pada fungsi tersebut perlu menyertakan id siswa serta data siswa yang telah terupdate.

Selain tambah dan ubah, ada juga fungsi hapus dan melihat detail siswa. Untuk menghapus siswa hanya dibutuhkan id siswa yang ingin dihapus. Sedangkan untuk melihat detail data siswa hal yang perlu dilakukan adalah memanggil data siswa berdasarkan id siswa kemudian ditampilkan ke dalam view berikut ini:

  1. 1. <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
  2. 2. <htmlxmlns=“http://www.w3.org/1999/xhtml”>
  3. 3. <head>
  4. 4. <meta http-equiv=”Content-Type” content=”text/html; charset=iso-8859-1″/>
  5. 5. <title>SIMPLE CRUD APPLICATION</title>
  6. 6. <link href=”<?php echo base_url();?>style/style.css” rel=”stylesheet”
  7. 7. type=”text/css”/>
  8. 8. </head>
  9. 9. <body>
  10. 10.
  11. 11.

  12. 12.
  13. 13.
  14. 14.
  15. 15.
    ID
  16. 16.id;?>
  17. 17.
  18. 18.
  19. 19.
    Name
  20. 20.name;?>
  21. 21.
  22. 22.
  23. 23.
    Alamat
  24. 24.alamat;?>
  25. 25.
  26. 26.
  27. 27.
    Jenis Kelamin
  28. 28.jenis_kelamin)==’M’?
  29. 29. ‘Laki-laki’:’Perempuan’;?>
  30. 30.
  31. 31.
  32. 32.
    Tanggal Lahir (dd-mm-yyyy)
  33. 33.
  34. 34. $siswa->tanggal_lahir));?>
  35. 35.
  36. 36.
  37. 37.
  38. 38. <br/>
  39. 39. <?php echo $link_back;?>
  40. 40. </div>
  41. 41. </body>
  42. 42. </html>

Sebelum melakukan delete perlu dilakukan konfirmasi untuk mencegah kesalahan user dalam menekan link action.

One Comment

  • find latestkeralanews.com

    Please let me know if you’re looking for a article author for your weblog. You have some really good articles and I feel I would be a good asset. If you ever want to take some of the load off, I’d absolutely love to write some content for your blog in exchange for a link back to mine. Please blast me an e-mail if interested. Thanks!

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

%d blogger menyukai ini: