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")): ?>
Di View create.php, di bawah tiap input:
">
4. Tutorial Upload Gambar Produk Lengkap
Langkah upload aman di CI4:
- Buat Folder: Buat folder
public/uploads/produk. Kasih permission 755 - Ubah Form: Tambahkan
enctype="multipart/form-data"di tag - 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.
Lihat 3 Layanan Kami