Cara Membuat Form Input Data dengan PHP dan MySQL

Form input adalah jembatan antara pengguna dan database. Setiap kali seseorang mendaftar, mengisi buku tamu, atau menambah produk, mereka memakai form. Pada tutorial ini kita akan membuat form input data dengan PHP dan MySQL secara lengkap: mulai dari membuat form, memvalidasi isian, menyimpannya ke database dengan aman, hingga menampilkan datanya kembali.

Yang Akan Kita Buat

Sebuah buku tamu sederhana: pengunjung mengisi nama, email, dan pesan; data tersimpan ke database dan langsung ditampilkan di bawah form.

Diagram alur form input data PHP ke database MySQL
Diagram alur form input data PHP ke database MySQL

Langkah 1: Membuat Tabel

CREATE TABLE buku_tamu (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nama VARCHAR(100) NOT NULL,
    email VARCHAR(100) NOT NULL,
    pesan TEXT NOT NULL,
    dibuat TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Langkah 2: File Koneksi

<?php
$koneksi = new mysqli("localhost", "root", "", "latihan");
if ($koneksi->connect_error) {
    die("Koneksi gagal: " . $koneksi->connect_error);
}
?>

Langkah 3: Membuat Form dan Menyimpan Data

Buat file index.php. Bagian PHP di atas memproses pengiriman form, bagian HTML di bawah menampilkan formnya:

<?php
require "koneksi.php";

$pesan_sukses = "";
$errors = [];

if ($_SERVER["REQUEST_METHOD"] === "POST") {
    // 1. Ambil & bersihkan input
    $nama  = trim($_POST["nama"]);
    $email = trim($_POST["email"]);
    $pesan = trim($_POST["pesan"]);

    // 2. Validasi
    if ($nama === "")  $errors[] = "Nama wajib diisi.";
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) $errors[] = "Email tidak valid.";
    if ($pesan === "") $errors[] = "Pesan wajib diisi.";

    // 3. Simpan jika tidak ada error
    if (empty($errors)) {
        $stmt = $koneksi->prepare("INSERT INTO buku_tamu (nama, email, pesan) VALUES (?, ?, ?)");
        $stmt->bind_param("sss", $nama, $email, $pesan);
        $stmt->execute();
        $pesan_sukses = "Terima kasih, pesan Anda tersimpan!";
    }
}
?>
<!DOCTYPE html>
<html lang="id">
<head><meta charset="UTF-8"><title>Buku Tamu</title></head>
<body>
    <h2>Buku Tamu</h2>

    <?php if ($pesan_sukses): ?>
        <p style="color:green"><?= htmlspecialchars($pesan_sukses) ?></p>
    <?php endif; ?>

    <?php foreach ($errors as $e): ?>
        <p style="color:red"><?= htmlspecialchars($e) ?></p>
    <?php endforeach; ?>

    <form method="post">
        <label>Nama:</label><br>
        <input type="text" name="nama" required><br><br>
        <label>Email:</label><br>
        <input type="email" name="email" required><br><br>
        <label>Pesan:</label><br>
        <textarea name="pesan" rows="4" required></textarea><br><br>
        <button type="submit">Kirim</button>
    </form>
</body>
</html>

Penjelasan tiga langkah pemrosesan

  • Bersihkan: trim() menghapus spasi berlebih agar input berisi hanya spasi tidak lolos.
  • Validasi: filter_var(..., FILTER_VALIDATE_EMAIL) memastikan format email benar sebelum disimpan.
  • Simpan aman: prepared statement (prepare + bind_param) mencegah SQL injection.

Langkah 4: Menampilkan Data yang Tersimpan

Tambahkan kode ini di bawah form (sebelum </body>) untuk menampilkan semua pesan yang masuk:

<h3>Pesan Masuk</h3>
<?php
$hasil = $koneksi->query("SELECT * FROM buku_tamu ORDER BY id DESC");
while ($row = $hasil->fetch_assoc()):
?>
    <div style="border:1px solid #ccc; padding:10px; margin:8px 0">
        <strong><?= htmlspecialchars($row["nama"]) ?></strong>
        (<?= htmlspecialchars($row["email"]) ?>)<br>
        <?= nl2br(htmlspecialchars($row["pesan"])) ?>
    </div>
<?php endwhile; ?>

Fungsi nl2br() mengubah baris baru pada pesan menjadi <br> agar tampil rapi, dan htmlspecialchars() mencegah XSS.

Kesalahan Umum

  • Data tidak tersimpan — cek nama kolom di query cocok dengan tabel, dan cek error dengan $stmt->error.
  • Validasi dilewati — jangan hanya mengandalkan atribut required di HTML; selalu validasi di PHP karena HTML bisa dilewati.
  • Tidak memakai prepared statement — membuka celah SQL injection.
  • Lupa htmlspecialchars() saat menampilkan data pengguna.

Kesimpulan

Anda telah membuat form input data PHP dan MySQL lengkap dengan validasi, penyimpanan aman, dan tampilan data. Pola “bersihkan → validasi → simpan dengan prepared statement” ini berlaku untuk semua form. Langkah selanjutnya, kembangkan menjadi CRUD lengkap agar data juga bisa diedit dan dihapus.

Referensi: untuk penjelasan fungsi lebih mendalam, kunjungi dokumentasi resmi PHP (php.net).

Baca Juga

Ali Akbar

Software Developer yang fokus mengembangkan aplikasi berbasis Web dan Desktop. Senang mempelajari teknologi baru terutama di bidang web design dan web development.

View all posts by Ali Akbar →

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *