Tutorial CodeIgniter #5 Cara Mudah Membuat Fitur CRUD (Free Source Code)

Setelah sebelumnya kita telah mempelajari dasar dan cara seting Codeigniter, dan url alias, maka saat ini kita langsung praktek membuat fitur Create Read Update Delete atau yang sering kita kenal dengan singkatan (CRUD) pada Codeigniter.

Dengan mempelajari Tutorial CRUD dengan CodeIgniter, ini adalah sebagai langkah awal dan merupakan bagian penting yang harus kita pahami, sehingga kedepan dapat dengan mudah membantu untuk mengembangkan sebuah sistem informasi yang lengkap bagi teman-teman yang ingin menjadi web developper khususnya dengan menggunakan Framework CodeIgniter.

Pada tutorial ini menggunakan beberapa template, agar tampilan lebih keren dan mudah digunakan oleh user, adapun framework dan template yang digunakan :

Database yang digunakan bawaan dari xampp yakni MariaDb.

Pada studi kasus yang kita pelajari ini menggunakan database dengan nama ilmuweb dengan satu tabel berita dengan 8 field properti sebagai berikut :

Sistem CRUD pada codeigniter ini menggunakan kasus saya beri nama modul berita, dimana fitur berita ini intinya berita akan ditampilkan pada halaman front end dengan berbagai kondisi yang telah di tentukan sesuai dengan field diatas.

Adapun tampilan admin dashboard dari sistem CRUD sederhana yang kita buat setelah jadi berjalan dengan baik adalah seperti berikut :

Dashboard
Modul Berita
tambah berita
tambah berita
Edit Berita
Edit Berita
view
view
Hapus Berita

Untuk setingan dasar sebelum memulai membuat CRUD pada codeigniter adalah sebagai berikut :

Buat file .htaccess pada root folder :

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

# php -- BEGIN cPanel-generated handler, do not edit
# Set the “alt-php56” package as the default “PHP” programming language.
<IfModule mime_module>
  AddHandler application/x-httpd-alt-php56 .php .php5 .phtml
</IfModule>
# php -- END cPanel-generated handler, do not edit

Fungsi file ini adalah untuk menghilangkan index.php di alamat url browser sehingga apabila akan mengakses dengan alamat controler dan view misalnya ilmuweb/index.php/berita sehingga nantinya menjadi ilmuweb/berita sehingga index.php dihilangkan maka akan terlihat lebih bagus.

Selanjutnya seting autoload.php pada folder aplication/config dengan aktifkan libiraries

$autoload['libraries'] = array('database','session','form_validation');
$autoload['helper'] = array('url','file','security','text','tanggal');

Atur seting untuk time atau waktu dan base url untuk tampilan awal website dibuka di folder aplication/config/config.php

date_default_timezone_set('Asia/Jakarta');
$config['base_url'] = 'http://localhost/ilmuweb/';

Sementara kita arahkan routes pada awal controler Dashboard pada file aplication/config/routes.php

$route['default_controller'] = 'Dashboard';

Selanjutnya seting database dengan user, password dan nama database sesuai dengan nama database yang kita buat pada file seting application/config/database.php disini saya menggunakan seting sebagai berikut :

	'username' => 'root',
	'password' => '',
	'database' => 'ilmuweb',

Buat file Controler Dashboard.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Dashboard extends CI_Controller {

	public function index()
	{
        $data['title'] = 'Dashboard';

        $this->load->view('templates/header', $data);
        $this->load->view('templates/sidebar', $data);
        $this->load->view('templates/topbar', $data);
		$this->load->view('dashboard/index');
        $this->load->view('templates/footer');
	}

  
}

