Halo, teman-teman, selamat datang kembali di seri pemrograman PHP setiap Jumat di sinapsains.com. Minggu lalu, kita udah belajar array yang kayak rak super buat simpan data banyak sekaligus, lengkap sama tabel nilai siswa. Sekarang, program kalian udah bisa olah data internal, tapi gimana kalau data datang dari luar, kayak dari user yang isi form? Nah, di Minggu 6 ini, kita bahas interaksi dengan formulir dan input pengguna. Bayangin, website kalian bisa nerima masukan dari pengunjung – misalnya, form komentar, pendaftaran event sekolah, atau bahkan kuis online. Ini langkah besar buat bikin app web yang “hidup” dan interaktif, nggak cuma tampil info statis.
Kenapa topik ini penting? Di era digital 2025, hampir semua situs pake form buat kumpul data user, dari login sampe belanja online. PHP punya cara mudah tangani ini pakai superglobal seperti $_GET dan $_POST, yang simpan data dari form. Tapi hati-hati, input user bisa bahaya kalau nggak divalidasi – bisa disusupi kode jahat kayak XSS (cross-site scripting). Di artikel ini, kita bahas dari dasar: beda GET dan POST, cara bikin form HTML yang kirim data ke PHP, olah input, validasi sederhana, sampe proyek kecil kayak form pendaftaran. Kita juga tambahin tips keamanan dasar biar app kalian aman dari hacker pemula. Coba langsung di XAMPP, Laragon, atau WSL. Yuk, bikin website yang bisa “ngobrol” sama user!
Apa Itu Formulir dan Input Pengguna? Pintu Masuk Data ke Website
Formulir di web adalah bagian HTML yang biarin user masukin data, kayak teks, pilihan, atau file. Data ini dikirim ke server (PHP) buat diolah – misalnya, simpan ke database atau tampil balik. PHP tangani input lewat superglobal array: $_GET, $_POST, $_REQUEST (gabungan keduanya), dan lain-lain seperti $_FILES buat upload.
Cara kerja: User isi form, klik submit, data dikirim ke URL yang ditentuin di atribut action form. Metode kirim ada dua: GET (data tampil di URL) atau POST (data hidden di body request). PHP ambil data itu dan olah – echo balik, simpan, atau apa aja.
Contoh form HTML sederhana:
<form action="proses.php" method="post">
Nama: <input type="text" name="nama"><br>
Umur: <input type="number" name="umur"><br>
<input type="submit" value="Kirim">
</form>
Ini kirim data ke proses.php pakai POST. Di proses.php:
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$nama = $_POST["nama"];
$umur = $_POST["umur"];
echo "Halo $nama, umurmu $umur tahun!";
}
?>
Coba buat dua file, buka form di browser, isi, submit. Data muncul! Ini dasar interaksi web.
Beda Metode GET dan POST: Kapan Pakai Mana?
Dua metode utama form: GET dan POST, masing-masing punya plus minus.
- GET: Data dikirim lewat URL (query string), misal ?nama=Budi&umur=16. Mudah bookmark, tapi nggak aman buat data sensitif (password) karena tampil di URL dan log browser. Batas data kecil (~2000 char). Pakai buat search atau filter, yang nggak ubah data server.
Contoh: Form search.
<form action="search.php" method="get">
Cari: <input type="text" name="q">
<input type="submit">
</form>
Di search.php:
$query = $_GET["q"]; echo "Hasil cari: $query";
- POST: Data dikirim hidden di body HTTP, nggak tampil di URL. Aman buat password atau data besar (upload file). Nggak bisa bookmark, tapi cocok buat ubah data server kayak submit form pendaftaran.<grok:render card_id=”7627bd” card_type=”citation_card” type=”render_inline_citation”> 1</grok:render>
Gunakan POST buat aksi yang ubah data, GET buat ambil data.<grok:render card_id=”8d3eb9″ card_type=”citation_card” type=”render_inline_citation”> 6</grok:render> Di 2025, pakai HTTPS selalu biar POST aman dari eavesdropping.<grok:render card_id=”b394e4″ card_type=”citation_card” type=”render_inline_citation”> 12</grok:render>
Olah Input dan Validasi: Jangan Percaya User!
Input user bisa apa aja – bagus atau jahat. Validasi penting buat pastiin data benar dan aman.<grok:render card_id=”0fccb7″ card_type=”citation_card” type=”render_inline_citation”> 16</grok:render> <grok:render card_id=”7f9925″ card_type=”citation_card” type=”render_inline_citation”> 10</grok:render> Gunakan filter_input() atau filter_var() buat cek tipe, range, dll.<grok:render card_id=”e13b3e” card_type=”citation_card” type=”render_inline_citation”> 14</grok:render>
Contoh validasi email:
$email = $_POST["email"];
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Email valid!";
} else {
echo "Email salah!";
}
Sanitasi: Bersihin data dari kode jahat. Pakai htmlspecialchars() buat cegah XSS – user masukin , tapi ditampilkan sebagai teks.
$nama = htmlspecialchars($_POST["nama"], ENT_QUOTES, 'UTF-8');
Trim() buat hilangin spasi ekstra: $nama = trim($nama);
Best practice 2025: Selalu validasi server-side, jangan cuma client-side (JS), karena bisa dibypass. Gunakan CSRF token buat cegah submit palsu, tapi buat pemula, mulai dari dasar.
Proyek Kecil: Form Pendaftaran Sederhana
Mari bikin form pendaftaran event sekolah. Satu file aja (action ke dirinya sendiri). Simpan sebagai daftar.php:
<!DOCTYPE html>
<html>
<head><title>Pendaftaran Event</title></head>
<body>
<h2>Pendaftaran Event Sains</h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Nama: <input type="text" name="nama"><br>
Email: <input type="email" name="email"><br>
Umur: <input type="number" name="umur" min="15" max="20"><br>
<input type="submit" name="submit" value="Daftar">
</form>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$nama = htmlspecialchars(trim($_POST["nama"]));
$email = filter_var($_POST["email"], FILTER_SANITIZE_EMAIL);
$umur = filter_var($_POST["umur"], FILTER_SANITIZE_NUMBER_INT);
if (!empty($nama) && filter_var($email, FILTER_VALIDATE_EMAIL) && $umur >= 15 && $umur <= 20) {
echo "<h3>Selamat $nama! Kamu terdaftar dengan email $email, umur $umur tahun.</h3>";
} else {
echo "<h3>Input salah! Cek lagi ya.</h3>";
}
}
?>
</body>
</html>
Coba isi, submit. Kalau valid, tampil pesan sukses. Ini gabung form, POST, sanitasi, validasi. Tambah array buat simpan data multiple submit (session atau file buat simulasi database).
Tips untuk Pemula: Aman dan Efisien
- Pakai POST buat data sensitif, GET buat non-sensitif.
- Selalu sanitasi output dengan htmlspecialchars().
- Validasi semua input: Cek empty, tipe, range.
- Hindari SQL injection kalau nanti ke database: Pakai prepared statements.
- Di Laragon: Test form dengan ngrok buat share ke HP.
- Best practice 2025: Gunakan HTTPS, limit ukuran POST, dan framework kayak Laravel buat validasi otomatis nanti.
- Jangan simpan password plain text – hash pakai password_hash().
Penutup
Interaksi form bikin PHP jadi gerbang ke app web nyata! Kalian sekarang bisa kumpul dan olah data user dengan aman. Minggu depan, kita kenalan database MySQL biar data permanen. Share form pendaftaran kalian di komentar sinapsains.com. Kalau stuck, cek forum atau tanya teman. Selamat coding, future web dev!
Referensi
- W3Schools. (2025). PHP Form Handling. Diakses dari https://www.w3schools.com/php/php_forms.asp
- Reintech. (2025). Handling PHP Forms: GET, POST, and Validation. Diakses dari https://reintech.io/blog/handling-php-forms-get-post-validation
- Tutorials Point. (2025). PHP – GET & POST. Diakses dari https://www.tutorialspoint.com/php/php_get_post.htm
- GeeksforGeeks. (2025). PHP Form Handling. Diakses dari https://www.geeksforgeeks.org/php/php-form-processing/
- PHP Manual. (2025). Dealing with Forms. Diakses dari https://www.php.net/manual/en/tutorial.forms.php
- Moldstud. (2025). Essential PHP Security Practices. Diakses dari https://moldstud.com/articles/p-essential-php-security-practices-how-to-sanitize-user-input
- HackMD. (2025). 10 Security Best Practices for PHP. Diakses dari https://hackmd.io/tCKn60evTsWxNIWDAwnqVQ
- TuxCare. (2025). 5 PHP Vulnerabilities In 2025. Diakses dari https://tuxcare.com/blog/php-vulnerability/
- Medium. (2025). PHP Security Best Practices. Diakses dari https://medium.com/%40roman-huliak/php-security-best-practices-what-to-avoid-and-how-to-stay-safe-e52861491d24
- Vaadata. (2025). PHP Security Best Practices. Diakses dari https://www.vaadata.com/blog/php-security-best-practices-vulnerabilities-and-attacks/
- Zend. (2025). How to Secure PHP. Diakses dari https://www.zend.com/blog/tips-php-security
- Devacetech. (2025). PHP Security Best Practices. Diakses dari https://www.devacetech.com/insights/php-security-best-practices
- eSecurityPlanet. (2025). Input Sanitization. Diakses dari https://www.esecurityplanet.com/endpoint/prevent-web-attacks-using-input-sanitization/
