Setiap kali saya lihat website yang pakai plugin form kontak — entah itu Contact Form 7 di WordPress, atau berbagai plugin serupa — saya selalu penasaran: kenapa orang mau memasang plugin tambahan, dengan semua dependency dan potensi celah keamanannya, untuk sesuatu yang sebenarnya bisa dibuat sendiri dalam waktu tidak sampai satu jam?
Mungkin jawabannya karena tidak tahu caranya. Dan itu valid — kita semua pernah di posisi tidak tahu.
Jadi saya mau tunjukkan caranya. Sederhana, dari awal, tanpa plugin.
HTML Formnya Dulu
Mulai dari yang paling dasar — struktur HTML form-nya:
<form action="kirim.php" method="POST">
<div class="form-group">
<label for="nama">Nama</label>
<input type="text" id="nama" name="nama" required>
</div>
<div class="form-group">
<label for="email">Email</label>
<input type="email" id="email" name="email" required>
</div>
<div class="form-group">
<label for="pesan">Pesan</label>
<textarea id="pesan" name="pesan" rows="5" required></textarea>
</div>
<button type="submit">Kirim Pesan</button>
</form>
Perhatikan beberapa hal: saya pakai method="POST" bukan GET — data sensitif tidak boleh kelihatan di URL. Saya tambahkan atribut required untuk validasi dasar di browser. Dan setiap input punya label yang terhubung via atribut for — ini penting untuk aksesibilitas.
PHP untuk Menerima dan Mengirim Email
Buat file baru bernama kirim.php. Ini yang akan memproses data dari form:
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Ambil dan bersihkan input
$nama = htmlspecialchars(trim($_POST['nama']));
$email = filter_var(trim($_POST['email']), FILTER_SANITIZE_EMAIL);
$pesan = htmlspecialchars(trim($_POST['pesan']));
// Validasi email
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
die("Format email tidak valid.");
}
// Kirim email
$to = "emailkamu@domain.com";
$subject = "Pesan dari: " . $nama;
$body = "Dari: $nama
Email: $email
Pesan:
$pesan";
$headers = "From: noreply@domain.com
Reply-To: $email";
if (mail($to, $subject, $body, $headers)) {
echo "Pesan berhasil dikirim. Terima kasih!";
} else {
echo "Maaf, ada masalah saat mengirim pesan.";
}
}
?>
Hal Penting yang Jangan Sampai Dilewatkan
Ada beberapa hal yang sering diabaikan orang waktu bikin form kontak sendiri, dan ini yang bikin form buatan sendiri terlihat tidak profesional atau bahkan berbahaya.
Selalu sanitasi input. Jangan pernah langsung pakai data dari $_POST tanpa dibersihkan dulu. Saya pakai htmlspecialchars() dan filter_var() di contoh di atas. Ini mencegah serangan XSS dan injection dasar.
Tambahkan CAPTCHA atau honeypot. Tanpa ini, form kamu akan jadi sasaran bot spam dalam hitungan hari. Cara paling sederhana adalah honeypot: tambahkan field tersembunyi yang tidak akan diisi manusia tapi akan diisi bot. Kalau field itu terisi, abaikan pesannya.
Batasi rate pengiriman. Jangan biarkan orang mengirim form ratusan kali dalam satu menit. Implementasi sederhana bisa pakai session untuk mencatat waktu pengiriman terakhir.
Berikan feedback yang jelas. Setelah form dikirim, redirect ke halaman terima kasih atau tampilkan pesan yang jelas. Jangan biarkan pengguna bingung apakah pesannya terkirim atau tidak.
Form kontak buatan sendiri memang butuh lebih banyak usaha dari sekadar install plugin. Tapi kamu tahu persis apa yang terjadi di dalamnya, tidak ada dependency yang bisa jadi celah keamanan, dan kamu bisa kustomisasi sesuai kebutuhan tanpa batasan.
Ada bagian dari tutorial ini yang kurang jelas, atau ada kasus spesifik yang kamu hadapi? Tulis di komentar — saya akan coba bantu sebisa mungkin.
Belum ada komentar. Jadilah yang pertama menulis.
Tulis Komentar