Sistem CRUD Sederhana dengan Codeigniter 3

Arjuna Mahavira

Sosial Media


1 orang menyukai ini
Suka

Summary

Dalam konteks pengembangan web, CRUD adalah operasi dasar yang melibatkan pembuatan (Create), pembacaan (Read), pembaruan (Update), dan penghapusan (Delete) data. Dengan memilih CodeIgniter 3 sebagai framework utama, tugas ini  menerapkan konsep Model-View-Controller (MVC) serta  menggunakan fitur-fitur CodeIgniter 3. Pekerjaan ini juga melibatkan validasi data, keamanan, serta desain antarmuka dengan bootstrap.

Description

 

Langkah 1: Unduh dan Siapkan Codeigniter 3

Download Codeigniter 3 dengan mengklik link download berikut dari website resmi CodeIgniter.

URL : https://codeigniter.com/download

Setelah berhasil diunduh, ekstrak file zip ke direktori root server localhost Xampp/htdocs/belajarcodeigniter. 

Langkah 2: Set Base URL, library dan helper autoload

Pada langkah ini, kita perlu mengonfigurasi Base URL dan Library serta Helper autoload di aplikasi CodeIgniter 3 kita.

application\config\config.php

$config['base_url'] = 'http://localhost/belajarcodeigniter/';

application\config\autoload.php

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

$autoload['helper'] = array('url');

Langkah 3: Membuat Basis Data dan Konfigurasi

Membuat database dengan nama belajarcodeigniter_db di lokal menggunakan sql.

CREATE TABLE mahasiswa (

nim VARCHAR(20) PRIMARY KEY,

nama VARCHAR(255),

jurusan VARCHAR(50),

nomor telepon VARCHAR(15), email VARCHAR(255)

);

Konfigurasi database pada application\config\database.php

'hostname' => 'localhost',

'username' => 'root',

'password' => '',

'database' => 'belajarcodeigniter_db',

'dbdriver' => 'mysqli',

Langkah 4: menghapus indeks.php

Buat file .htaccess  untuk menghapus indeks.php agar url bersih

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

Langkah 5: membuat controller

Mahasiswa controller berisi metode tambah, detail, ubah, dan hapus.

application\controllers\Mahasiswa.php

<?php

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

class Mahasiswa extends CI_Controller {

    public function __construct() {

        parent::__construct();

        $this->load->database();

        $this->load->model('Mahasiswa_model');

        $this->load->library('form_validation');

    }

    public function index() {

        $data['mahasiswa'] = $this->Mahasiswa_model->getAllMahasiswa();

        $this->load->view('templates/header');

        $this->load->view('templates/navbar');

        $this->load->view('mahasiswa/index', $data);

        $this->load->view('templates/footer');

    }

    public function tambah() {

        $this->form_validation->set_rules('nama', 'Nama', 'required');

        $this->form_validation->set_rules('jurusan', 'Jurusan', 'required');

        $this->form_validation->set_rules('email', 'Email', 'required|valid_email');

        $this->form_validation->set_rules('notelp', 'Nomor Telepon', 'required|numeric');

        if($this->form_validation->run() == FALSE) {

            $this->load->view('templates/header');

            $this->load->view('templates/navbar');

            $this->load->view('mahasiswa/tambah');

            $this->load->view('templates/footer');

        } else {

            $this->Mahasiswa_model->tambahDataMahasiswa();

            $this->session->set_flashdata('flash', 'Ditambahkan');

            redirect('mahasiswa');

        }

    }

    public function ubah($nim) {

        $data['mahasiswa'] = $this->Mahasiswa_model->getMahasiswaByNim($nim);

        $this->form_validation->set_rules('nama', 'Nama', 'required');

        $this->form_validation->set_rules('jurusan', 'Jurusan', 'required');

        $this->form_validation->set_rules('email', 'Email', 'required|valid_email');

        $this->form_validation->set_rules('notelp', 'Nomor Telepon', 'required|numeric');

        if($this->form_validation->run() == FALSE) {

            $this->load->view('templates/header');

            $this->load->view('templates/navbar');

            $this->load->view('mahasiswa/ubah', $data);

            $this->load->view('templates/footer');

        } else {

            $this->Mahasiswa_model->ubahDataMahasiswa();

            $this->session->set_flashdata('flash', 'Diubah');

            redirect('mahasiswa');

        }

    }

