9. Kasus 2. CRUD dan Pagination Database

Setelah mengetahui cara menggu

nakan 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 linklink 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

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.

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&#8217;;//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”;


 

 

Membuat Model Siswa

Model siswa ini adalah model yang bertugas dan bertanggung jawab untuk melakukan prosesproses 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.
3. class Siswa_model extends CI_Model {
4.
5. private $primary_key=’id’;
6. private $table_name=’siswa’;
7.
8. function __construct(){
9.  parent::__construct();
10. }
11.
12. function get_paged_list($limit=10,$offset=0,
13. $order_column=”,$order_type=’asc’)
14. {
15.  if (empty($order_column)|| empty($order_type))
16.  $this->db->order_by($this->primary_key,’asc’);
17.  else
18.  $this->db->order_by($order_column,$order_type);
19.  return $this->db->get($this->table_name,$limit,$offset);
20. }
21.
22. function count_all(){
23.  return $this->db->count_all($this->table_name);
24. }
25.
26. function get_by_id($id){
27.  $this->db->where($this->primary_key,$id);
28.  return $this->db->get($this->table_name);
29. }
30.
31. function save($person){
32.  $this->db->insert($this->table_name,$person);
33.  return $this->db->insert_id();
34. }
35.
36. function update($id,$person){
37.  $this->db->where($this->primary_key,$id);
38.  $this->db->update($this->table_name,$person);
39. }
40.

41. function delete($id){
42.  $this->db->where($this->primary_key,$id);
43.  $this->db->delete($this->table_name);
44. }
45. }


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.
4. private $limit=10;
5.
6. function __construct()
7. {
8.  parent::__construct();
9.  #load library dan helper yang dibutuhkan
10.  $this->load->library(array(‘table’,’form_validation’));
11.  $this->load->helper(array(‘form’,’url’));
12.  $this->load->model(‘siswa_model’,”,TRUE);
13. }
14.
15. function index($offset=0,$order_column=’id’,
16. $order_type=’asc’)
17. {
18.  if (empty($offset)) $offset=0;
19.  if (empty($order_column)) $order_column=’id’;
20.  if (empty($order_type)) $order_type=’asc’;
21.  //TODO: check for valid column
22.
23.  // load data siswa
24.  $siswas=$this->siswa_model->get_paged_list($this->limit,
25.  $offset,$order_column, $order_type)->result();
26.
27.  // generate pagination
28.  $this->load->library(‘pagination’);
29.  $config[‘base_url’]= site_url(‘siswa/index/’);
30.  $config[‘total_rows’]=$this->siswa_model->count_all();
31.  $config[‘per_page’]=$this->limit;
32.  $config[‘uri_segment’]=3;
33.  $this->pagination->initialize($config);
34.  $data[‘pagination’]=$this->pagination->create_links();
35.
36.  // generate table data
37.  $this->load->library(‘table’);
38.  $this->table->set_empty(“&nbsp;”);
39.  $new_order=($order_type==’asc’?’desc’:’asc’);
40.  $this->table->set_heading(
41.  ‘No’,
42.  anchor(‘siswa/index/’.$offset.’/nama/’.$new_order,’Nama’),
43.  anchor(‘siswa/index/’.$offset.’/alamat/’.$new_order,’Alamat’),

44.  anchor(‘siswa/index/’.$offset.’/jenis_kelamin/’.$new_order,
45.  ‘Jenis Kelamin’),
46.  anchor(‘siswa/index/’.$offset.’/tanggal_lahir/’.$new_order,
47.  ‘Tanggal Lahir (dd-mm-yyyy)’),
48.  ‘Actions’
49.  );
50.  $i=0+$offset;
51.  foreach ($siswas as $siswa){
52.    $this->table->add_row(++$i,
53.    $siswa->nama,
54.    $siswa->alamat,
55.    strtoupper($siswa->jenis_kelamin)==’M’?
56.    ‘Laki-Laki’:’Perempuan’,
57.    date(‘d-m-Y’,strtotime(
58.    $siswa->tanggal_lahir)),
59.    anchor(‘siswa/view/’.$siswa->id,
60.    ‘view’,array(‘class’=>’view’)).’ ‘.
61.    anchor(‘siswa/update/’.$siswa->id,
62.    ‘update’,array(‘class’=>’update’)).’ ‘.
63.    anchor(‘siswa/delete/’.$siswa->id,
64.    ‘delete’,array(‘class’=>’delete’,
65.    ‘onclick’=>”return confirm(
66.    ‘Apakah Anda yakin ingin menghapus
67.    data siswa?’)”))
68.    );
69.  }
70.  $data[‘table’]=$this->table->generate();
71.
72.  if ($this->uri->segment(3)==’delete_success’)
73.    $data[‘message’]=’Data berhasil dihapus’;
74.  else if ($this->uri->segment(3)==’add_success’)
75.    $data[‘message’]=’Data berhasil ditambah’;
76.  else
77.    $data[‘message’]=”;
78.  // load view
79.  $this->load->view(‘siswaList’,$data);
80. }
81.
82.
83. function add(){
84.  // set common properties
85.  $data[‘title’]=’Tambah siswa baru’;
86.  $data[‘action’]= site_url(‘siswa/add’);
87.  $data[‘link_back’]= anchor(‘siswa/index/’,
88.  ‘Back to list of siswas’,array(‘class’=>’back’));
89.
90.  $this->_set_rules();
91.
92.  // run validation
93.  if ($this->form_validation->run()=== FALSE){
94.    $data[‘message’]=”;
95.    // set common properties
96.    $data[‘title’]=’Add new siswa’;
97.    $data[‘message’]=”;
98.    $data[‘siswa’][‘id’]=”;
99.    $data[‘siswa’][‘nama’]=”;
100.    $data[‘siswa’][‘alamat’]=”;

101.    $data[‘siswa’][‘jenis_kelamin’]=”;
102.    $data[‘siswa’][‘tanggal_lahir’]=”;
103.    $data[‘link_back’]= anchor(‘siswa/index/’,
104.    ‘Lihat Daftar Siswa’,array(‘class’=>’back’));
105.
106.    $this->load->view(‘siswaEdit’,$data);
107.
108.  } else {
109.    // save data
110.    $siswa= array(‘nama’=>$this->input->post(‘nama’),
111.    ‘alamat’=>$this->input->post(‘alamat’),
112.    ‘jenis_kelamin’=>$this->input->post(‘jenis_kelamin’),
113.    ‘tanggal_lahir’=> date(‘Y-m-d’,
114.    strtotime($this->input->post(‘tanggal_lahir’))));
115.    $id=$this->siswa_model->save($siswa);
116.
117.    // set form input nama=”id”
118.    $this->validation->id =$id;
119.
120.    redirect(‘siswa/index/add_success’);
121.  }
122. }
123.
124. function view($id){
125.  // set common properties
126.  $data[‘title’]=’siswa Details’;
127.  $data[‘link_back’]= anchor(‘siswa/index/’,
128.  ‘Lihat daftar siswas’,array(‘class’=>’back’));
129.
130.  // get siswa details
131.  $data[‘siswa’]=$this->siswa_model->get_by_id($id)->row();
132.
133.  // load view
134.  $this->load->view(‘siswaView’,$data);
135. }
136.
137. function update($id){
138.  // set common properties
139.  $data[‘title’]=’Update siswa’;
140.  $this->load->library(‘form_validation’);
141.  // set validation properties
142.    $this->_set_rules();
143.    $data[‘action’]=(‘siswa/update/’.$id);
144.
145.    // run validation
146.    if ($this->form_validation->run()=== FALSE){
147.
148.  $data[‘message’]=”;
149.  $data[‘siswa’]=$this->siswa_model->get_by_id($id)>row_array();
150.  $_POST[‘jenis_kelamin’]=
151.  strtoupper($data[‘siswa’][‘jenis_kelamin’]);
152.  $data[‘siswa’][‘tanggal_lahir’]= date(‘d-m-Y’,
153.  strtotime($data[‘siswa’][‘tanggal_lahir’]));
154.
155.  // set common properties
156.  $data[‘title’]=’Update siswa’;
157.  $data[‘message’]=”;

158.
159.  } else {
160.  // save data
161.  $id=$this->input->post(‘id’);
162.  $siswa= array(‘nama’=>$this->input->post(‘nama’),
163.  ‘alamat’=>$this->input->post(‘alamat’),
164.  ‘jenis_kelamin’=>$this->input->post(‘jenis_kelamin’),
165.  ‘tanggal_lahir’=> date(‘Y-m-d’,
166.  strtotime($this->input->post(‘tanggal_lahir’))));
167.  $this->siswa_model->update($id,$siswa);
168.  $data[‘siswa’]=$this->siswa_model->get_by_id($id)-
>row_array();
169.  // set user message
170.  $data[‘message’]=’update siswa success’;
171.  }
172.  $data[‘link_back’]= anchor(‘siswa/index/’,
173.  ‘Lihat daftar siswa’,array(‘class’=>’back’));
174.  // load view
175.  $this->load->view(‘siswaEdit’,$data);
176. }
177.
178. function delete($id){
179.  // delete siswa
180.  $this->siswa_model->delete($id);
181.  // redirect to siswa list page
182.  redirect(‘siswa/index/delete_success’, ‘refresh’);
183. }
184.
185. // validation rules
186. function _set_rules(){
187.
188.  $this->form_validation->set_rules(‘nama’,’Nama’,
189.  ‘required|trim’);
190.  $this->form_validation->set_rules(‘jenis_kelamin’,’Password’,
191.  ‘required’);
192.  $this->form_validation->set_rules(‘alamat’,’Alamat’,
193.  ‘required|callback_valid_date’);
194.  $this->form_validation->set_rules(‘tanggal_lahir’,’Tanggal
195.  Lahir’,’required’);
196.
197. }
198.
199. // date_validation callback
200. function valid_date($str)
201. {
202.  if(!preg_match(‘/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/’,$str))
203.  {
204.    $this->form_validation->set_message(‘valid_date’,
205.    ‘date format is not valid. yyyy-mm-dd’);
206.    return false;
207.  }
208.  else
209.  {
210.    return true;
211.  }
212. }
213. }


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).

