Halo sobat Sidat.ID, bagaimana kabar sobat semua ? semoga selalu dalam keadaan sehat dan sukses. Kali ini kita akan lanjutkan kembali pembahasan kita mengenai Code Igniter 4. Dan pada sesi sebelumnya, kita sudah menyelesaikan bagian view dan insert data, kali ini kita akan lanjutkan ke bagian Update dan Delete Data di Code Igniter 4 dan Memulai Membuat Web Sederhana (P.3).
Edit / Update Data Buku
Tanpa berlama-lama yuk kita mulai pembahasannya. Kita mulai dari v_bookdetail.php , ketika user mengklik button Edit maka akan diarahkan ke halaman edit buku dan di form tersebut akan muncul data buku yang dipilih.
Jadi kita siapkan formnya dan kita buat sebuah file.php dengan nama v_updatebook.php dan berikut ini adalah code yang bisa sobat ketikkan di dalamnya.
<?php echo $this->extend('template/v_template'); ?>
<?php echo $this->section('content'); ?>
<div class="container">
<div class="row">
<div class="col-8">
<h2 class="my-3">Update Book Form</h2>
<form action="/books/updatebook/<?php echo $book['id']; ?>" method="POST">
<!--menghalangi pembajakan dari form lain -->
<?php echo csrf_field(); ?>
<!-- ini untuk slug disembunyikan, karena bukan inputan user -->
<input type="hidden" name="slug" value="<?php echo $book['slug']; ?>">
<div class="form-group row">
<label for="book_title" class="col-sm-3 col-form-label">Book Title</label>
<div class="col-sm-9">
<input type="text" class="form-control <?php echo ($validation->hasError('book_title')) ? 'is-invalid' : ''; ?>" id="book_title" name="book_title" autofocus value="<?php echo (old('book_title')) ? old('book_title') : $book['title'] ?>">
<div class="invalid-feedback">
<?php echo $validation->getError('book_title'); ?>
</div>
</div>
</div>
<div class="form-group row">
<label for="author" class="col-sm-3 col-form-label">Author</label>
<div class="col-sm-9">
<input type="text" class="form-control" id="pubisher" name="author" value="<?php echo (old('author')) ? old('author') : $book['author'] ?>">
</div>
</div>
<div class=" form-group row">
<label for="publisher" class="col-sm-3 col-form-label">Pubisher</label>
<div class="col-sm-9">
<input type="text" class="form-control" id="pubisher" name="publisher" value="<?php echo (old('publisher')) ? old('publisher') : $book['publisher'] ?>">
</div>
</div>
<div class=" form-group row">
<label for="category" class="col-sm-3 col-form-label">Category</label>
<div class="col-sm-9">
<input type="text" class="form-control" id="category" name="category" value="<?php echo (old('category')) ? old('category') : $book['category'] ?>">
</div>
</div>
<div class=" form-group row">
<label for="cover" class="col-sm-3 col-form-label">Book Cover</label>
<div class="col-sm-9">
<input type="text" class="form-control" id="cover" name="cover" value="<?php echo (old('cover')) ? old('cover') : $book['cover'] ?>">
</div>
</div>
<div class=" form-group row">
<div class="col-sm-9">
<button type="submit" class="btn btn-primary">Update Book</button>
</div>
</div>
</form>
</div>
</div>
</div>
<?php echo $this->endSection('content'); ?>
Selanjutnya, kita simpan filenya dan kita buat method pada controller Books.php dengan nama form_updatebook($slug). Dan berikut ini adalah codenya.
public function form_updatebook($slug)
{
$data = [
'title' => "EDIT / UPDATE BOOK",
'validation' => ConfigServices::validation(),
'book' => $this->Tb_bookModel->getBook($slug)
];
return view('books/v_updatebook', $data);
}
Jadi pada tombol Edit , kita akan memanggil controller Books dan memanggil method form_updatebook dan mengirimkan nilai $slug untuk nantinya data buku ditampilkan sesuai dengan $slug yang kita kiriman. Otomatis pada form v_updatebook.php akan terisi oleh data buku.
Sobat perhatikan pada code berikut (di v_updatebook.php)
<form action="/books/updatebook/<?php echo $book['id']; ?>" method="POST">
Kita akan gunakan method updatebook untuk mengambil perubahan yang dilakukan oleh user dan menyimpannya kedalam database. Jadi di controller Books.php kita buat ethod baru dengan nama updatebook. Dan berikut ini adalah code yang bisa sobat ketikkan di dalamnya.
public function updatebook($id)
{
// cek judulnya terlebih dahulu
$oldbook = $this->Tb_bookModel->getBook($this->request->getVar('slug'));
if ($oldbook['title'] == $this->request->getVar('book_title')) {
$rule_title = 'required';
} else {
$rule_title = 'required|is_unique[tb_book.title]';
}
// validasi data, jika ada judul yang sama dan tidak diubah
if (!$this->validate([
'book_title' => [
'rules' => $rule_title,
'errors' => [
'required' => 'Book Title field can not empty ',
'is_unique' => 'Book Title already used in database '
]
]
])) {
$validation = ConfigServices::validation();
return redirect()->to('/books/form_updatebook/' . $this->request->getVar('slug'))->withInput()->with('validation', $validation);
}
$slug = url_title($this->request->getVar('book_title'), '-', true);
$this->Tb_bookModel->save([
'id' => $id,
'title' => $this->request->getVar('book_title'),
'slug' => $slug,
'author' => $this->request->getVar('author'),
'publisher' => $this->request->getVar('publisher'),
'category' => $this->request->getVar('category'),
'cover' => $this->request->getVar('cover')
]);
session()->setFlashdata('message', 'Book Has Been Updated.');
return redirect()->to('/books');
}
Sobat simpan codenya, dan coba jalankan fungsi Editnya. Jadi pada Update / Edit data ini, kita juga berikan validasi (pada code diatas sudah diberikan comment). Karena menggunakan slug untuk proses view data, jadi kita berikan validasi ketika ada peruabahan user dengan menggunakan judul yang sama, maka perubahan tersebut akan ditolak.
Delete / Hapus Data Buku
Oke, selanjutnya kita akan memberikan fungsi Hapus data pada tombol Delete di Book Detail. Untuk menambahkan perintah delete, sebelumnya pada tombol Delete di file v_bookdetail.php kita sudah tambahkan code berikut :
<form action="/books/<?php echo $book['id']; ?>" method="POST" class="d-inline">
<?php echo csrf_field(); ?>
<input type="hidden" name="_method" value="DELETE">
<button type="submit" class="btn btn-danger" onclick="return confirm('Are you sure want to DELETE this book ?'); ">Delete</button>
</form>
Kemduian, kita buat method baru di controller Books.php dengan nama delete($id). Buku akan dihapus dengan berdasarkan id buku yang dikirimkan. Berikut ini adalah codenya :
public function delete($id)
{
$this->Tb_bookModel->delete($id);
session()->setFlashdata('message', 'Book DELETED successfully.');
return redirect()->to('/books');
}
Kalau sudah, sobat bisa menyimpan filenya, dan kemudian uji coba untuk proses Edit dan Delete.
Berikut ini adalah screen shoot untuk proses Update Data
Dan berikut ini adalah hasil ketika update berhasil dilakukan
Dan terkahir untuk bagian delete, jadi sebelum kita benar-benar menghapus data , kita akan ditanya apakah benar ingin menghapus data, klik OK untuk menghapus data.
OK sobat, sekian dulu tutorial berseri mengenai Code Igniter 4. Jika sobat ingin belajar dan menggunakan file yang telah dibuat bisa mendownloadnya dari link dibawah ini. Semoga tutorial kali ini membantu dan meningkatkan kemampuan sobat dalam penerapan pembuatan web menggunakan Code Igniter 4.
Terimakasih, salam Sidat.ID.
Comentarios
Publicar un comentario
Si no puede verlo, puede ir a la pestaña Comentarios de CHAT para que podamos volver a subirlo.
Bienvenido a brindar críticas y sugerencias, siempre y cuando no use elementos de acoso y otros tipos de violencia. cuida tu habla y tus palabras, si eres un adulto. Bienvenido a comentar, cualquiera que sea su sugerencia sobre este blog, se lo agradezco.