Kamis, 05 Maret 2020

PBKK A - Tugas 7. Membuat Akses Login Admin pada Template SBAdmin dengan CodeIgniter

Dengan adanya fitur Login Admin, maka halaman web tidak dapat diakses apabila belum melakukan login dengan email/username dan password yang tepat.

Berikut adalah langkah-langkah membuat Akses Login untuk Admin dengan CodeIgniter :

1. Membuat Tabel Users pada Database
Database yang digunakan yaitu database tokobuah yang telah dibuat sebelumnya.
Jalankan kode SQL ini untuk membuat tabel users


CREATE TABLE `users` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(64) NOT NULL,
  `password` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `full_name` varchar(255) NOT NULL,
  `phone` varchar(20) NOT NULL,
  `role` enum('admin','customer') NOT NULL DEFAULT 'customer',
  `last_login` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `photo` varchar(64) NOT NULL DEFAULT 'user_no_image.jpg',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `is_active` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`user_id`)
);

Maka tabel users akan terbentuk seperti di bawah ini


2. Inputkan satu data baru sebagai admin
Data ini nantinya akan digunakan untuk melakukan uji coba Login Admin
Inputkan data dengan menu Insert pada phpmyadmin



Untuk bagian password, kita harus melakukan hash terlebih dahulu untuk mendapatkan hasil enkripsi dari password kita dengan menggunakan fungsi password_hash() oleh php.
Hal ini dapat dilakukan melalui Command Prompt seperti di bawah ini


Kode didalam kotak merah adalah hasil hash dari password yang telah kita buat.

3. Membuat Model User
Buat file User_model.php pada direktori ~/application/models/ yang berisikan kode seperti di bawah ini 

<?php

class User_model extends CI_Model
{
    private $_table = "users";

    public function doLogin(){
  $post = $this->input->post();

        // cari user berdasarkan email dan username
        $this->db->where('email', $post["email"])
                ->or_where('username', $post["email"]);
        $user = $this->db->get($this->_table)->row();

        // jika user terdaftar
        if($user){
            // periksa password-nya
            $isPasswordTrue = password_verify($post["password"], $user->password);
            // periksa role-nya
            $isAdmin = $user->role == "admin";

            // jika password benar dan dia admin
            if($isPasswordTrue && $isAdmin){ 
                // login sukses yay!
                $this->session->set_userdata(['user_logged' => $user]);
                $this->_updateLastLogin($user->user_id);
                return true;
            }
        }
        
        // login gagal
  return false;
    }

    public function isNotLogin(){
        return $this->session->userdata('user_logged') === null;
    }

    private function _updateLastLogin($user_id){
        $sql = "UPDATE {$this->_table} SET last_login=now() WHERE user_id={$user_id}";
        $this->db->query($sql);
    }

}

Terdapat 3 method pada kode di atas, yaitu
1) Method doLogin() untuk melakukan login
2) Method isNotLogin() untuk mengecek apakah sudah login atau belum
3) Method _updateLastLogin() untuk mengupdate waktu login terakhir yang dilakukan

4. Membuat Controller Login
Buat file Login.php pada direktori ~/controllers/admin/ dengan isi kode sebagai berikut

<?php

class Login extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->load->model("user_model");
        $this->load->library('form_validation');
    }

    public function index()
    {
        // jika form login disubmit
        if($this->input->post()){
            if($this->user_model->doLogin()) redirect(site_url('admin'));
        }

        // tampilkan halaman login
        $this->load->view("admin/login_page.php");
    }

    public function logout()
    {
        // hancurkan semua sesi
        $this->session->sess_destroy();
        redirect(site_url('admin/login'));
    }
}

Setelah itu, kita harus mengubah controller lain untuk mengecek apakah user sudah login atau belum

5. Mengubah controller Overview.php
Ubah kode pada function _construct()  menjadi seperti di bawah ini