    public function hapus($nim) {

        $this->Mahasiswa_model->hapusDataMahasiswa($nim);

        $this->session->set_flashdata('flash', 'Dihapus');

        redirect('mahasiswa');

    }

    public function detail($nim) {

        $data['mahasiswa'] = $this->Mahasiswa_model->getMahasiswaByNim($nim);

        $this->load->view('templates/header');

        $this->load->view('templates/navbar');

        $this->load->view('mahasiswa/detail', $data);

        $this->load->view('templates/footer');

    }

}

Penjelasan singkat tentang fungsi-fungsi dalam controller ini:

1. __construct(): Metode konstruktor yang dipanggil saat objek controller dibuat. Digunakan untuk memuat library dan model yang diperlukan.

   - `$this->load->database()`: Memuat library database untuk koneksi ke database.

   - `$this->load->model('Mahasiswa_model')`: Memuat model 'Mahasiswa_model' yang berisi fungsi-fungsi untuk mengakses data mahasiswa.

   - `$this->load->library('form_validation')`: Memuat library form_validation untuk melakukan validasi form.

2. index(): Menampilkan daftar semua mahasiswa.

   - `$data['mahasiswa']`: Mengambil data mahasiswa dari model menggunakan `getAllMahasiswa()` dan menyimpannya dalam array `$data`.

   - Meload view untuk menampilkan daftar mahasiswa.

3. tambah(): Menangani proses penambahan data mahasiswa.

   - Melakukan validasi form menggunakan `form_validation->run()`.

   - Jika validasi gagal, menampilkan halaman tambah data dengan pesan error.

   - Jika validasi berhasil, menambahkan data mahasiswa menggunakan `tambahDataMahasiswa()` dari model, menampilkan pesan flash, dan mengarahkan pengguna kembali ke halaman daftar mahasiswa.

4. hapus($nim): Menangani proses penghapusan data mahasiswa.

   - Menghapus data mahasiswa dengan nim tertentu menggunakan `hapusDataMahasiswa()` dari model.

   - Menampilkan pesan flash dan mengarahkan pengguna kembali ke halaman daftar mahasiswa.

5. detail($nim): Menampilkan detail mahasiswa berdasarkan nim.

   - Mengambil data mahasiswa dengan nim tertentu menggunakan `getMahasiswaByNim()` dari model dan menampilkannya di view detail.

6. ubah($nim): Menangani proses perubahan data mahasiswa.

   - Melakukan validasi form menggunakan `form_validation->run()`.

   - Jika validasi gagal, menampilkan halaman ubah data dengan pesan error.

   - Jika validasi berhasil, mengubah data mahasiswa menggunakan `ubahDataMahasiswa()` dari model, menampilkan pesan flash, dan mengarahkan pengguna kembali ke halaman daftar mahasiswa.

Langkah 6: Membuat Model

Pada langkah ini kita perlu membuat model Crud untuk menulis logika database, di sini kita akan menulis logika database untuk mendapatkan semua record dari database, menyisipkan record baru, memperbarui dan menghapus.

application\models\Mahasiswa_model.php
<?php

class Mahasiswa_model extends CI_Model

{

    public function getAllMahasiswa()

    {

        return $this->db->get('mahasiswa')->result_array();

    }

    public function tambahDataMahasiswa()

    {

        do {

            $nim = mt_rand(100000000, 999999999);

            $nim_exist = $this->db->get_where('mahasiswa', ['NIM' => $nim])->row_array();

        } while ($nim_exist);

        $data = [

            "NIM" => $nim,

            "nama" => $this->input->post('nama', true),

            "jurusan" => $this->input->post('jurusan', true),

            "email" => $this->input->post('email', true),

            "nomor_telepon" => $this->input->post('notelp', true)

        ];

        $this->db->insert('mahasiswa', $data);

    }

    public function hapusDataMahasiswa($nim)

    {

        $this->db->delete('mahasiswa', ['NIM' => $nim]);

    }

    public function getMahasiswaByNim($nim)

    {

        return $this->db->get_where('mahasiswa', ['NIM' => $nim])->row_array();

    }

    public function ubahDataMahasiswa()

