Input form adalah gerbang utama data masuk ke aplikasi PHP. Ada beberapa cara mengambil nilainya, dan pilihan yang keliru bisa membuka celah keamanan atau menyulitkan validasi. Artikel ini membandingkan cara mengambil nilai input form di PHP dari segi keamanan, kemudahan, dan konteks pemakaian.

Superglobal $_POST dan $_GET: Cara Klasik

Mayoritas tutorial PHP memakai $_POST dan $_GET. Keduanya array superglobal yang sudah tersedia di mana saja, sehingga kode terasa ringkas.

$nama = $_POST['nama'] ?? '';
$id = $_GET['id'] ?? 0;

Operator null coalescing (??) mencegah error saat key tidak ada. Namun nilai yang diambil tetap berupa string mentah. Kalau form mengirim angka, kamu harus mengonversinya sendiri.

Masalah utamanya bukan pada sintaks, melainkan pada kebiasaan. Banyak kode langsung memakai $_POST[‘x’] tanpa memeriksa tipe atau rentang nilai. Akibatnya, data sampah bisa masuk ke query database atau ditampilkan ke halaman.

$_GET juga menyimpan data di URL. Pengguna bisa mengubah nilai dengan mudah. Jangan pernah memakai $_GET untuk operasi yang mengubah data, seperti menghapus atau memperbarui record.

filter_input(): Validasi Sejak Awal

Fungsi filter_input() mengambil nilai dari sumber input dan langsung menerapkan filter. Pendekatan ini memaksa kamu menentukan tipe data yang diharapkan.

$umur = filter_input(INPUT_POST, 'umur', FILTER_VALIDATE_INT);
if ($umur === false) {
    // nilai tidak valid
}

filter_input() mengembalikan null jika key tidak ada, false jika validasi gagal, dan nilai yang sudah difilter jika berhasil. Perbedaan null dan false ini penting untuk membedakan antara field kosong dan nilai tidak valid.

Kelemahannya, filter_input() tidak membaca nilai yang diubah secara manual, misalnya saat testing dengan $_POST[‘x’] = ‘…’. Selain itu, filter bawaan PHP tidak selalu cocok untuk aturan bisnis spesifik.

Untuk validasi yang lebih kompleks, kamu tetap perlu memeriksa panjang string, format email, atau rentang angka secara manual setelah filter_input().

Membaca Input dari CLI: readline() dan $argv

PHP juga dipakai untuk skrip baris perintah. Di sini tidak ada form HTML, jadi $_POST dan $_GET tidak tersedia.

Untuk argumen, gunakan $argv. Untuk input interaktif, gunakan readline().

$nama = readline('Nama: ');
echo "Halo, $naman";

Metode ini hanya relevan untuk skrip CLI, bukan aplikasi web. Jangan mencampurnya dengan penanganan form.

Memilih Berdasarkan Kebutuhan

Berikut perbandingan singkat untuk membantu memilih:

  • $_POST / $_GET: cocok untuk prototipe cepat atau kode internal yang sudah memiliki lapisan validasi terpisah.
  • filter_input(): pilihan aman untuk aplikasi web yang menerima input langsung dari pengguna, terutama data sensitif.
  • readline() / $argv: khusus untuk skrip CLI dan alat bantu terminal.

Kalau ingin validasi yang lebih terstruktur, kamu bisa menggabungkan filter_input() dengan pustaka validasi. Namun untuk sebagian besar kasus, filter_input() sudah cukup asal diikuti pemeriksaan tambahan.

Perhatikan juga konsistensi. Jika memakai $_POST di satu tempat dan filter_input() di tempat lain, pastikan tim memahami alasannya. Campuran yang tidak terdokumentasi menyulitkan perawatan.

Kesalahan Umum dan Cara Menghindarinya

Berikut beberapa jebakan yang sering muncul:

  • Menganggap $_POST selalu berisi nilai yang diharapkan. Selalu periksa keberadaan key dengan isset() atau ??.
  • Memakai $_GET untuk operasi destruktif. Gunakan $_POST untuk operasi yang mengubah data.
  • Lupa bahwa filter_input() tidak membaca nilai yang diubah manual saat testing. Gunakan filter_var() pada nilai yang sudah diambil jika perlu.
  • Tidak membedakan antara string kosong dan null. Tentukan perilaku aplikasi sejak awal.

Untuk menghindari SQL injection, selalu gunakan prepared statement. Cara mengambil nilai input tidak menghilangkan kebutuhan akan query yang aman. Jika kamu memakai PDO, ada baiknya membaca perbandingan metode koneksi database PHP: PDO vs MySQLi untuk memilih pendekatan yang sesuai.

Integrasi dengan Frontend dan Debugging

Di sisi klien, JavaScript sering dipakai untuk mengambil nilai input sebelum dikirim ke server. Jika kamu memakai jQuery, ada beberapa cara mengambil nilai input. Pilihan antara val(), attr(), dan prop() bisa memengaruhi hasil. Ulasan lengkapnya ada di memilih cara mengambil nilai input di jQuery: val(), attr(), atau prop().

Saat proses debugging, kamu perlu melihat nilai yang benar-benar diterima PHP. Gunakan var_dump() atau logger untuk memeriksa isi $_POST. Jika belum terbiasa, lihat perbandingan cara debug PHP: var dump, Xdebug, dan logger untuk memilih alat yang tepat.

Untuk pengembangan awal, pastikan ekstensi PHP yang diperlukan sudah aktif. Panduan 7 ekstensi PHP untuk pemula: mana yang perlu diaktifkan? bisa membantu memeriksa konfigurasi.

Ringkasan

Mengambil nilai input form di PHP bisa dilakukan dengan $_POST, $_GET, filter_input(), atau readline() untuk CLI. Untuk aplikasi web, filter_input() menawarkan validasi bawaan yang lebih aman, sementara $_POST dan $_GET cocok untuk kode yang sudah memiliki lapisan validasi. Pilih metode yang konsisten dan selalu ikuti dengan pemeriksaan tambahan sesuai aturan bisnis.

Pertanyaan yang Sering Diajukan

Apa beda $_POST dan filter_input()?

$_POST mengambil nilai mentah dari form, sedangkan filter_input() langsung menerapkan filter validasi dan membedakan antara key yang tidak ada, nilai tidak valid, dan nilai valid.

Apakah filter_input() cukup aman untuk semua input?

filter_input() membantu mengurangi risiko, tetapi tidak menggantikan validasi bisnis. Kamu tetap perlu memeriksa panjang, format, dan rentang nilai sesuai kebutuhan aplikasi.

Kapan sebaiknya memakai $_GET?

Gunakan $_GET untuk data yang hanya membaca, seperti parameter pencarian atau halaman. Jangan pakai $_GET untuk operasi yang mengubah data karena nilainya mudah dimanipulasi melalui URL.