public function __construct()
    {
  parent::__construct();
  $this->load->model("user_model");
  if($this->user_model->isNotLogin()) redirect(site_url('admin/login'));
 }

6. Mengubah controller Products.php
Ubah kode pada function _construct()  menjadi seperti di bawah ini


public function __construct()
    {
        parent::__construct();
        $this->load->model("product_model");
        $this->load->library('form_validation');
        $this->load->model("user_model");
        if($this->user_model->isNotLogin()) redirect(site_url('admin/login'));
    }

7. Membuat View Halaman Login
Buat file login_page.php pada direktori ~/application/views/admin/ dengan isi kode sebagai berikut


<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Login Admin</title>

    <!-- Bootstrap core CSS-->
    <link href="<?php echo base_url('assets/bootstrap/css/bootstrap.min.css') ?>" rel="stylesheet">
</head>

<body>

    <div class="container">
        <div class="row">
            <div class="col-12 col-md-6 text-center mt-5 mx-auto p-4">
                <h1 class="h2">Login Admin</h1>
                <p class="lead">Silahkan masuk ke Panel Admin</p>
            </div>
        </div>
        <div class="row">
            <div class="col-12 col-md-5 mx-auto mt-5">
                <form action="<?= site_url('admin/login') ?>" method="POST">
                    <div class="form-group">
                        <label for="email">Email</label>
                        <input type="text" class="form-control" name="email" placeholder="Pakai username juga bisa.." required />
                    </div>
                    <div class="form-group">
                        <label for="password">Password</label>
                        <input type="password" class="form-control" name="password" placeholder="Password.." required />
                    </div>
                    <div class="form-group">
                        <div class="d-flex justify-content-between">
                            <div class="custom-control custom-checkbox">
                                <input type="checkbox" class="custom-control-input" name="rememberme" id="rememberme" />
                                <label class="custom-control-label" for="rememberme"> Ingat Saya</label>
                            </div>
                            <a href="<?= site_url('reset_password') ?>">Lupa Password?</a>
                        </div>
                    </div>
                    <div class="form-group">
                        <input type="submit" class="btn btn-success w-100" value="Login" />
                    </div>

                </form>
            </div>
        </div>
    </div>

</body>

</html>

8. Membuat Link Logout
Buka file ~/views/admin/_partials/modal.php dan ubah alamat link logout
Dari kode
<a class="btn btn-primary" href="login.html">Logout</a>

Ubah menjadi

<a class="btn btn-primary" href="<?= site_url('admin/login/logout') ?>">Logout</a>


Melakukan Uji Coba Fitur Login

Buka halaman http://localhost/tokobuah/index.php/admin/ , maka akan diarahkan ke halaman login dan melakukan login untuk dapat mengakses halaman tersebut



Setelah melakukan login, klik pada icon di kotak biru (pojok kanan atas) dan pilih logout untuk melakukan Logout



SELESAI

Source Code : klik disini

PBKK A - Tugas 6. Upload Image pada Template SBAdmin dengan CodeIgniter

Pada tugas sebelumnya kita telah membuat CRUD pada Template SBAdmin dengan CodeIgniter.
Dengan fitur CRUD kita sudah dapat menambahkan data baru, menampilkan data, mengedit data, dan menghapus data.
Namun pada menu menambahkan data produk baru, kita belum dapat meng-upload gambar dari produk tersebut.
Maka dari itu, pada kesempatan kali ini kita akan menambahkan fitur untuk Upload Image dengan CodeIgniter.

Jika pada proses penambahan data tidak ada image yang diupload, maka akan secara default diisikan dengan nilai default.jpg.
File default.jpg ini adalah file default yang akan mengisi bagian photo dari product.
Alamat path dari file tersebut yaitu /upload/product/default.jpg, maka dari itu kita harus membuat path tersebut terlebih dahulu.
1. Buat folder baru bernama upload di dalam project.
2. Di dalam folder upload, buat folder baru lagi bernama product
3. Masukkan file default.jpg ke dalam folder product.
File default.jpg yang akan kita gunakan yaitu image di bawah ini


