#Part 4: Validasi Form, Flashdata, dan Upload Gambar di CodeIgniter 4 Lengkap 10 Jul 2026

#Part 4: Validasi Form, Flashdata, dan Upload Gambar di CodeIgniter 4 Lengkap

#Part 4: Validasi Form, Flashdata, dan Upload Gambar di CodeIgniter 4 Lengkap

Di #Part 3 kita sudah berhasil bikin CRUD. Tapi ada masalah besar: User bisa submit form kosong. Atau upload file .exe yang bisa merusak server. Bahaya!

Di part ini kita akan "mengunci" aplikasi kita. Kita akan belajar 3 hal penting: Validasi Form, Flashdata, dan Upload Gambar. Ini skill wajib untuk aplikasi production.

1. Kenapa Validasi Server Side Wajib?

Banyak pemula cuma pakai required di HTML. Itu gampang diakalin. Hacker bisa matiin JS dan submit data kosong.

Validasi Server Side = dicek di PHP/Controller. Mau dihack gimana pun tetap ketahuan. CI4 punya library Validasi yang sangat powerful.

2. Implementasi Validasi di Controller Produk

Kita lanjutkan project #Part 3. Buka method store() dan update() di Produk.php

public function store()
{
    $rules = [
        "nama_produk" => "required|min_length[3]|max_length[100]",
        "harga"       => "required|numeric|greater_than[0]",
        "stok"        => "required|integer|greater_than_equal_to[0]",
        "gambar"      => "uploaded[gambar]|is_image[gambar]|mime_in[gambar,image/jpg,image/jpeg,image/png]|max_size[gambar,2048]"
    ];

    $errors = [
        "nama_produk" => [
            "required" => "Nama Produk wajib diisi",
            "min_length" => "Minimal 3 karakter"
        ],
        "harga" => [
            "required" => "Harga wajib diisi",
            "numeric" => "Harga harus angka"
        ]
    ];

    if(!$this->validate($rules, $errors)) {
        return redirect()->back()->withInput()->with("errors", $this->validator->getErrors());
    }

    // jika lolos validasi, lanjut simpan
    $this->produkModel->save($this->request->getPost());
    return redirect()->to("/produk")->with("success", "Data berhasil ditambah");
}

Penjelasan: uploaded wajib upload. is_image pastikan file gambar. max_size max 2MB. Array $errors buat custom pesan biar user paham.

3. Menampilkan Error dan Flashdata di View

Flashdata = pesan 1x tampil lalu hilang. Cocok untuk "Data berhasil disimpan"

Di View index.php, taruh di atas tabel:





getFlashdata("success")): ?>
    
getFlashdata("success") ?>





Di View create.php, di bawah tiap input:

">
 

4. Tutorial Upload Gambar Produk Lengkap

Langkah upload aman di CI4:

  1. Buat Folder: Buat folder public/uploads/produk. Kasih permission 755
  2. Ubah Form: Tambahkan enctype="multipart/form-data" di tag
  3. Kode Upload di Controller:
$gambar = $this->request->getFile("gambar");
if($gambar->isValid() && !$gambar->hasMoved()) {
    $namaBaru = $gambar->getRandomName(); // biar nama file unik
    $gambar->move("uploads/produk", $namaBaru);
    // simpan $namaBaru ke database
}

Bonus: Resize Gambar Otomatis

Biar web tidak berat, kita resize. CI4 punya Image Library:

$image = ConfigServices::image()->withFile("uploads/produk/".$namaBaru)->fit(300, 300, "center")->save("uploads/produk/thumb_".$namaBaru);

5. Tips Keamanan Upload File

Bahaya Solusi CI4
Upload file PHP Gunakan mime_in dan is_image
Nama file sama Gunakan getRandomName()
File terlalu besar Gunakan max_size

Kesimpulan

Dengan Validasi + Upload ini, aplikasi CRUD kamu sudah setara aplikasi beneran. Di #Part 5: Cara Deploy ke Hosting kita akan upload semua ini ke internet.

FAQ

Perbedaan withInput() dan with()?

withInput() mengembalikan data lama ke form. with("success", "...") untuk flashdata.

Gambar tidak mau ke upload?

Cek 3 hal: 1. enctype form 2. permission folder 3. max_size di php.ini

Apakah validasi client side masih perlu?

Perlu untuk UX. Tapi validasi server side wajib untuk keamanan.

Males Ngoding Sendiri?

Tim Culobo siap buatin website, ajarin coding, atau naikin SEO web kamu.

Hubungi Kami
💬

Belum ada diskusi

Jadilah yang pertama bertanya tentang artikel ini

Ada Pertanyaan? Konsultasi Gratis

Tim Culobo jawab dalam 24 jam. Mau belajar coding, bikin website, atau naikin SEO.

*Kami balas maksimal 1x24 jam di hari kerja

Tutorial Culobo Terbaru

Tutorial & Coding

Panduan belajar programming step-by-step dari nol. Mulai dari Laravel, Python, hingga tips praktik pembuatan project nyata.

Cara Menampilkan Data dari Database ke Website dengan Controller dan Blade Laravel 13
30 Jul 2026

Cara Menampilkan Data dari Database ke Website dengan Controller dan Blade Laravel 13

Tujuan Tutorial Part 3 Di Part 1 kita sudah install Laravel 13. Di Part 2 kita sudah konek ke database. Nah di Part 3 i...

Baca Selengkapnya →
Cara Koneksi Laravel 13 ke Database MySQL dan Setting File.env Lengkap
29 Jul 2026

Cara Koneksi Laravel 13 ke Database MySQL dan Setting File.env Lengkap

Mengapa Koneksi Database Penting di Laravel? Setelah berhasil menginstall Laravel 13 di Part 1, langkah selanjutnya ada...

Baca Selengkapnya →
#Part 1: Cara Install Laravel 13 di Composer untuk Pemula Lengkap 2026
29 Jul 2026

#Part 1: Cara Install Laravel 13 di Composer untuk Pemula Lengkap 2026

Apa itu Laravel 13? Laravel 13 adalah versi terbaru dari framework PHP paling populer di dunia. Laravel memudahkan deve...

Baca Selengkapnya →