Konten:
#1. Persiapan
Ajax.
#7. Update data Select Option berhubungan dengan Codeigniter dan Ajax.
1. Codeigniter
2. JQuery
3. Bootstrap (optional)
4. Datatable (optional)
Karana saya akan menggunakan semua list diatas pada tutorial ini.
query berikut:
query berikut:
1
CREATE TABLE product(
2 product_id INT PRIMARY KEY AUTO_INCREMENT,
3 product_name VARCHAR(100),
4 product_price INT,
5 product_category_id INT,
product_subcategory_id INT
6 )ENGINE=INNODB;
7
Jika Anda masih bingung bagaimana membuat database dengan MySQL,
“sub_category”.
Insert beberapa data pada table “category” dengan mengeksekusi query
berikut:
sebanyak 3 records.
sebanyak 9 records.
Jika Anda masih bingung bagaimana meng-insert data pada MySQL, saya
pada MySQL.
berikut:
Select semua kode-nya (CTRL + A) dan copy lalu pastekan di notepad dan
Konfigurasi Codeigniter:
#1. Autoload.php
1 $autoload['libraries'] = array();
2 $autoload['helper'] = array();
Kemudian atur menjadi seperti berikut:
1 $autoload['libraries'] = array('database');
2 $autoload['helper'] = array('url');
#2. Config.php
Buka file config.php yang tedapat pada folder “application/config” dan
1 $config['base_url'] = '';
Kemudian atur menjadi seperti berikut:
1 $config['base_url'] = 'http://localhost/select-ajax/';
Note: jika webserver Anda menggunakan port, maka sertakan juga port
#3. Database.php
1
2 $active_group = 'default';
$query_builder = TRUE;
3
4 $db['default'] = array(
5
'dsn' => '',
6 'hostname' => 'localhost',
7 'username' => '',
8 'password' => '',
9 'database' => '',
'dbdriver' => 'mysqli',
10 'dbprefix' => '',
11 'pconnect' => FALSE,
12 'db_debug' => (ENVIRONMENT !== 'production'),
13 'cache_on' => FALSE,
14 'cachedir' => '',
'char_set' => 'utf8',
15 'dbcollat' => 'utf8_general_ci',
16 'swap_pre' => '',
17 'encrypt' => FALSE,
18 'compress' => FALSE,
'stricton' => FALSE,
19 'failover' => array(),
20 'save_queries' => TRUE
21 );
22
23
24
Kemudian atur menjadi seperti berikut:
1
2
3 $active_group = 'default';
$query_builder = TRUE;
4
5 $db['default'] = array(
6
'dsn' => '',
7 'hostname' => 'localhost',
8 'username' => 'root',
9 'password' => '',
10 'database' => 'pos_db',
'dbdriver' => 'mysqli',
11 'dbprefix' => '',
12 'pconnect' => FALSE,
13 'db_debug' => (ENVIRONMENT !== 'production'),
14 'cache_on' => FALSE,
15 'cachedir' => '',
'char_set' => 'utf8',
16 'dbcollat' => 'utf8_general_ci',
17 'swap_pre' => '',
18 'encrypt' => FALSE,
19 'compress' => FALSE,
'stricton' => FALSE,
20 'failover' => array(),
21 'save_queries' => TRUE
22 );
23
24
“application/models”.
1
2 <?php
3 defined('BASEPATH') OR exit('No direct script access allowed');
4
class Product_model extends CI_Model{
5
6 function get_category(){
7 $query = $this->db->get('category');
8 return $query;
9 }
10
11 function get_sub_category($category_id){
$query = $this->db->get_where('sub_category', array('subcategory_category_i
12 return $query;
13 }
14
15 }
16
#2. Controller
“application/controllers”.
1 <?php
defined('BASEPATH') OR exit('No direct script access allowed');
2
3 class Product extends CI_Controller {
4 function __construct(){
5 parent::__construct();
6 $this->load->model('Product_model','product_model');
7 }
8
function index(){
9 $data['category'] = $this->product_model->get_category()->result();
10 $this->load->view('product_view', $data);
11 }
12
13 function get_sub_category(){
$category_id = $this->input->post('id',TRUE);
14 $data = $this->product_model->get_sub_category($category_id)->result();
15 echo json_encode($data);
16 }
17 }
18
19
20
#3. View
“application/views”.
1 <!DOCTYPE html>
<html>
2
<head>
3 <title>Dynamic Select Option using Codeigniter and Ajax</title>
4 <link href="<?php echo base_url().'assets/css/bootstrap.css'?>" rel="stylesheet
5 </head>
6 <body>
<div class="container">
7
8 <div class="row justify-content-md-center">
9 <div class="col col-lg-6">
10 <h3>Product Form:</h3>
11 <form>
12 <div class="form-group">
<label>Category</label>
13 <select class="form-control" name="category" id="category" requir
14 <option value="">No Selected</option>
15 <?php foreach($category as $row):?>
16 <option value="<?php echo $row->category_id;?>"><?php echo $
<?php endforeach;?>
17 </select>
18 </div>
19 <div class="form-group">
20 <label>Sub Category</label>
21 <select class="form-control" id="sub_category" name="sub_categor
<option>No Selected</option>
22
23 </select>
24 </div>
25 </form>
26 </div>
</div>
27
28 </div>
29 <script type="text/javascript" src="<?php echo base_url().'assets/js/jquery-3.3.
30 <script type="text/javascript" src="<?php echo base_url().'assets/js/bootstrap.j
31 <script type="text/javascript">
32 $(document).ready(function(){
33
$('#category').change(function(){
34 var id=$(this).val();
35 $.ajax({
36 url : "<?php echo site_url('product/get_sub_category');?>",
37 method : "POST",
data : {id: id},
38 async : true,
39 dataType : 'json',
40 success: function(data){
41
42 var html = '';
43 var i;
for(i=0; i<data.length; i++){
44 html += '<option
45 value='+data[i].subcategory_id+'>'+data[i].subcategory_name+'</option>';
46 }
47 $('#sub_category').html(html);
48
49 }
});
50 return false;
51 });
52
53 });
54 </script>
</body>
55
</html>
56
57
58
59
60
61
62
63
64
65
#4. Testing
Untuk melakukan pengujian, buka browser Anda dan kunjungi url berikut:
1 http://localhost/select-ajax/index.php/product
Maka, akan tampil seperti gambar berikut:
Pilih salah satu “Category”, maka akan tampil option dari “Sub Category”
yang berhubungan.
Sub Category hanya akan tampil sesuai dengan category yang terpilih
Jika Anda pilih category yang berbeda, maka juga akan tampil option Sub
Itulah konsep dasar dari Select Option berhungan dengan Codeigniter dan
Ajax JQuery.
#1. Controller
“application/controllers”.
1 <?php
2 defined('BASEPATH') OR exit('No direct script access allowed');
3
4 class Product extends CI_Controller {
function __construct(){
5 parent::__construct();
6 $this->load->model('Product_model','product_model');
7 $this->load->library('session');
8 }
9
10 function index(){
11
}
12
13 // add new product
14 function add_new(){
15 $data['category'] = $this->product_model->get_category()->result();
16 $this->load->view('add_product_view', $data);
}
17
18
// get sub category by category_id
19 function get_sub_category(){
20 $category_id = $this->input->post('id',TRUE);
21 $data = $this->product_model->get_sub_category($category_id)->result();
22 echo json_encode($data);
23 }
24
25 //save product to database
function save_product(){
26
$product_name = $this->input->post('product_name',TRUE);
27
$category_id = $this->input->post('category',TRUE);
28 $subcategory_id = $this->input->post('sub_category',TRUE);
29 $product_price = $this->input->post('product_price',TRUE);
30 $this->product_model-
31 >save_product($product_name,$category_id,$subcategory_id,$product_price);
32 $this->session->set_flashdata('msg','<div class="alert alert-success">Produ
33 redirect('product/add_new');
}
34 }
35
36
37
38
#2. Model
“application/models”.
1 <?php
2 defined('BASEPATH') OR exit('No direct script access allowed');
3
class Product_model extends CI_Model{
4
5 function get_category(){
6 $query = $this->db->get('category');
7 return $query;
8 }
9
function get_sub_category($category_id){
10 $query = $this->db->get_where('sub_category', array('subcategory_category_i
11 return $query;
12 }
13
14 function save_product($product_name,$category_id,$subcategory_id,$product_price
15 $data = array(
'product_name' => $product_name,
16 'product_price' => $product_price,
17 'product_category_id' => $category_id,
18 'product_subcategory_id' => $subcategory_id
19 );
20 $this->db->insert('product',$data);
}
21 }
22
23
24
25
#3. View
folder “application/views”.
1 <!DOCTYPE html>
2 <html>
<head>
3 <title>Add New</title>
4 <link href="<?php echo base_url().'assets/css/bootstrap.css'?>" rel="stylesheet
5 </head>
6 <body>
<div class="container">
7
8 <div class="row justify-content-md-center">
9 <div class="col col-lg-6">
10 <h3>Add New Product:</h3>
11 <?php echo $this->session->flashdata('msg');?>
12 <form action="<?php echo site_url('product/save_product');?>" method="p
13
<div class="form-group">
14 <label>Product Name</label>
15 <input type="text" class="form-control" name="product_name" place
16 </div>
17
18 <div class="form-group">
<label>Category</label>
19
<select class="form-control" name="category" id="category" requir
20 <option value="">No Selected</option>
21 <?php foreach($category as $row):?>
22 <option value="<?php echo $row->category_id;?>"><?php echo $
23 <?php endforeach;?>
</select>
24 </div>
25
26 <div class="form-group">
27 <label>Sub Category</label>
28 <select class="form-control" id="sub_category" name="sub_categor
29 <option value="">No Selected</option>
30
</select>
31 </div>
32
33 <div class="form-group">
34 <label>Product Price</label>
35 <input type="number" class="form-control" name="product_price" pl
</div>
36
37 <button class="btn btn-success" type="submit">Save Product</button>
38
39 </form>
40 </div>
41 </div>
42
43 </div>
<script type="text/javascript" src="<?php echo base_url().'assets/js/jquery-3.3.
44 <script type="text/javascript" src="<?php echo base_url().'assets/js/bootstrap.j
45 <script type="text/javascript">
46 $(document).ready(function(){
47
48 $('#category').change(function(){
var id=$(this).val();
49 $.ajax({
50 url : "<?php echo site_url('product/get_sub_category');?>",
51 method : "POST",
52 data : {id: id},
53 async : true,
dataType : 'json',
54 success: function(data){
55
56 var html = '';
57 var i;
58 for(i=0; i<data.length; i++){
59 html += '<option value='+data[i].subcategory_id+'>'+dat
}
60 $('#sub_category').html(html);
61
62 }
63 });
64 return false;
});
65
66
});
67 </script>
68 </body>
69 </html>
70
71
72
73
74
75
76
77
78
79
80
81
#4. Testing
Untuk melakukan pengujian, buka browser Anda dan kunjungi url berikut:
1 http://localhost/select-ajax/index.php/product/add_new
Maka, akan tampil seperti gambar berikut:
Kemudian masukan product name, category, sub category, dan product
price.
database.
Jika berjalan dengan baik, maka akan terlihat seperti gambar berikut:
Step #6. Menampilkan data yang telah di
insert ke datatable.
Extract file Datatable yang telah di download sebelumnya kedalam folder
“assets”.
“application/controllers”.
1
2 <?php
3 defined('BASEPATH') OR exit('No direct script access allowed');
4
5 class Product extends CI_Controller {
function __construct(){
6 parent::__construct();
7 $this->load->model('Product_model','product_model');
8 $this->load->library('session');
9 }
10
11 function index(){
$data['products'] = $this->product_model->get_products();
12 $this->load->view('product_list_view',$data);
13 }
14
15 // add new product
16 function add_new(){
17 $data['category'] = $this->product_model->get_category()->result();
$this->load->view('add_product_view', $data);
18 }
19
20 // get sub category by category_id
21 function get_sub_category(){
22 $category_id = $this->input->post('id',TRUE);
$data = $this->product_model->get_sub_category($category_id)->result();
23 echo json_encode($data);
24 }
25
26 //save product to database
27 function save_product(){
28 $product_name = $this->input->post('product_name',TRUE);
29 $category_id = $this->input->post('category',TRUE);
30 $subcategory_id = $this->input->post('sub_category',TRUE);
31 $product_price = $this->input->post('product_price',TRUE);
$this->product_model-
32 >save_product($product_name,$category_id,$subcategory_id,$product_price);
33 $this->session->set_flashdata('msg','<div class="alert alert-success">Produ
34 redirect('product');
35 }
36 }
37
38
39
#2. Model
“application/models”.
1
2 <?php
3 defined('BASEPATH') OR exit('No direct script access allowed');
4
5 class Product_model extends CI_Model{
6
7 function get_category(){
8 $query = $this->db->get('category');
return $query;
9 }
10
11 function get_sub_category($category_id){
12 $query = $this->db->get_where('sub_category', array('subcategory_category_i
13 return $query;
14 }
15
function save_product($product_name,$category_id,$subcategory_id,$product_price
16 $data = array(
17 'product_name' => $product_name,
18 'product_price' => $product_price,
19 'product_category_id' => $category_id,
'product_subcategory_id' => $subcategory_id
20 );
21 $this->db->insert('product',$data);
22 }
23
24 function get_products(){
25 $this->db->select('product_id,product_name,product_price,category_name,subc
$this->db->from('product');
26 $this->db->join('category','product_category_id = category_id','left');
27 $this->db->join('sub_category','product_subcategory_id = subcategory_id','l
28 $query = $this->db->get();
29 return $query;
}
30
}
31
32
33
34
#3. View
“application/views”.
1 <!DOCTYPE html>
2 <html>
3 <head>
<title>Product List</title>
4 <link href="<?php echo base_url().'assets/css/bootstrap.css'?>" rel="stylesheet
5 <link href="<?php echo base_url().'assets/css/datatables.css'?>" rel="styleshee
6 </head>
7 <body>
8 <div class="container">
9
<div class="row justify-content-md-center">
10 <div class="col col-lg-8">
11 <h3>Product List</h3>
12 <?php echo $this->session->flashdata('msg');?>
13 <a href="<?php echo site_url('product/add_new');?>" class="btn btn-succ
14 Product</a><hr/>
<table class="table table-striped" id="mytable" style="font-size: 14px;"
15 <thead>
16 <tr>
17 <th>No</th>
18 <th>Product Name</th>
<th>Category</th>
19 <th>Sub Category</th>
20 <th>Price</th>
21 <th>Action</th>
22 </tr>
23 </thead>
<tbody>
24 <?php
25 $no = 0;
26 foreach ($products->result() as $row):
27 $no++;
?>
28 <tr>
29 <td><?php echo $no;?></td>
30 <td><?php echo $row->product_name;?></td>
31 <td><?php echo $row->category_name;?></td>
32 <td><?php echo $row->subcategory_name;?></td>
33 <td><?php echo number_format($row->product_price);?></td>
34 <td>
<a href="" class="btn btn-sm btn-info">Edit</a>
35 <a href="" class="btn btn-sm btn-danger">Delete</a>
36 </td>
37 </tr>
38 <?php endforeach;?>
</tbody>
39 </table>
40 </div>
41 </div>
42
43 </div>
44 <script type="text/javascript" src="<?php echo base_url().'assets/js/jquery-3.3.
<script type="text/javascript" src="<?php echo base_url().'assets/js/bootstrap.j
45 <script type="text/javascript" src="<?php echo base_url().'assets/js/datatables.
46 <script type="text/javascript">
47 $(document).ready(function(){
48 $('#mytable').DataTable();
});
49 </script>
50 </body>
51 </html>
52
53
54
55
56
57
58
59
60
#4. Testing
Untuk melakukan pengujian, buka browser Anda dan kunjungi url berikut:
1 http://localhost/select-ajax/index.php/product
Maka, akan tampil seperti gambar berikut:
Klik tombol “Add New Product” untuk menambahkan product baru.
Masukan semua input, kemudian klik tombol “Save Product”.
folder “application/views”.
#1. Controller
“application/controllers”.
<?php
1 defined('BASEPATH') OR exit('No direct script access allowed');
2
3 class Product extends CI_Controller {
4 function __construct(){
5 parent::__construct();
$this->load->model('Product_model','product_model');
6 $this->load->library('session');
7 }
8
9 function index(){
10 $data['products'] = $this->product_model->get_products();
11 $this->load->view('product_list_view',$data);
}
12
13 // add new product
14 function add_new(){
15 $data['category'] = $this->product_model->get_category()->result();
16 $this->load->view('add_product_view', $data);
}
17
18
// get sub category by category_id
19 function get_sub_category(){
20 $category_id = $this->input->post('id',TRUE);
21 $data = $this->product_model->get_sub_category($category_id)->result();
22 echo json_encode($data);
}
23
24 //save product to database
25 function save_product(){
26 $product_name = $this->input->post('product_name',TRUE);
27 $category_id = $this->input->post('category',TRUE);
28 $subcategory_id = $this->input->post('sub_category',TRUE);
29 $product_price = $this->input->post('product_price',TRUE);
$this->product_model->save_product($product_name,$category_id,$subcategory_
30 $this->session->set_flashdata('msg','<div class="alert alert-success">Produ
31 redirect('product');
32 }
33
34 function get_edit(){
35 $product_id = $this->uri->segment(3);
$data['product_id'] = $product_id;
36 $data['category'] = $this->product_model->get_category()->result();
37 $get_data = $this->product_model->get_product_by_id($product_id);
38 if($get_data->num_rows() > 0){
39 $row = $get_data->row_array();
$data['sub_category_id'] = $row['product_subcategory_id'];
40 }
41 $this->load->view('edit_product_view',$data);
42 }
43
44 function get_data_edit(){
45 $product_id = $this->input->post('product_id',TRUE);
$data = $this->product_model->get_product_by_id($product_id)->result();
46 echo json_encode($data);
47 }
48
49 //update product to database
50 function update_product(){
51 $product_id = $this->input->post('product_id',TRUE);
52 $product_name = $this->input->post('product_name',TRUE);
53 $category_id = $this->input->post('category',TRUE);
54 $subcategory_id = $this->input->post('sub_category',TRUE);
55 $product_price = $this->input->post('product_price',TRUE);
$this->product_model-
56 >update_product($product_id,$product_name,$category_id,$subcategory_id,$product_pri
57 $this->session->set_flashdata('msg','<div class="alert alert-success">Produ
58 redirect('product');
59 }
60 }
61
62
63
64
65
66
67
68
69
#2. Model
Buka model “Product_model.php” yang tedapat pada folder
“application/models”.
1 <?php
2 defined('BASEPATH') OR exit('No direct script access allowed');
3
class Product_model extends CI_Model{
4
5 function get_category(){
6 $query = $this->db->get('category');
7 return $query;
8 }
9
10 function get_sub_category($category_id){
$query = $this->db->get_where('sub_category', array('subcategory_category_i
11 return $query;
12 }
13
14 function save_product($product_name,$category_id,$subcategory_id,$product_price
15 $data = array(
'product_name' => $product_name,
16 'product_price' => $product_price,
17 'product_category_id' => $category_id,
18 'product_subcategory_id' => $subcategory_id
19 );
20 $this->db->insert('product',$data);
}
21
22 function get_products(){
23 $this->db->select('product_id,product_name,product_price,category_name,subc
24 $this->db->from('product');
25 $this->db->join('category','product_category_id = category_id','left');
26 $this->db->join('sub_category','product_subcategory_id = subcategory_id','l
$query = $this->db->get();
27 return $query;
28 }
29
30 function get_product_by_id($product_id){
31 $query = $this->db->get_where('product', array('product_id' => $product_id)
return $query;
32 }
33
34 function update_product($product_id,$product_name,$category_id,$subcategory_id,
35 $this->db->set('product_name', $product_name);
36 $this->db->set('product_price', $product_price);
37 $this->db->set('product_category_id', $category_id);
$this->db->set('product_subcategory_id', $subcategory_id);
38 $this->db->where('product_id', $product_id);
39 $this->db->update('product');
40 }
41
42
43 }
44
45
46
47
48
49
50
#3. View
folder “application/views”.
1 <!DOCTYPE html>
2 <html>
3 <head>
<title>Edit Product</title>
4 <link href="<?php echo base_url().'assets/css/bootstrap.css'?>" rel="stylesheet"
5 </head>
6 <body>
7 <div class="container">
8
<div class="row justify-content-md-center">
9
<div class="col col-lg-6">
10 <h3>Edit Product:</h3>
11
12 <form action="<?php echo site_url('product/update_product');?>" method="p
13
14 <div class="form-group">
15 <label>Product Name</label>
<input type="text" class="form-control" name="product_name" placeho
16 </div>
17
18 <div class="form-group">
19 <label>Category</label>
20 <select class="form-control category" name="category" required>
21 <option value="">No Selected</option>
<?php foreach($category as $row):?>
22 <option value="<?php echo $row->category_id;?>"><?php echo $ro
23 <?php endforeach;?>
24 </select>
25 </div>
26
27 <div class="form-group">
28 <label>Sub Category</label>
<select class="form-control sub_category" name="sub_category" requ
29 <option value="">No Selected</option>
30
31 </select>
32 </div>
33
34 <div class="form-group">
<label>Product Price</label>
35 <input type="number" class="form-control" name="product_price" plac
36 </div>
37
38 <input type="hidden" name="product_id" value="<?php echo $product_id?>
39 <button class="btn btn-success" type="submit">Update Product</button>
40
41 </form>
</div>
42 </div>
43
44 </div>
45 <script type="text/javascript" src="<?php echo base_url().'assets/js/jquery-3.3.1.
46 <script type="text/javascript" src="<?php echo base_url().'assets/js/bootstrap.js'
<script type="text/javascript">
47 $(document).ready(function(){
48 //call function get data edit
49 get_data_edit();
50
51 $('.category').change(function(){
52 var id=$(this).val();
var subcategory_id = "<?php echo $sub_category_id;?>";
53 $.ajax({
54 url : "<?php echo site_url('product/get_sub_category');?>",
55 method : "POST",
56 data : {id: id},
57 async : true,
dataType : 'json',
58 success: function(data){
59
60 $('select[name="sub_category"]').empty();
61
62 $.each(data, function(key, value) {
63 if(subcategory_id==value.subcategory_id){
64 +'</option>').trigger('change');$('select[name="sub_category"]').append('<option valu
65 }else{
66 $('select[name="sub_category"]').append('<option valu
67 }
68 });
69
}
70 });
71 return false;
72 });
73
74 //load data for edit
function get_data_edit(){
75 var product_id = $('[name="product_id"]').val();
76 $.ajax({
77 url : "<?php echo site_url('product/get_data_edit');?>",
method : "POST",
78 data :{product_id :product_id},
79 async : true,
80 dataType : 'json',
81 success : function(data){
$.each(data, function(i, item){
82 $('[name="product_name"]').val(data[i].product_name);
83 $('[name="category"]').val(data[i].product_category_id).t
84 $('[name="sub_category"]').val(data[i].product_subcategor
85 $('[name="product_price"]').val(data[i].product_price);
86 });
}
87
88 });
89 }
90
91 });
92 </script>
93 </body>
</html>
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#4. Testing
Untuk melakukan pengujian, buka browser Anda dan kunjungi url berikut:
1 http://localhost/select-ajax/index.php/product
Maka, akan tampil seperti gambar berikut:
Kemudian klik tombol edit, maka akan tampil form edit seperti gambar
berikut:
Edit data yang ingin di edit, kemudian klik tombol “Update Product”.
Jika berjalan dengan baik, maka akan terlihat seperti gambar berikut:
Step #8. Delete data ke database.
Pada step ini, saya akan sharing bagaimana membuat delete data ke
database.
folder “application/views”.
#1. Controller
“application/controllers”.
1 function delete(){
2 $product_id = $this->uri->segment(3);
$this->product_model->delete_product($product_id);
3 $this->session->set_flashdata('msg','<div class="alert alert-success">Product
4 Deleted</div>');
5 redirect('product');
6 }
#2. Model
“application/models”.
1 function delete_product($product_id){
2 $this->db->delete('product', array('product_id' => $product_id));
3 }
#3. Testing
Untuk melakukan pengujian, buka browser Anda dan kunjungi url berikut:
1 http://localhost/select-ajax/index.php/product
Kemudian klik salah satu tombol “Delete” untuk menghapus data.
Jika berjalan dengan baik, maka akan terlihat seperti gambar berikut:
Kesimpulan:
Tutorial kali ini adalah tentang bagaimana membuat select option