18

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


1. <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”
2. “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”&gt;
3. <htmlxmlns=”http://www.w3.org/1999/xhtml”&gt;
4. <head>
5. <metahttp-equiv=”Content-Type”content=”text/html; charset=iso-8859-1″/>
6. <title>SIMPLE CRUD APPLICATION</title>
7. <linkhref=”<?php echo base_url();?>style/style.css”
8. rel=”stylesheet”type=”text/css”/>
9. </head>
10. <body>
11. <divclass=”content”>
12. <h1>Contoh Insert Update dan delete</h1>
13. <divclass=”paging”><?php echo $pagination;?></div>
14. <divclass=”data”><?php echo $table;?></div>
15. <divclass=”paging”><?php echo $pagination;?></div><br/>
16. <?php echo anchor(‘siswa/add/’,
17. ‘Tambah Siswa baru’,array(‘class’=>’add’));?>
18. </div>
19. </body>
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. <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”
2. “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”&gt;
3. <htmlxmlns=”http://www.w3.org/1999/xhtml”&gt;
4. <head>
5. <metahttp-equiv=”Content-Type”content=”text/html; charset=iso-8859-1″/>
6. <title>SIMPLE CRUD APPLICATION</title>
7. <linkhref=”<?php echo base_url();?>style/style.css”
8. rel=”stylesheet”type=”text/css”/>
9. </head>
10. <body>
11. <divclass=”content”>
12. <h1><?php echo $title;?></h1>
13. <?php echo $message;?>
14. <?php echo validation_errors();?>
15. <?php echo form_open($action);?>
16. <divclass=”data”>
17. <table>
18. <tr>
19. <tdwidth=”30%”>ID</td>
20. <td><inputtype=”text”name=”id”disabled=”disable”class=”text”
21. value=”<?php echo (isset($siswa[‘id’]))?$siswa[‘id’]:”;?>”/></td>
22. <inputtype=”hidden”name=”id”value=”<?php echo
23. (isset($siswa[‘id’]))?$siswa[‘id’]:”;?>”/>
24. </tr>
25. <tr>
26. <tdvalign=”top”>nama<spanstyle=”color:red;”>*</span></td>
27. <td><inputtype=”text”name=”nama”class=”text”value=”<?php echo
28. (set_value(‘nama’))?set_value(‘nama’):$siswa[‘nama’];?>”/>
29. <?php echo form_error(‘nama’);?></td>
30. </tr>
31. <tr>
32. <tdvalign=”top”>Alamat</td>
33. <td><inputtype=”text”name=”alamat”class=”text”value=”<?php echo
34. set_value(‘alamat’)?set_value(‘alamat’):$siswa[‘alamat’];?>”/>
35. <?php echo form_error(‘alamat’);?></td>
36. </tr>
37. <tr>
38. <tdvalign=”top”>jenis_kelamin<spanstyle=”color:red;”>*</span></td>
39. <td><inputtype=”radio”name=”jenis_kelamin”value=”M”<?php echo
40. set_radio(‘jenis_kelamin’,’M’, TRUE);?>/> Laki-Laki
41. <inputtype=”radio”name=”jenis_kelamin”value=”F”<?php echo
42. set_radio(‘jenis_kelamin’,’F’);?>/> Perempuan
43. <?php echo form_error(‘jenis_kelamin’);?></td>
44. </tr>
45. <tr>
46. <tdvalign=”top”>Date of birth (dd-mm-yyyy)<span
47. style=”color:red;”>*</span></td>
48. <td><inputtype=”text”name=”tanggal_lahir”class=”text”
49. value=”<?php echo (set_value(‘tanggal_lahir’))?
50. set_value(‘tanggal_lahir’):$siswa[‘tanggal_lahir’];?>”/>

