Tugas 5 PBKK

Tugas 5 PBKK

Pada pertemuan kali ini kita akan melanjutkan framework CodeIgniter kita sebelumnya dengan menambahkan CRUD, yaitu Create, Read, Update, dan Delete. Untuk pengerjaannya bisa kita lihat tata caranya dibawah ini :


  1. Membuat Database
    Pertama-tama kita harus membuat database terlebih dahulu di localhost/phpmyadmin dengan nama yang kita inginkan yaitu novatrader
    Setelah itu kita juga perlu membuat table product yang nantinya akan berguna untuk menyimpan data-data dari product tersebut. Untuk lebih mudahnya lihat script SQL dibawah ini :
    CREATE TABLE `products` (
      `product_id` varchar(64) NOT NULL,
      `name` varchar(255) NOT NULL,
      `price` int(11) NOT NULL,
      `image` varchar(255) NOT NULL DEFAULT 'default.jpg',
      `description` text NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
  2. Konfigurasi Codeigntier
    Lalu kita buka file config/database.php lalu isi seperti script dibawah ini
    $db['default'] = array(
        'dsn'    => '',
        'hostname' => 'localhost',
        'username' => 'root',
        'password' => '',
        'database' => 'novatrader',
        'dbdriver' => 'mysqli',
        'dbprefix' => '',
        'pconnect' => FALSE,
        'db_debug' => (ENVIRONMENT !== 'production'),
        'cache_on' => FALSE,
        'cachedir' => '',
        'char_set' => 'utf8',
        'dbcollat' => 'utf8_general_ci',
        'swap_pre' => '',
        'encrypt' => FALSE,
        'compress' => FALSE,
        'stricton' => FALSE,
        'failover' => array(),
        'save_queries' => TRUE
    );
    
    Setelah itu tambahkan script dibawah ini pada config/autoload.php
    $autoload['libraries'] = array('database', 'session');
    
  3. Membuat Model untuk Tabel
    Pertama-tama buatlah sebuah file bernama Product_model.php pada direktori application/model/ lalu isikan file tersebut dengan script dibawah ini :
    <?php defined('BASEPATH') OR exit('No direct script access allowed');
    
    class Product_model extends CI_Model
    {
        private $_table = "products";
    
        public $product_id;
        public $name;
        public $price;
        public $image = "default.jpg";
        public $description;
    
        public function rules()
        {
            return [
                ['field' => 'name',
                'label' => 'Name',
                'rules' => 'required'],
    
                ['field' => 'price',
                'label' => 'Price',
                'rules' => 'numeric'],
                
                ['field' => 'description',
                'label' => 'Description',
                'rules' => 'required']
            ];
        }
    
        public function getAll()
        {
            return $this->db->get($this->_table)->result();
        }
        
        public function getById($id)
        {
            return $this->db->get_where($this->_table, ["product_id" => $id])->row();
        }
    
        public function save()
        {
            $post = $this->input->post();
            $this->product_id = uniqid();
            $this->name = $post["name"];
            $this->price = $post["price"];
            $this->description = $post["description"];
            return $this->db->insert($this->_table, $this);
        }
    
        public function update()
        {
            $post = $this->input->post();
            $this->product_id = $post["id"];
            $this->name = $post["name"];
            $this->price = $post["price"];
            $this->description = $post["description"];
            return $this->db->update($this->_table, $this, array('product_id' => $post['id']));
        }
    
        public function delete($id)
        {
            return $this->db->delete($this->_table, array("product_id" => $id));
        }
    }
    
  4. Membuat Controller
    Kita juga perlu membuat file bernama Products.php pada direktori application/controllers/admin/ lalu isikan file tersebut dengan script dibawah ini :
    <?php
    
    defined('BASEPATH') OR exit('No direct script access allowed');
    
    class Products extends CI_Controller
    {
        public function __construct()
        {
            parent::__construct();
            $this->load->model("product_model");
            $this->load->library('form_validation');
        }
    
        public function index()
        {
            $data["products"] = $this->product_model->getAll();
            $this->load->view("admin/product/list", $data);
        }
    
        public function add()
        {
            $product = $this->product_model;
            $validation = $this->form_validation;
            $validation->set_rules($product->rules());
    
            if ($validation->run()) {
                $product->save();
                $this->session->set_flashdata('success', 'Berhasil disimpan');
            }
    
            $this->load->view("admin/product/new_form");
        }
    
        public function edit($id = null)
        {
            if (!isset($id)) redirect('admin/products');
           
            $product = $this->product_model;
            $validation = $this->form_validation;
            $validation->set_rules($product->rules());
    
            if ($validation->run()) {
                $product->update();
                $this->session->set_flashdata('success', 'Berhasil disimpan');
            }
    
            $data["product"] = $product->getById($id);
            if (!$data["product"]) show_404();
            
            $this->load->view("admin/product/edit_form", $data);
        }
    
        public function delete($id=null)
        {
            if (!isset($id)) show_404();
            
            if ($this->product_model->delete($id)) {
                redirect(site_url('admin/products'));
            }
        }
    }
    
  5. Membuat View
    Disini kita akan membuat 3 file baru yaitu list.php, new_form.php, dan edit_form.php pada direktori baru bernama product didalam direktori views/admin/
    - list.php
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <?php $this->load->view("admin/_partials/head.php") ?>
    </head>
    
    <body id="page-top">
    
        <?php $this->load->view("admin/_partials/navbar.php") ?>
        <div id="wrapper">
    
            <?php $this->load->view("admin/_partials/sidebar.php") ?>
    
            <div id="content-wrapper">
    
                <div class="container-fluid">
    
                    <?php $this->load->view("admin/_partials/breadcrumb.php") ?>
    
                    <!-- DataTables -->
                    <div class="card mb-3">
                        <div class="card-header">
                            <a href="<?php echo site_url('admin/products/add') ?>"><i class="fas fa-plus"></i> Add New</a>
                        </div>
                        <div class="card-body">
    
                            <div class="table-responsive">
                                <table class="table table-hover" id="dataTable" width="100%" cellspacing="0">
                                    <thead>
                                        <tr>
                                            <th>Name</th>
                                            <th>Price</th>
                                            <th>Photo</th>
                                            <th>Description</th>
                                            <th>Action</th>
                                        </tr>
                                    </thead>
                                    <tbody>
                                        <?php foreach ($products as $product): ?>
                                        <tr>
                                            <td width="150">
                                                <?php echo $product->name ?>
                                            </td>
                                            <td>
                                                <?php echo $product->price ?>
                                            </td>
                                            <td>
                                                <img src="<?php echo base_url('upload/product/'.$product->image) ?>" width="64" />
                                            </td>
                                            <td class="small">
                                                <?php echo substr($product->description, 0, 120) ?>...</td>
                                            <td width="250">
                                                <a href="<?php echo site_url('admin/products/edit/'.$product->product_id) ?>"
                                                 class="btn btn-small"><i class="fas fa-edit"></i> Edit</a>
                                                <a onclick="deleteConfirm('<?php echo site_url('admin/products/delete/'.$product->product_id) ?>')"
                                                 href="#!" class="btn btn-small text-danger"><i class="fas fa-trash"></i> Hapus</a>
                                            </td>
                                        </tr>
                                        <?php endforeach; ?>
    
                                    </tbody>
                                </table>
                            </div>
                        </div>
                    </div>
    
                </div>
                <!-- /.container-fluid -->
    
                <!-- Sticky Footer -->
                <?php $this->load->view("admin/_partials/footer.php") ?>
    
            </div>
            <!-- /.content-wrapper -->
    
        </div>
        <!-- /#wrapper -->
    
    
        <?php $this->load->view("admin/_partials/scrolltop.php") ?>
        <?php $this->load->view("admin/_partials/modal.php") ?>
    
        <?php $this->load->view("admin/_partials/js.php") ?>
    
        <script>
            function deleteConfirm(url){
            $('#btn-delete').attr('href', url);
            $('#deleteModal').modal();
        }
        </script>
    
    </body>
    
    </html>
    - new_form.php
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <?php $this->load->view("admin/_partials/head.php") ?>
    </head>
    
    <body id="page-top">
    
        <?php $this->load->view("admin/_partials/navbar.php") ?>
        <div id="wrapper">
    
            <?php $this->load->view("admin/_partials/sidebar.php") ?>
    
            <div id="content-wrapper">
    
                <div class="container-fluid">
    
                    <?php $this->load->view("admin/_partials/breadcrumb.php") ?>
    
                    <?php if ($this->session->flashdata('success')): ?>
                    <div class="alert alert-success" role="alert">
                        <?php echo $this->session->flashdata('success'); ?>
                    </div>
                    <?php endif; ?>
    
                    <div class="card mb-3">
                        <div class="card-header">
                            <a href="<?php echo site_url('admin/products/') ?>"><i class="fas fa-arrow-left"></i> Back</a>
                        </div>
                        <div class="card-body">
    
                            <form action="<?php echo site_url('admin/products/add') ?>" method="post" enctype="multipart/form-data" >
                                <div class="form-group">
                                    <label for="name">Name*</label>
                                    <input class="form-control <?php echo form_error('name') ? 'is-invalid':'' ?>"
                                     type="text" name="name" placeholder="Product name" />
                                    <div class="invalid-feedback">
                                        <?php echo form_error('name') ?>
                                    </div>
                                </div>
    
                                <div class="form-group">
                                    <label for="price">Price*</label>
                                    <input class="form-control <?php echo form_error('price') ? 'is-invalid':'' ?>"
                                     type="number" name="price" min="0" placeholder="Product price" />
                                    <div class="invalid-feedback">
                                        <?php echo form_error('price') ?>
                                    </div>
                                </div>
    
    
                                <div class="form-group">
                                    <label for="name">Photo</label>
                                    <input class="form-control-file <?php echo form_error('price') ? 'is-invalid':'' ?>"
                                     type="file" name="image" />
                                    <div class="invalid-feedback">
                                        <?php echo form_error('image') ?>
                                    </div>
                                </div>
    
                                <div class="form-group">
                                    <label for="name">Description*</label>
                                    <textarea class="form-control <?php echo form_error('description') ? 'is-invalid':'' ?>"
                                     name="description" placeholder="Product description..."></textarea>
                                    <div class="invalid-feedback">
                                        <?php echo form_error('description') ?>
                                    </div>
                                </div>
    
                                <input class="btn btn-success" type="submit" name="btn" value="Save" />
                            </form>
    
                        </div>
    
                        <div class="card-footer small text-muted">
                            * required fields
                        </div>
    
    
                    </div>
                    <!-- /.container-fluid -->
    
                    <!-- Sticky Footer -->
                    <?php $this->load->view("admin/_partials/footer.php") ?>
    
                </div>
                <!-- /.content-wrapper -->
    
            </div>
            <!-- /#wrapper -->
    
    
            <?php $this->load->view("admin/_partials/scrolltop.php") ?>
    
            <?php $this->load->view("admin/_partials/js.php") ?>
    
    </body>
    
    </html>
    - edit_form.php
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <?php $this->load->view("admin/_partials/head.php") ?>
    </head>
    
    <body id="page-top">
    
        <?php $this->load->view("admin/_partials/navbar.php") ?>
        <div id="wrapper">
    
            <?php $this->load->view("admin/_partials/sidebar.php") ?>
    
            <div id="content-wrapper">
    
                <div class="container-fluid">
    
                    <?php $this->load->view("admin/_partials/breadcrumb.php") ?>
    
                    <?php if ($this->session->flashdata('success')): ?>
                    <div class="alert alert-success" role="alert">
                        <?php echo $this->session->flashdata('success'); ?>
                    </div>
                    <?php endif; ?>
    
                    <!-- Card  -->
                    <div class="card mb-3">
                        <div class="card-header">
    
                            <a href="<?php echo site_url('admin/products/') ?>"><i class="fas fa-arrow-left"></i>
                                Back</a>
                        </div>
                        <div class="card-body">
    
                            <form action="" method="post" enctype="multipart/form-data">
                            <!-- Note: atribut action dikosongkan, artinya action-nya akan diproses 
                                oleh controller tempat vuew ini digunakan. Yakni index.php/admin/products/edit/ID --->
    
                                <input type="hidden" name="id" value="<?php echo $product->product_id?>" />
    
                                <div class="form-group">
                                    <label for="name">Name*</label>
                                    <input class="form-control <?php echo form_error('name') ? 'is-invalid':'' ?>"
                                     type="text" name="name" placeholder="Product name" value="<?php echo $product->name ?>" />
                                    <div class="invalid-feedback">
                                        <?php echo form_error('name') ?>
                                    </div>
                                </div>
    
                                <div class="form-group">
                                    <label for="price">Price</label>
                                    <input class="form-control <?php echo form_error('price') ? 'is-invalid':'' ?>"
                                     type="number" name="price" min="0" placeholder="Product price" value="<?php echo $product->price ?>" />
                                    <div class="invalid-feedback">
                                        <?php echo form_error('price') ?>
                                    </div>
                                </div>
    
    
                                <div class="form-group">
                                    <label for="name">Photo</label>
                                    <input class="form-control-file <?php echo form_error('image') ? 'is-invalid':'' ?>"
                                     type="file" name="image" />
                                    <input type="hidden" name="old_image" value="<?php echo $product->image ?>" />
                                    <div class="invalid-feedback">
                                        <?php echo form_error('image') ?>
                                    </div>
                                </div>
    
                                <div class="form-group">
                                    <label for="name">Description*</label>
                                    <textarea class="form-control <?php echo form_error('description') ? 'is-invalid':'' ?>"
                                     name="description" placeholder="Product description..."><?php echo $product->description ?></textarea>
                                    <div class="invalid-feedback">
                                        <?php echo form_error('description') ?>
                                    </div>
                                </div>
    
                                <input class="btn btn-success" type="submit" name="btn" value="Save" />
                            </form>
    
                        </div>
    
                        <div class="card-footer small text-muted">
                            * required fields
                        </div>
    
    
                    </div>
                    <!-- /.container-fluid -->
    
                    <!-- Sticky Footer -->
                    <?php $this->load->view("admin/_partials/footer.php") ?>
    
                </div>
                <!-- /.content-wrapper -->
    
            </div>
            <!-- /#wrapper -->
    
            <?php $this->load->view("admin/_partials/scrolltop.php") ?>
    
            <?php $this->load->view("admin/_partials/js.php") ?>
    
    </body>
    
    </html>
    
  6. Membuat Fitur Hapus Data
    Kita juga perlu membuat fitur ini dengan cara menambahkan script dibawah pada file views/admin/product/list.php
    <script>
    function deleteConfirm(url){
        $('#btn-delete').attr('href', url);
        $('#deleteModal').modal();
    }
    </script>
    
    Setelah itu kita juga perlu menambahkan sebuah modal delete pada file views/admin/_partials/modal.php

    <!-- Logout Delete Confirmation-->
    <div class="modal fade" id="deleteModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
      <div class="modal-dialog" role="document">
        <div class="modal-content">
          <div class="modal-header">
            <h5 class="modal-title" id="exampleModalLabel">Are you sure?</h5>
            <button class="close" type="button" data-dismiss="modal" aria-label="Close">
              <span aria-hidden="true">×</span>
            </button>
          </div>
          <div class="modal-body">Data yang dihapus tidak akan bisa dikembalikan.</div>
          <div class="modal-footer">
            <button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button>
            <a id="btn-delete" class="btn btn-danger" href="#">Delete</a>
          </div>
        </div>
      </div>
    </div>
  7. Percobaan aplikasi
    - Halaman utama product

    - Add Product

    - Berhasil Add Product

    - List Product

    - Update Product

    - Delete Product
  8. Cukup sekian dari pertemuan kita kali ini.
  9. Untuk Source Codenya bisa dilihat di link dibawah ini :
    Source Code

Komentar

Postingan populer dari blog ini

UTS PBKK A

Tugas 2 PBKK