    {

        $data = [

            "nama" => $this->input->post('nama', true),

            "jurusan" => $this->input->post('jurusan', true),

            "email" => $this->input->post('email', true),

            "nomor_telepon" => $this->input->post('notelp', true)

        ];

        $this->db->where('NIM', $this->input->post('nim'));

        $this->db->update('mahasiswa', $data);

    }

}

Pada model ini berisi fungsi-fungsi untuk melakukan operasi CRUD (Create, Read, Update, Delete) pada tabel 'mahasiswa' di database. Berikut adalah penjelasan fungsi-fungsi dalam model ini:

1. getAllMahasiswa(): Mendapatkan semua data mahasiswa.

   - Menggunakan `$this->db->get('mahasiswa')` untuk mengambil semua data dari tabel 'mahasiswa'.

   - Mengembalikan hasil dalam bentuk array.

2. tambahDataMahasiswa(): Menambahkan data mahasiswa baru.

   - Menggunakan loop do-while untuk menghasilkan NIM unik secara acak hingga mendapatkan NIM yang belum ada di database. Code ini dapat berubah jika ada sistem penomoran pada nim.

   - Mengambil data dari inputan form dan membentuk array data.

   - Menyimpan data ke dalam tabel 'mahasiswa' menggunakan `$this->db->insert()`.

3. hapusDataMahasiswa($nim): Menghapus data mahasiswa berdasarkan NIM.

   - Menggunakan `$this->db->delete('mahasiswa', ['NIM' => $nim])` untuk menghapus data dari tabel 'mahasiswa' dengan NIM tertentu.

4. getMahasiswaByNim($nim): Mendapatkan data mahasiswa berdasarkan NIM.

   - Menggunakan `$this->db->get_where('mahasiswa', ['NIM' => $nim])` untuk mengambil data dari tabel 'mahasiswa' dengan NIM tertentu.

   - Mengembalikan hasil dalam bentuk array.

5. ubahDataMahasiswa(): Mengubah data mahasiswa.

   - Mengambil data dari inputan form dan membentuk array data.

   - Menggunakan `$this->db->where()` untuk menentukan kondisi WHERE (berdasarkan NIM) pada perubahan data.

   - Menggunakan `$this->db->update()` untuk memperbarui data dalam tabel 'mahasiswa'.

Langkah 7: Membuat Views

Berikut adalah struktur folder dari views

Folder mahasiswa: Berisi file-file views terkait manajemen mahasiswa.

  • index.php: Halaman untuk menampilkan daftar mahasiswa.
  • tambah.php: Halaman untuk menambahkan data mahasiswa.
  • detail.php: Halaman untuk menampilkan detail mahasiswa.
  • ubah.php: Halaman untuk mengubah data mahasiswa.

template folder: Berisi file-file views yang berfungsi sebagai template atau bagian-bagian yang dapat digunakan berulang di halaman-halaman lain.

  • header.php: Bagian header halaman.
  • navbar.php: Bagian navbar atau menu navigasi.
  • footer.php: Bagian footer halaman.

application\views\template\header.php

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>BelajarCodeigniter</title>

    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">

    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==" crossorigin="anonymous" referrerpolicy="no-referrer" />

</head>

<body>

application\views\template\navbar.php
<nav class="navbar navbar-expand-lg bg-info">

  <div class="container">

    <a class="navbar-brand" href="#">Navbar</a>

    <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">

      <span class="navbar-toggler-icon"></span>

    </button>

    <div class="collapse navbar-collapse" id="navbarNav">

      <ul class="navbar-nav">

        <li class="nav-item">

          <a class="nav-link active" aria-current="page" href="<?= base_url(); ?>">Home</a>

        </li>

        <li class="nav-item">

          <a class="nav-link" aria-current="page" href="<?= base_url(); ?>mahasiswa">Mahasiswa</a>

        </li>

      </ul>

    </div>

  </div>

</nav>

application\views\template\footer.php

</body>

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>

</html>

application\views\mahasiswa\index.php