Pengaturan nilai default untuk image selesai.
Selanjutnya yaitu membuat fitur upload image.

1. Buka file Product_model.php pada direktori ~/models/ dan tambahkan method _uploadImage() di bawah method delete()
Berikut adalah kode dari method _uploadImage()

private function _uploadImage()
{
    $config['upload_path']          = './upload/product/';
    $config['allowed_types']        = 'gif|jpg|png|jpeg';
    $config['file_name']            = $this->product_id;
    $config['overwrite']   = true;
    $config['max_size']             = 1024; // 1MB
    // $config['max_width']            = 1024;
    // $config['max_height']           = 768;

    $this->load->library('upload', $config);

    if ($this->upload->do_upload('image')) {
        return $this->upload->data("file_name");
    }
    
    return "default.jpg";
}

2. Ubah method save() dan update() pada file Product_model.php
Ubah method save() menjadi seperti di bawah ini

public function save()
    {
        $post = $this->input->post();
        $this->product_id = uniqid();
        $this->name = $post["name"];
        $this->price = $post["price"];
        $this->image = $this->_uploadImage();
        $this->description = $post["description"];
        return $this->db->insert($this->_table, $this);
    }

Ubah method update() menjadi seperti di bawah ini

public function update()
    {
        $post = $this->input->post();
        $this->product_id = $post["id"];
        $this->name = $post["name"];
        $this->price = $post["price"];

        if (!empty($_FILES["image"]["name"])) {
            $this->image = $this->_uploadImage();
        } else{
            $this->image = $post["old_image"];
        }

        $this->description = $post["description"];
        $this->db->update($this->_table, $this, array('product_id' => $post['id']));
    }

3. Menghapus file yang di-upload apabila data dihapus
Tambahkan method _deleteImage() di bawah method _uploadImage()


private function _deleteImage($id)
{
    $product = $this->getById($id);
    if ($product->image != "default.jpg") {
     $filename = explode(".", $product->image)[0];
  return array_map('unlink', glob(FCPATH."upload/product/$filename.*"));
    }
}

4. Panggil method _deleteImage() pada method detele() , sehingga menjadi seperti di bawah ini


public function delete($id)
    {
        $this->_deleteImage($id);
        return $this->db->delete($this->_table, array("product_id" => $id));
    }


Melakukan Uji Coba
Project dapat diakses melalui http://localhost/TugasUploadImage_PBKK/index.php/admin

Menambahkan data baru tanpa meng-upload image





Menambahkan data baru dengan meng-upload image






Menghapus file image yang datanya dihapus dari database





SELESAI

Source Code : klik disini

PBKK A - Tugas 5. Membuat CRUD pada Template SBAdmin dengan CodeIgniter

CRUD adalah singkatan dari Create, Read, Update, dan Delete yang merupakan operasi-operasi dasar dalam sebuah aplikasi, baik aplikasi web maupun aplikasi mobile.

Pada tugas ini, kita akan membuat fitur CRUD pada Template SBAdmin aplikasi web Tokobuah dengan framework CodeIgniter.

Berikut adalah langkah-langkah untuk membuat fitur CRUD :

1. Membuat Database
Pada tugas ini,kita menggunakan XAMPP untuk koneksi dengan Apache dan MySQL.
Hidupkan kedua modul tersebut.
Kemudian, buka localhost/phpmyadmin , dan buat Database baru dengan nama tokobuah.
Kita akan membuat tabel baru dengan nama products dengan 5 kolom, berikut kode SQL nya :


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;

Setelah mengeksekusi kode diatas, maka tabel products akan terbentuk seperti gambar di bawah ini :




2. Mengatur Konfigurasi Database pada CodeIgniter
Buka ~/config/database.php dan tambahkan kode di bawah ini

