Membuat CRUD dengan PHP dan MySQL Lengkap dengan Fitur Upload Gambar dan Validasi Input

Table of Contents

Membuat CRUD dengan PHP dan MySQL Lengkap dengan Fitur Upload Gambar seperti yang sudah dijelaskan pada artikel sebelumnya, langkah berikutnya adalah menambahkan fitur Validasi Input.

Pentingnya Validasi Input

Saat membangun aplikasi CRUD dengan PHP dan MySQL, salah satu aspek penting yang sering diabaikan pemula adalah validasi input. Validasi diperlukan untuk memastikan bahwa data yang masuk ke database benar, sesuai format, dan aman.

Tanpa validasi, aplikasi bisa mengalami masalah seperti:

  • Data kosong tersimpan di database.

  • Format data tidak sesuai (misalnya NIM bukan angka).

  • Gambar yang di-upload terlalu besar atau bukan format gambar.

  • Potensi serangan keamanan seperti SQL Injection dan file upload exploit.

Oleh karena itu, kita perlu menambahkan validasi sederhana pada form input maupun saat upload file gambar.

Validasi pada Fitur Create + Upload

Ubah kode di tambah.php dengan validasi:

<?php include 'koneksi.php'; ?>

<h2>Tambah Data Mahasiswa</h2>
<form method="POST" enctype="multipart/form-data">
    <label>Nama:</label>
    <input type="text" name="nama" required><br>
    <label>NIM:</label>
    <input type="text" name="nim" required><br>
    <label>Jurusan:</label>
    <input type="text" name="jurusan" required><br>
    <label>Foto:</label>
    <input type="file" name="foto" accept="image/*"><br>
    <button type="submit" name="simpan">Simpan</button>
</form>

<?php
if (isset($_POST['simpan'])) {
    $nama = htmlspecialchars($_POST['nama']);
    $nim = htmlspecialchars($_POST['nim']);
    $jurusan = htmlspecialchars($_POST['jurusan']);

    // Validasi input kosong
    if (empty($nama) || empty($nim) || empty($jurusan)) {
        echo "Semua field harus diisi!";
        exit;
    }

    // Validasi NIM hanya angka
    if (!is_numeric($nim)) {
        echo "NIM harus berupa angka!";
        exit;
    }

    // Validasi file upload
    $foto = $_FILES['foto']['name'];
    $tmp  = $_FILES['foto']['tmp_name'];
    $size = $_FILES['foto']['size'];
    $folder = "uploads/";

    $foto_baru = null;
    if ($foto != "") {
        $ekstensi = pathinfo($foto, PATHINFO_EXTENSION);
        $ekstensi_valid = ['jpg','jpeg','png','gif'];

        if (!in_array(strtolower($ekstensi), $ekstensi_valid)) {
            echo "Format file tidak valid! (hanya jpg, jpeg, png, gif)";
            exit;
        }

        if ($size > 2*1024*1024) { // maksimal 2MB
            echo "Ukuran file terlalu besar! Maksimal 2MB.";
            exit;
        }

        $foto_baru = time() . "_" . $foto;
        move_uploaded_file($tmp, $folder.$foto_baru);
    }

    $query = "INSERT INTO mahasiswa (nama, nim, jurusan, foto) 
              VALUES ('$nama', '$nim', '$jurusan', '$foto_baru')";
    $result = mysqli_query($koneksi, $query);

    if ($result) {
        echo "Data berhasil disimpan!";
    } else {
        echo "Gagal menyimpan data!";
    }
}
?>

Validasi pada Fitur Update + Ganti Foto

Di edit.php, tambahkan validasi serupa saat mengganti data.

<?php
include 'koneksi.php';

$id = $_GET['id'];
$query = "SELECT * FROM mahasiswa WHERE id=$id";
$result = mysqli_query($koneksi, $query);
$data = mysqli_fetch_assoc($result);

if (isset($_POST['update'])) {
    $nama = htmlspecialchars($_POST['nama']);
    $nim = htmlspecialchars($_POST['nim']);
    $jurusan = htmlspecialchars($_POST['jurusan']);

    if (empty($nama) || empty($nim) || empty($jurusan)) {
        echo "Semua field harus diisi!";
        exit;
    }

    if (!is_numeric($nim)) {
        echo "NIM harus berupa angka!";
        exit;
    }

    if ($_FILES['foto']['name'] != "") {
        $foto = $_FILES['foto']['name'];
        $tmp  = $_FILES['foto']['tmp_name'];
        $size = $_FILES['foto']['size'];
        $folder = "uploads/";
        $ekstensi = pathinfo($foto, PATHINFO_EXTENSION);
        $ekstensi_valid = ['jpg','jpeg','png','gif'];

        if (!in_array(strtolower($ekstensi), $ekstensi_valid)) {
            echo "Format file tidak valid!";
            exit;
        }

        if ($size > 2*1024*1024) {
            echo "Ukuran file terlalu besar! Maksimal 2MB.";
            exit;
        }

        $foto_baru = time() . "_" . $foto;
        move_uploaded_file($tmp, $folder.$foto_baru);

        if ($data['foto'] != "" && file_exists("uploads/".$data['foto'])) {
            unlink("uploads/".$data['foto']);
        }

        $update = "UPDATE mahasiswa 
                   SET nama='$nama', nim='$nim', jurusan='$jurusan', foto='$foto_baru' 
                   WHERE id=$id";
    } else {
        $update = "UPDATE mahasiswa 
                   SET nama='$nama', nim='$nim', jurusan='$jurusan' 
                   WHERE id=$id";
    }

    mysqli_query($koneksi, $update);
    header("Location: index.php");
}
?>

Validasi di Fitur Delete

Untuk hapus data, validasi lebih sederhana, hanya memastikan bahwa file foto yang akan dihapus benar-benar ada. Kode di hapus.php sudah aman karena ada file_exists().

Keuntungan Menambahkan Validasi Input

Dengan adanya validasi, aplikasi CRUD menjadi lebih kuat karena:

  • Data lebih rapi → tidak ada input kosong atau salah format.

  • Lebih aman → mencegah upload file berbahaya dan ukuran terlalu besar.

  • Pengalaman pengguna lebih baik → error bisa langsung ditampilkan saat input salah.

Kesimpulan

Kini kita sudah berhasil membuat aplikasi CRUD dengan PHP dan MySQL lengkap dengan fitur upload gambar dan validasi input.

Fitur yang dimiliki:

  • Create → tambah data + upload gambar dengan validasi format & ukuran file.

  • Read → tampilkan data mahasiswa lengkap dengan foto.

  • Update → ubah data dengan validasi input, serta ganti foto lama.

  • Delete → hapus data sekaligus hapus foto dari folder.

Posting Komentar