<div class="card m-5">

    <?php if ($this->session->flashdata('flash')): ?>

        <div class="alert alert-success alert-dismissible fade show" role="alert">

            Data mahasiswa <strong>berhasil</strong>

            <?= $this->session->flashdata('flash'); ?>.

            <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>

        </div>

    <?php endif; ?>

    <div class="card-header d-flex justify-content-between">

        <h3 class="col">Data Mahasiswa</h3>

        <a href="<?= base_url(); ?>mahasiswa/tambah" type="button" class="btn btn-primary inline ms-auto"><i

                class="fa-solid fa-circle-plus"></i> Tambah data</a>

    </div>

    <div class="card-body">

        <table class="table table-striped">

            <thead>

                <tr>

                    <th scope="col">No</th>

                    <th scope="col">NIM</th>

                    <th scope="col">Nama</th>

                    <th scope="col">Jurusan</th>

                    <th scope="col"></th>

                </tr>

            </thead>

            <tbody>

                <?php $i = 1; ?>

                <?php foreach ($mahasiswa as $mhs): ?>

                    <tr>

                        <th scope="row">

                            <?= $i++; ?>

                        </th>

                        <td>

                            <?= $mhs['nim']; ?>

                        </td>

                        <td>

                            <?= $mhs['nama']; ?>

                        </td>

                        <td>

                            <?= $mhs['jurusan']; ?>

                        </td>

                        <td>

                            <a href="<?= base_url(); ?>mahasiswa/detail/<?= $mhs['nim']; ?>" class="btn btn-primary"><i class="fa-solid fa-eye"></i></a>

                            <a href="<?= base_url(); ?>mahasiswa/ubah/<?= $mhs['nim']; ?>" class="btn btn-warning"><i class="fa-solid fa-pencil"></i></a>

                            <a href="<?= base_url(); ?>mahasiswa/hapus/<?= $mhs['nim']; ?>" class="btn btn-danger" onclick="return confirm('yakin?');"><i class="fa-solid fa-trash"></i></a>

                        </td>

                    </tr>

                <?php endforeach; ?>

            </tbody>

        </table>

    </div>

</div>

Tampilan terlihat seperti berikut:

application\views\mahasiswa\tambah.php

<div class="card m-5">

    <div class="card-header d-flex justify-content-between">

        <h3>Tambah Data Mahasiswa</h3>

        <a href="<?= base_url(); ?>mahasiswa" type="button" class="btn btn-warning"><i

                class="fa-solid fa-chevron-left"></i> Kembali</a>

    </div>

    <div class="card-body">

        <?php

        if (validation_errors()) {

            ?>

            <div class="alert alert-danger" role="alert">

                <?= validation_errors(); ?>

            </div>

            <?php

        }

        ?>

        <form action="" method="POST">

            <div class="mb-3">

                <label for="nama" class="form-label">Nama</label>

                <input type="text" class="form-control" id="nama" name="nama">

            </div>

            <div class="mb-3">

                <label for="jurusan" class="form-label">Jurusan</label>

                <input type="text" class="form-control" id="jurusan" name="jurusan">

            </div>

            <div class="mb-3">

                <label for="email" class="form-label">Email</label>

                <input type="email" class="form-control" id="email" name="email">

            </div>

            <div class="mb-3">

                <label for="notelp" class="form-label">Nomor Telepon</label>

                <input type="number" class="form-control" id="notelp" name="notelp">

            </div>

            <button type="submit" class="btn btn-primary">Simpan</button>

        </form>

    </div>

</div>

Tampilan terlihat seperti berikut:

application\views\mahasiswa\ubah.php

<div class="card m-5">

    <div class="card-header d-flex justify-content-between">

        <h3>Ubah Data Mahasiswa</h3>

        <a href="<?= base_url(); ?>mahasiswa" type="button" class="btn btn-warning"><i

                class="fa-solid fa-chevron-left"></i> Kembali</a>

    </div>

    <div class="card-body">

        <?php

        if (validation_errors()) {

            ?>

            <div class="alert alert-danger" role="alert">

                <?= validation_errors(); ?>

            </div>

            <?php

        }

        ?>

        <form action="" method="POST">

            <input type="hidden" name="nim" value="<?= $mahasiswa['nim']; ?>">

            <div class="mb-3">

                <label for="nama" class="form-label">Nama</label>

                <input type="text" class="form-control" id="nama" name="nama" value="<?= $mahasiswa['nama']; ?>">

            </div>

            <div class="mb-3">

                <label for="jurusan" class="form-label">Jurusan</label>

                <input type="text" class="form-control" id="jurusan" name="jurusan" value="<?= $mahasiswa['jurusan']; ?>">

            </div>

            <div class="mb-3">

                <label for="email" class="form-label">Email</label>

                <input type="email" class="form-control" id="email" name="email" value="<?= $mahasiswa['email']; ?>">

            </div>

            <div class="mb-3">

                <label for="notelp" class="form-label">Nomor Telepon</label>

                <input type="number" class="form-control" id="notelp" name="notelp" value="<?= $mahasiswa['nomor_telepon']; ?>">

            </div>

            <button type="submit" class="btn btn-primary">Simpan</button>

        </form>

    </div>