$db['default'] = array(
 'dsn' => '',
 'hostname' => 'localhost',
 'username' => 'root',
 'password' => '',
 'database' => 'tokobuah',
 '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
);

Kemudian, buka ~/config/autoload.php , dan tambahkan database dan session pada kode $autoload['libraries'] sehingga menjadi

$autoload['libraries'] = array('database', 'session');

Library database akan menyediakan fungsi-fungsi untuk operasi database.
Library session akan menyediakan fungsi-fungsi untuk mengakses variable $_SESSION, ini dibutuhkan saat menampilkan flash message dan membuat login.

3. Membuat Model untuk Tabel Products
Buat file Product_model.php pada direktori ~/application/models/
Isi file dengan kode berikut 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));
    }
}

Pada method rules(), berisikan array yang berisi rules yang akan digunakan untuk validasi input.
Misalnya untuk field name dan description diberikan rules required yang artinya field tersebut wajib untuk diisi.

Method get() dan getAll() digunakan untuk mengambil data dari database. get() digunakan untuk mengambil data dengan spesifikasi tertentu, sedangkan getAll() digunakan untuk mengambil semua data hasil query.

Method save() digunakan untuk menyimpan data ke tabel products pada database

return $this->db->insert($this->_table, $this);
$this adalah properti yang berisikan data yang akan disimpan.
Pada method ini, product_id diisikan dengan fungsi uniqid() karena kita akan membuat data baru.
Fungsi uniqid() ini akan menghasilkan id yang terdiri dari karakter unik

Method update() digunakan untuk mengupdate/memperbarui data.
Method delete() digunakan untuk menghapus data.

4. Membuat Controller untuk mengakses data pada Database
Buat file Products.php pada direktori ~/application/controllers/admin/ , isikan kode berikut

<?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'));
        }
    }
}

Pada method _construct() , kita meload model product_model dan library form_validation yang digunakan untuk memvalidasi input pada method add() dan edit().

Method index() digunakan untuk mengambil data dari model dan menampilkannya pada halaman List Product.

Method add() digunakan untuk menampilkan form add untuk menambahkan data pada database dan memanggil method save() pada model untuk menyimpan data tersebut.

Method edit() digunakan untuk menampilkan form dan mengedit data kemudian memanggil method save() untuk menyimpan data kembali.

Method delete() digunakan untuk menghapus data.

5. Membuat View New Product dan List Product
Buat folder product pada direktori ~/views/admin/ , kemudian buat file-file di bawah ini dalam folder product tersebut
  • Buat file list.php , dan isikan kode dibawah ini 

  • <!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") ?>
    
    </body>
    
    </html>
    
View ini bertugas untuk menampilkan data pada halaman List Product
  • Buat file new_form.php, dan isikan kode di bawah ini

  • <!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>
    

    View ini bertugas untuk menampilkan form input untuk menambahkan data produk baru.

  • Buat file edit_form.php , dan isikan kode di bawah ini
    <!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>
    

    View ini digunakan untuk menampilkan form pengeditan data yang sudah ada.

  • Menambahkan fitur Hapus Data
  • Buka ~/views/admin/products/list.php, dan tambahkan kode berikut di bagian bawah sebelum tag </body>

    <script>
    function deleteConfirm(url){
     $('#btn-delete').attr('href', url);
     $('#deleteModal').modal();
    }
    </script>
    

    Setelah itu, buka ~/views/admin/_partial/modal.php dan tambahkan kode berikut di paling bawah

    <!-- 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>
    

Setelah melakukan seluruh langkah-langkah di atas, kita akan melakukan uji coba.
Project dapat dibuka dengan alamat http://localhost/TugasCRUD_PBKK/index.php/admin

Membuka halaman New Product dan menambahkan produk baru




Membuka halaman List Product



Melakukan edit data 




Melakukan hapus data




Pembuatan CRUD selesai.

Source Code : klik disini