Bagaimana Cara Insert Data Pada Codeigniter 4 #8

image_pdf

Setelah sebelumnya berhasil menampilkan data yang ada di database, sekarang kita akan mencoba menambahkan data pada database. Pada file index.php di folder buku silahkan tambahkan button “Tambah Data Buku” diatas tag <table> lalu arahkan ke method create pada controller Crud, seperti code dibwah ini :

<a href="/crud/create" class="btn btn-primary mb-3">Tambah Data Buku</a>

Selanjutnya silahkan buat sturktur folder Views sebagai berikut :

Struktur Folder Views

Pada file create.php tuliskan code sebagai berikut :

<div class="container">
    <div class="row">
        <div class="col-8">
            <h2 class="my-3">Form Tambah Data Buku</h2>

            <form action="/crud/simpan" method="POST">
                // CSRF (Cross Site Request Forgery) merupakan salah satu teknik penetrasi pada celah keamanan website.
                <?= csrf_field(); ?>
                <div class="row mb-3">
                    <label for="judul" class="col-sm-2 col-form-label">Judul</label>
                    <div class="col-sm-10">
                        <input type="text" class="form-control" id="judul" name="judul" autofocus>
                    </div>
                </div>
                <div class="row mb-3">
                    <label for="penulis" class="col-sm-2 col-form-label">Penulis</label>
                    <div class="col-sm-10">
                        <input type="text" class="form-control" id="penulis" name="penulis">
                    </div>
                </div>
                <div class="row mb-3">
                    <label for="penerbit" class="col-sm-2 col-form-label">Penerbit</label>
                    <div class="col-sm-10">
                        <input type="text" class="form-control" id="penerbit" name="penerbit">
                    </div>
                </div>
                <div class="row mb-3">
                    <label for="cover" class="col-sm-2 col-form-label">Cover</label>
                    <div class="col-sm-10">
                        <input type="text" class="form-control" id="cover" name="cover">
                    </div>
                </div>

                <button type="submit" class="btn btn-primary">Tambah Data</button>
            </form>


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

Lalu kita akan membuat controller Crud.php, pada file controller ini buat sebuah method create untuk menampilkan view create.php pada folder view

<?php

namespace App\Controllers;

class Crud extends BaseController
{
    public function create()
    {
        $data = [
            'title' => 'Form Tambah Data Buku',
        ];

        echo view('template/header', $data);
        return view('buku/crud/create', $data);
        echo view('template/footer');
    }

}

Selanjutnya kita akan mengarahkan action dari form pada file create.php pada controller crud dan method simpan (<form action=”/crud/simpan” method=”POST”>) seperti code dibawah :

<?php

namespace App\Controllers;

use App\Models\BukuModel;

class Crud extends BaseController
{
    protected $BukuModel;
    public function __construct()
    {
        $this->BukuModel = new BukuModel();
    }

    public function create()
    {
        $data = [
            'title' => 'Form Tambah Data Buku',
        ];

        echo view('template/header', $data);
        return view('buku/crud/create', $data);
        echo view('template/footer');
    }

    public function simpan()
    {
        // url_title digunakan untuk membuat field slug pada database terisi otomatis
        $slug = url_title($this->request->getVar('judul'), '-', true);

        $this->BukuModel->save([
            'judul'     => $this->request->getVar('judul'),
            'slug'      => $slug,
            'penulis'   => $this->request->getVar('penulis'),
            'penerbit'  => $this->request->getVar('penerbit'),
            'cover'     => $this->request->getVar('cover')
        ]);

        return redirect()->to('/buku');
    }
}

Kemudian atur field mana saja yang kita ingin isi manual pada BukuModel.php seperti dibawah ini

<?php

namespace App\Models;

use CodeIgniter\Model;

class BukuModel extends Model
{
    protected $table      = 'buku';
    protected $useTimestamps = true;
    //tambahkan field yang bisa diisi manual oleh user
    protected $allowedFields = ['judul', 'slug', 'penulis', 'penerbit', 'cover'];

    public function getBuku($slug = false)
    {
        //jika tidak ada slug maka tampilkan semua
        if ($slug == false) {
            return $this->findAll();
        }
        //jika ada slug maka tampilkan data pertama
        return $this->where(['slug' => $slug])->first();
    }
}

Seleah selesai silahkan inputkan 1 buah judul, dan jika sudah lalu simpan. Maka hasilnya jika tidak error datanya berhasil ditambahkan pada database

Agar ketika disimpan ada pesan bahwa data sudah berhasil disimpan, kita memerlukan flashdata, tambahkan flashdata pada controller Crud.php di method simpan:

session()->setFlashdata('pesan', 'Data berhasil ditambahkan.');

Lalu untuk menangkap pesan, letakkan flashdata pada file index.php di folder buku, letakan setelah tombol Tambah Data Buku

            <?php if (session()->getFlashdata('pesan')) : ?>
                <div class="alert alert-success" role="alert">
                    <?= session()->getFlashdata('pesan'); ?>
                </div>
            <?php endif; ?>

Maka hasilnya sebagai berikut :