</div>

Tampilan Terlihat seperti berikut:

application\views\mahasiswa\detail.php

<div class="card m-5">

    <div class="card-header d-flex justify-content-between">

        <h3 class="col">Detail Data Mahasiswa</h3>

        <a href="<?= base_url(); ?>mahasiswa" type="button" class="btn btn-warning inline ms-auto"><i

                class="fa-solid fa-chevron-left"></i> Kembali</a>

    </div>

    <div class="card-body">

    <div class="card">

  <ul class="list-group list-group-flush">

    <li class="list-group-item">Nama: <?= $mahasiswa['nama']; ?></li>

    <li class="list-group-item">NIM: <?= $mahasiswa['nim']; ?></li>

    <li class="list-group-item">Jurusan: <?= $mahasiswa['jurusan']; ?></li>

    <li class="list-group-item">Email: <?= $mahasiswa['email']; ?></li>

    <li class="list-group-item">Nomor Telepon: <?= $mahasiswa['nomor_telepon']; ?></li>

  </ul>

</div>

    </div>

</div>

Tampilan terlihat seperti berikut:

Langkah 8: Membuat Route

$route['mahasiswa'] = 'mahasiswa';

$route['mahasiswa/tambah'] = 'mahasiswa/tambah';

$route['mahasiswa/hapus/(:any)'] = 'mahasiswa/hapus/$1';

$route['mahasiswa/ubah/(:any)'] = 'mahasiswa/ubah/$1';

Konfigurasi route pada application\config\routes.php untuk menentukan cara URL diakses dan dihubungkan dengan controller dan metodenya. berikut adalah penjelasan masing-masing aturan route:

1. $route['mahasiswa'] = 'mahasiswa';

   - Aturan ini menyatakan bahwa saat pengguna mengakses URL `http://localhost/belajarcodeigniter/mahasiswa`, CodeIgniter akan mengarahkannya ke controller `Mahasiswa` (tanpa menentukan metodenya). Ini akan menjalankan metode `index()` dalam controller `Mahasiswa`, karena metode tersebut adalah metode default yang dijalankan jika tidak ada metode tertentu yang ditentukan.

2. $route['mahasiswa/tambah'] = 'mahasiswa/tambah';

   - Aturan ini menyatakan bahwa saat pengguna mengakses URL `http://localhost/belajarcodeigniter/mahasiswa/tambah`, CodeIgniter akan mengarahkannya ke controller `Mahasiswa` dan metode `tambah()`.

3. $route['mahasiswa/hapus/(:any)'] = 'mahasiswa/hapus/$1';

   - Aturan ini menggunakan wildcard `(:any)` untuk menangkap bagian dari URL yang berada setelah `mahasiswa/hapus/` dan memasukkannya sebagai parameter untuk metode `hapus()` dalam controller `Mahasiswa`. Misalnya, jika pengguna mengakses URL `http://localhost/belajarcodeigniter/mahasiswa/hapus/123`, CodeIgniter akan mengarahkannya ke controller `Mahasiswa` dan menjalankan metode `hapus('123')`.

4. $route['mahasiswa/ubah/(:any)'] = 'mahasiswa/ubah/$1';

   - Aturan ini serupa dengan aturan ketiga, tetapi mengarahkan ke metode `ubah()` dalam controller `Mahasiswa`. Jika pengguna mengakses URL `http://localhost/belajarcodeigniter/mahasiswa/ubah/456`, CodeIgniter akan mengarahkannya ke controller `Mahasiswa` dan menjalankan metode `ubah('456')`.

Dengan konfigurasi ini, mengatur cara pengguna berinteraksi dengan aplikasi melalui URL dan memastikan bahwa URL yang digunakan sesuai dengan struktur routing yang diinginkan.

Untuk kelengkapan code dapat dilihat disini https://github.com/arjunamhv/simpleCRUD_CI3

Informasi Course Terkait
  Kategori: Web Programming
  Course: Dasar Codeigniter 3