51. <?php echo form_error(‘tanggal_lahir’);?></td>
52. </tr>
53. <tr>
54. <td>&nbsp;</td>
55. <td><inputtype=”submit”value=”Save”/></td>
56. </tr>
57. </table>
58. </div>
59. </form>
60. <br/>
61. <?php echo $link_back;?>
62. </div>
63. </body>
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.

19

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. <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”&gt;
2. <htmlxmlns=”http://www.w3.org/1999/xhtml”&gt;
3. <head>
4. <meta http-equiv=”Content-Type” content=”text/html; charset=iso-8859-1″/>
5. <title>SIMPLE CRUD APPLICATION</title>
6. <link href=”<?php echo base_url();?>style/style.css” rel=”stylesheet”
7. type=”text/css”/>
8. </head>
9. <body>
10. <div class=”content”>
11. <h1><?php echo $title;?></h1>
12. <div class=”data”>
13. <table>
14. <tr>
15. <td width=”30%”>ID</td>
16. <td><?php echo $siswa->id;?></td>
17. </tr>
18. <tr>
19. <td valign=”top”>Name</td>

20. <td><?php echo $siswa->name;?></td>
21. </tr>
22. <tr>
23. <td valign=”top”>Alamat</td>
24. <td><?php echo $siswa->alamat;?></td>
25. </tr>
26. <tr>
27. <td valign=”top”>Jenis Kelamin</td>
28. <td><?php echo ($siswa->jenis_kelamin)==’M’?
29. ‘Laki-laki’:’Perempuan’;?></td>
30. </tr>
31. <tr>
32. <td valign=”top”>Tanggal Lahir (dd-mm-yyyy)</td>
33. <td><?php echo date(‘d-m-Y’,strtotime(
34. $siswa->tanggal_lahir));?></td>
35. </tr>
36. </table>
37. </div>
38. <br/>
39. <?php echo $link_back;?>
40. </div>
41. </body>
42. </html>


19

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

20

Sumber : Buku Framework CodeIgniter

Leave a comment

May 2024
M T W T F S S
 12345
6789101112
13141516171819
20212223242526
2728293031  
terbanyak dipilih
  • None