Buat controler Berita.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Berita extends CI_Controller {

    public function __construct()
    {
        parent::__construct();
        $this->load->model('Berita_model','berita');
        
    }

    public function index()
    {

          $data['title'] = 'Berita';
          $data['berita'] = $this->berita->getAllBerita();
    
          $this->load->view('templates/header', $data);
          $this->load->view('templates/sidebar', $data);
          $this->load->view('templates/topbar', $data);
          $this->load->view('berita/index', $data);
          $this->load->view('templates/footer');
      }

      public function tambah()
      {
          $data['title'] = 'Tambah Berita';
          $data['berita'] = $this->berita->getAllBerita();

          $this->form_validation->set_rules('judul','Judul Berita', 'required');
          $this->form_validation->set_rules('isi','Isi Berita', 'required');
          $this->form_validation->set_rules('status','Status', 'required');
          $this->form_validation->set_rules('kategori','Kategori', 'required');
         

          if($this->form_validation->run() == false) {
              $this->load->view('templates/header', $data);
              $this->load->view('templates/sidebar', $data);
              $this->load->view('templates/topbar', $data);
              $this->load->view('berita/tambah', $data);
              $this->load->view('templates/footer');

          } else {
            $gambar = $_FILES['gambar']['name'];

            if ($gambar = '') {
            } else {
                $config['allowed_types'] = 'jpg|png|jpeg';
                $config['max_size']     = '1048';
                $config['upload_path'] = './assets/img/berita/';
                $config['encrypt_name'] = TRUE;

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

                if (!$this->upload->do_upload('gambar')) {
                    $this->session->set_flashdata('message', '
                        <div class="alert alert-danger" role="alert">
                        <i class="fas fa-exclamation-triangle "></i>
                        Berita gagal ditambahkan, cek kembali ukuran gambar dan tipe file gambar!..
                        </div>
                        ');
                    redirect('berita');
                } else {
                    $gambar = $this->upload->data('file_name', true);

                    $data = [
                        "judul" => $this->input->post('judul', true),
                        "isi" => $this->input->post('isi', true),
                        "status" => $this->input->post('status', true),
                        "tanggal" => $this->input->post('tanggal', true),                        
                        "user" => $this->input->post('user', true),
                        "kategori" => $this->input->post('kategori', true),
                        "gambar" => $gambar
                    ];
                }
                $this->berita->tambahBerita($data, 'berita');
                $this->session->set_flashdata('message', '
                <div class="alert alert-success" role="alert">
                <i class="fas fa-check-circle"></i>
                Berita Sukses Ditambahkan!..
                </div>
                ');
                redirect('berita');

          }
      }
    }

    public function view($id)
    {
        $data['title'] = 'View';
        $data['berita'] = $this->berita->getBeritaById($id);

        $this->load->view('templates/header', $data);
        $this->load->view('templates/sidebar', $data);
        $this->load->view('templates/topbar', $data);
        $this->load->view('berita/view', $data);
        $this->load->view('templates/footer');
    }

    public function edit($id)
    {
        $data['title'] = 'Edit Berita';
        $data['berita'] = $this->berita->getBeritaById($id);
        $data['status'] =  ['draff','publish'];
        $data['kategori'] = ['Kesehatan','Teknologi'];

        $this->form_validation->set_rules('judul','Judul','required');
        $this->form_validation->set_rules('isi','Isi','required');
        $this->form_validation->set_rules('status','Status','required');
        $this->form_validation->set_rules('kategori','Kategori','required');
        
        if($this->form_validation->run()== false) {
            $this->load->view('templates/header', $data);
            $this->load->view('templates/sidebar', $data);
            $this->load->view('templates/topbar', $data);
            $this->load->view('berita/edit', $data);
            $this->load->view('templates/footer');
        } else {
            $this->berita->editBerita($id);
            $this->session->set_flashdata('message', '
            <div class="alert alert-success mb-1" role="alert">
            <i class="fas fa-check-circle"></i>
            Berita Sukses di Update!
            </div>
            ');
            redirect('berita');


        }

    }

    public function delete($id, $foto)
    {
        $path = './assets/img/berita/';
        if($foto != 'default.jpeg') {
            unlink(FCPATH.$path.$foto);
        }
        $id = [
            'id' => $id
        ];
        $this->berita->deleteData($id);
        $this->session->set_flashdata('message', '
        <div class="alert alert-success mb-1" role="alert">
        <i class="fas fa-check-circle"></i>
        Berita Sukses di Hapus!
        </div>
        ');
    redirect('berita');
    }
}

Selanjutnya Berita_model.php

<?php

class Berita_model extends CI_Model
{

    public function getAllBerita()
    {
        $this->db->order_by('id', 'desc');
        return  $this->db->get('berita')->result_array();

    }

    public function tambahBerita($data, $tabel)
    {
        $this->db->insert($tabel, $data);
    }

    public function getBeritaById($id)
    {
        return $this->db->get_where('berita',['id' => $id])->row_array();
        
    }

    public function editBerita($id)
    {
        $data['berita'] = $this->db->get_where('berita',['id' => $id])->row_array();
       
        
        // cek jika ada gambar yang di upload
        $upload_image = $_FILES['image'];

        if($upload_image) {
            $config['allowed_types'] = 'jpg|jpeg|png';
            $config['max_size'] = '1048';
            $config['upload_path'] = './assets/img/berita';
            $config['encrypt_name'] = TRUE;
     
          
            $this->load->library('upload', $config);
            
           if($this->upload->do_upload('image')) {
               $old_image = $data['berita']['gambar'];
               $path = './assets/img/berita/';

               if($old_image != 'default.jpeg') {
                   unlink(FCPATH.$path.$old_image);
               } 
               
               $new_image = $this->upload->data('file_name');
               $this->db->set('gambar',$new_image);

            } else {
                   $this->upload->display_errors();                
                   
               }
           }
           $data = [
                    "judul" => $this->input->post('judul', true),
                    "isi" => $this->input->post('isi',  true),
                    "kategori" => $this->input->post('kategori', true),
                    "tanggal" => $this->input->post('tanggal', true),
                    "status" => $this->input->post('status', true),
                    "user" => $this->input->post('user', true)
           ];
           $this->db->where('id', $this->input->post('id'));
           $this->db->update('berita', $data);
    }

    public function deleteData($id)
    {
        $this->db->where($id);
        return $this->db->delete('berita');
    }
}

Selanjutnya buat folder berita pada views dengan file berisi index.php edit.php, tambah.php, view.php untuk sistem CRUD modul berita.

Agar tidak terlalu panjang tutorialnya, teman-teman bisa download source code lengkap CRUD ini dan template yang siap digunakan.

Setelah download source code buat database dan import database SQL ke PHPMyadmin di localhost, kemudian seting disesuaikan akun nama dan password database pada PHPmyadmin teman-teman di komputer local, dan disesuaikan config database.php nama pada folder application/config/database.php

Download Source Code & Database 17Mb

Apabila file tidak terdonwload menggunakan mozila firefox disarankan download dengan menggunakan browser google chrome.

Demikian tutorial CRUD Codeigniter semoga bisa bermanfaat, walaupun masih ada beberapa kekurangan perlahan akan kita melengkapinya pada totorial yang akan datang, dan pada tutorial selanjutnya akan kita lengkapi dengan fitur searce dan pagination, di tunggu ya teman-teman, salam sukses.

Share and Enjoy !

You may also like...