#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

Article Culobo Terbaru

Tips & Karir

Artikel non-teknis seputar persiapan karir programmer, mitos dunia coding, tips belajar otodidak, hingga panduan untuk anak sekolah & kuliah.

7 Prompt ChatGPT Terbaik untuk Skripsi dan Tugas Akhir (Hasil Lebih Akurat & Anti-Halusinasi)
07 Aug 2026

7 Prompt ChatGPT Terbaik untuk Skripsi dan Tugas Akhir (Hasil Lebih Akurat & Anti-Halusinasi)

Mengerjakan skripsi atau tugas akhir sering kali menjadi momen paling menguras pikiran selama masa perkuliahan. Mulai da...

Baca Selengkapnya →
Ga Jago Matematika Bisa Jadi Programmer? Ini Faktanya
14 Jul 2026

Ga Jago Matematika Bisa Jadi Programmer? Ini Faktanya

Mitos Terbesar Dunia Coding "Mau jadi programmer? Harus jago matematika dulu." Bro stop. Itu mitos paling ngaco yang b...

Baca Selengkapnya →
5 Alasan Anak SMA Harus Belajar Coding Dari Sekarang
14 Jul 2026

5 Alasan Anak SMA Harus Belajar Coding Dari Sekarang

Kenapa Harus Nunggu Kuliah? Bro, zaman udah beda. Dulu orang bilang "kuliah dulu baru belajar coding". Sekarang? Anak S...

Baca Selengkapnya →