BAB 9 – Form & Validasi: Mengamankan Input Pengguna di CodeIgniter

BAB 9 – Form & Validasi: Mengamankan Input Pengguna di CodeIgniter

Setelah menguasai CRUD, langkah selanjutnya adalah mengamankan input pengguna.

Form adalah titik masuk data dari user ke aplikasi. Tanpa validasi dan sanitasi, aplikasi rentan terhadap:

  • Input kosong atau tidak sesuai format
  • SQL Injection
  • XSS (Cross-Site Scripting)

Pada BAB ini, kita akan membahas:

  • Membuat form input
  • Mengambil data POST
  • Validasi form
  • Menampilkan pesan error
  • Sanitasi data

Tujuan Pembelajaran

Setelah menyelesaikan BAB 9, Anda akan mampu:

  1. Membuat form input data di CodeIgniter
  2. Mengambil data POST dengan aman
  3. Melakukan validasi form sebelum disimpan
  4. Menampilkan pesan error ke user
  5. Menyaring data agar aman (sanitasi)

9.1 Membuat Form Input

CI 3

Controller:

class Mahasiswa extends CI_Controller {
    public function tambah() {
        $this->load->view('mahasiswa_form');
    }
}

View mahasiswa_form.php:

<h2>Tambah Mahasiswa</h2>
<form method="post" action="<?= base_url('mahasiswa/simpan') ?>">
    <label>Nama:</label><br>
    <input type="text" name="nama"><br>
    <label>NIM:</label><br>
    <input type="text" name="nim"><br>
    <label>Jurusan:</label><br>
    <input type="text" name="jurusan"><br><br>
    <button type="submit">Simpan</button>
</form>

CI 4

View sama, tinggal menyesuaikan URL action:

<form method="post" action="<?= base_url('mahasiswa/simpan') ?>">

9.2 Mengambil Data POST

CI 3

$nama = $this->input->post('nama', TRUE); // TRUE = XSS filter
$nim = $this->input->post('nim', TRUE);
$jurusan = $this->input->post('jurusan', TRUE);

CI 4

$nama = $this->request->getPost('nama', FILTER_SANITIZE_STRING);
$nim = $this->request->getPost('nim', FILTER_SANITIZE_STRING);
$jurusan = $this->request->getPost('jurusan', FILTER_SANITIZE_STRING);

📌 Tips:

  • Selalu gunakan sanitasi agar data aman dari script berbahaya

9.3 Validasi Form

CI 3

$this->load->library('form_validation');

$this->form_validation->set_rules('nama', 'Nama', 'required|min_length[3]');
$this->form_validation->set_rules('nim', 'NIM', 'required|numeric');
$this->form_validation->set_rules('jurusan', 'Jurusan', 'required');

if($this->form_validation->run() == FALSE) {
    $this->load->view('mahasiswa_form');
} else {
    // Simpan data
}

CI 4

$validation = \Config\Services::validation();

$validation->setRules([
    'nama' => 'required|min_length[3]',
    'nim' => 'required|numeric',
    'jurusan' => 'required'
]);

if(!$validation->withRequest($this->request)->run()) {
    return view('mahasiswa_form', [
        'validation' => $validation
    ]);
} else {
    // Simpan data
}

📌 Catatan:

  • Validasi mencegah input kosong, terlalu pendek, atau salah format
  • Bisa menambahkan validasi email, URL, atau custom regex

9.4 Menampilkan Pesan Error

CI 3

<?php echo validation_errors(); ?>

CI 4

<?php if(isset($validation)): ?>
    <div style="color:red;">
        <?= $validation->listErrors() ?>
    </div>
<?php endif; ?>

📌 Tips:

  • Tampilkan error di atas form
  • Bantu user memahami kesalahan input

9.5 Sanitasi Data

Sanitasi data penting agar aplikasi aman dari serangan XSS dan SQL Injection.

Contoh Sanitasi

  • CI 3 → $this->input->post('nama', TRUE)
  • CI 4 → $this->request->getPost('nama', FILTER_SANITIZE_STRING)

Selain itu:

  • Gunakan Query Builder agar query aman
  • Jangan masukkan input langsung ke HTML tanpa escape

Penutup

Dengan BAB 9 ini, aplikasi Anda sudah mampu:

  • Mengambil input user dengan aman
  • Melakukan validasi form agar data sesuai aturan
  • Menampilkan pesan error yang jelas
  • Menyaring data agar tidak berbahaya

Langkah selanjutnya adalah membuat CRUD dengan validasi dan form lengkap, sehingga aplikasi siap digunakan secara profesional dan aman.