Mengisi formulir pendaftaran atau komentar lalu menekan tombol submit mungkin terasa sederhana bagi pengguna. Namun di balik itu, data harus melewati validasi dan pengiriman ke database agar tersimpan dengan benar. Banyak pemula langsung menyimpan data mentah tanpa memeriksa isinya, sehingga rentan error atau serangan. Artikel ini membahas cara mengirim data form ke database dengan PHP secara aman dan rapi.
Mengapa validasi input penting
Tanpa validasi, data seperti email salah format, kolom kosong, atau karakter berbahaya bisa masuk ke database. Akibatnya, aplikasi bisa menampilkan pesan error, data tidak konsisten, bahkan berisiko SQL injection. Validasi menjaga kualitas data agar proses selanjutnya berjalan lancar.
Lakukan validasi di sisi server menggunakan PHP, meskipun sudah ada validasi di sisi klien dengan JavaScript. Validasi klien mudah dilewati, jadi server tetap harus memeriksa ulang.
Menyiapkan form HTML
Buat form sederhana dengan metode POST dan atribut action yang mengarah ke file pemroses, misalnya proses.php. Gunakan elemen input yang sesuai.
<form action="proses.php" method="post">
<label for="nama">Nama:</label>
<input type="text" id="nama" name="nama" required>
<label for="email">Email:</label>
<input type="email" id="email" name="email" required>
<button type="submit">Kirim</button>
</form>
Pastikan setiap input memiliki atribut name yang unik. Atribut ini akan menjadi kunci saat mengakses data di PHP melalui $_POST.
Menangani data di PHP
Di file proses.php, ambil nilai dari $_POST dan simpan dalam variabel. Lakukan trim untuk menghapus spasi di awal dan akhir.
$nama = trim($_POST['nama'] ?? '');
$email = trim($_POST['email'] ?? '');
Gunakan operator null coalescing (??) untuk menghindari undefined index jika field tidak dikirim. Setelah itu, lakukan validasi:
- Pastikan
$namatidak kosong dan panjangnya wajar (misalnya maksimal 100 karakter). - Periksa format email dengan
filter_var($email, FILTER_VALIDATE_EMAIL).
Jika validasi gagal, tampilkan pesan error dan hentikan proses. Jangan lanjut ke database.
if ($nama === '' || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
die('Data tidak valid. Periksa kembali.');
}
Menghubungkan ke database dan menyimpan data
Gunakan PDO atau MySQLi untuk koneksi. PDO lebih fleksibel karena mendukung berbagai database. Berikut contoh dengan PDO:
$dsn = 'mysql:host=localhost;dbname=latihan;charset=utf8mb4';
$user = 'root';
$pass = '';
$pdo = new PDO($dsn, $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Siapkan query dengan placeholder untuk mencegah SQL injection.
$sql = 'INSERT INTO pengguna (nama, email) VALUES (:nama, :email)';
$stmt = $pdo->prepare($sql);
$stmt->execute([':nama' => $nama, ':email' => $email]);
Dengan prepared statement, data yang dikirim tidak akan dieksekusi sebagai perintah SQL. Ini praktik standar yang wajib diterapkan.
Jika ingin menampilkan data yang sudah tersimpan, lihat panduan cara menampilkan data dari database ke HTML dengan PHP untuk langkah lengkapnya.
Menangani error dan umpan balik
Bungkus proses penyimpanan dalam blok try-catch untuk menangkap exception. Tampilkan pesan yang ramah pengguna, tetapi catat detail error di log server untuk debugging.
try {
// koneksi dan eksekusi
} catch (PDOException $e) {
error_log($e->getMessage());
die('Terjadi kesalahan. Coba lagi nanti.');
}
Setelah berhasil menyimpan, alihkan pengguna ke halaman sukses dengan header('Location: sukses.php') dan exit. Ini mencegah pengiriman ulang form saat refresh.
Praktik keamanan tambahan
- Gunakan token CSRF untuk mencegah pengiriman form dari situs lain.
- Batasi ukuran input dan jenis karakter yang diizinkan.
- Simpan password dengan
password_hash(), jangan pernah menyimpannya dalam teks biasa. - Selalu perbarui versi PHP dan library untuk menutup celah keamanan.
Validasi dan sanitasi bukan langkah sekali jadi. Uji form dengan berbagai skenario, termasuk input kosong, karakter aneh, dan email tidak valid.
Ringkasan
Mengirim data form ke database dengan PHP memerlukan validasi input, penggunaan prepared statement, dan penanganan error yang tepat. Mulai dari form HTML, ambil data dengan $_POST, validasi di server, lalu simpan menggunakan PDO. Terapkan juga praktik keamanan seperti token CSRF dan hashing password. Dengan begitu, data yang tersimpan lebih bersih dan aplikasi lebih aman.
Pertanyaan yang Sering Diajukan
Bagaimana jika data yang dikirim mengandung karakter khusus?
Prepared statement akan menangani karakter khusus dengan aman. Pastikan juga koneksi database menggunakan charset yang benar, misalnya utf8mb4, agar karakter unicode tersimpan dengan baik.
Apakah perlu validasi ganda di JavaScript dan PHP?
Validasi di JavaScript meningkatkan pengalaman pengguna karena respons cepat, tetapi validasi di PHP tetap wajib karena JavaScript bisa dimatikan atau dilewati. Keduanya saling melengkapi.
Bagaimana cara menampilkan pesan error yang spesifik?
Simpan pesan error dalam array saat validasi gagal, lalu tampilkan di halaman form. Hindari menampilkan pesan error database mentah ke pengguna karena berpotensi membocorkan informasi sensitif.