Membuat CRUD dengan PHP dan MySQL Lengkap dengan Fitur Upload Gambar
Setelah memahami dasar CRUD dengan PHP dan MySQL seperti yang sudah dijelaskan pada artikel sebelumnya, langkah berikutnya adalah menambahkan fitur upload file. Fitur ini sangat sering digunakan, misalnya untuk mengunggah foto profil, dokumen, atau gambar produk.
Pada artikel ini, kita akan melanjutkan project CRUD mahasiswa dan menambahkan kolom foto pada tabel database. Nantinya, setiap data mahasiswa bisa memiliki gambar profil yang diunggah melalui form.
Tambahan Kolom pada Database
Pertama, kita perlu menambahkan kolom foto
pada tabel mahasiswa
agar bisa menyimpan nama file gambar.
ALTER TABLE mahasiswa ADD foto VARCHAR(255) AFTER jurusan;
Sekarang tabel mahasiswa
memiliki kolom: id
, nama
, nim
, jurusan
, foto
. Kolom foto
akan menyimpan nama file gambar yang di-upload.
Modifikasi Fitur Create (+ Upload File)
Ubah file tambah.php
agar bisa mengunggah file.
<?php include 'koneksi.php'; ?>
<form method="POST" action="" enctype="multipart/form-data">
<label>Nama:</label>
<input type="text" name="nama"><br>
<label>NIM:</label>
<input type="text" name="nim"><br>
<label>Jurusan:</label>
<input type="text" name="jurusan"><br>
<label>Foto:</label>
<input type="file" name="foto"><br>
<button type="submit" name="simpan">Simpan</button>
</form>
<?php
if (isset($_POST['simpan'])) {
$nama = $_POST['nama'];
$nim = $_POST['nim'];
$jurusan = $_POST['jurusan'];
// Proses upload file
$foto = $_FILES['foto']['name'];
$tmp = $_FILES['foto']['tmp_name'];
$folder = "uploads/";
if ($foto != "") {
$path = $folder . time() . "_" . $foto;
move_uploaded_file($tmp, $path);
$foto_db = time() . "_" . $foto;
} else {
$foto_db = null;
}
$query = "INSERT INTO mahasiswa (nama, nim, jurusan, foto) VALUES ('$nama', '$nim', '$jurusan', '$foto_db')";
$result = mysqli_query($koneksi, $query);
if ($result) {
echo "Data berhasil disimpan!";
} else {
echo "Gagal menyimpan data!";
}
}
?>
Pastikan sudah membuat folder uploads/
di dalam project anda agar file bisa tersimpan.
Modifikasi Fitur Read (+ File)
Di file index.php
, tambahkan kolom foto:
<h2>Data Mahasiswa</h2>
<a href="tambah.php">Tambah Data</a>
<table border="1" cellpadding="5" cellspacing="0">
<tr>
<th>ID</th>
<th>Nama</th>
<th>NIM</th>
<th>Jurusan</th>
<th>Foto</th>
<th>Aksi</th>
</tr>
<?php
$query = "SELECT * FROM mahasiswa";
$result = mysqli_query($koneksi, $query);
while ($row = mysqli_fetch_assoc($result)) {
echo "<tr>
<td>".$row['id']."</td>
<td>".$row['nama']."</td>
<td>".$row['nim']."</td>
<td>".$row['jurusan']."</td>
<td>";
if ($row['foto']) {
echo "<img src='uploads/".$row['foto']."' width='70'>";
} else {
echo "-";
}
echo "</td>
<td>
<a href='edit.php?id=".$row['id']."'>Edit</a> |
<a href='hapus.php?id=".$row['id']."'>Hapus</a>
</td>
</tr>";
}
?>
</table>
Modifikasi Fitur Update ( + Upload File Baru)
Di file edit.php
, tambahkan input file dan logika mengganti file lama jika ada file baru.
<?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 = $_POST['nama'];
$nim = $_POST['nim'];
$jurusan = $_POST['jurusan'];
// Cek apakah ada file foto baru
if ($_FILES['foto']['name'] != "") {
$foto = $_FILES['foto']['name'];
$tmp = $_FILES['foto']['tmp_name'];
$folder = "uploads/";
$foto_baru = time() . "_" . $foto;
move_uploaded_file($tmp, $folder.$foto_baru);
// Hapus foto lama jika ada
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");
}
?>
<form method="POST" enctype="multipart/form-data">
<label>Nama:</label>
<input type="text" name="nama" value="<?php echo $data['nama']; ?>"><br>
<label>NIM:</label>
<input type="text" name="nim" value="<?php echo $data['nim']; ?>"><br>
<label>Jurusan:</label>
<input type="text" name="jurusan" value="<?php echo $data['jurusan']; ?>"><br>
<label>Foto:</label>
<input type="file" name="foto"><br>
<?php if ($data['foto']) { echo "<img src='uploads/".$data['foto']."' width='100'><br>"; } ?>
<button type="submit" name="update">Update</button>
</form>
Modifikasi Fitur Delete (+ Hapus File)
Di file hapus.php
, kita modifikasi agar file terhapus juga dari folder uploads
.
<?php
include 'koneksi.php';
$id = $_GET['id'];
// Cari data dulu
$query = "SELECT * FROM mahasiswa WHERE id=$id";
$result = mysqli_query($koneksi, $query);
$data = mysqli_fetch_assoc($result);
// Hapus foto jika ada
if ($data['foto'] != "" && file_exists("uploads/".$data['foto'])) {
unlink("uploads/".$data['foto']);
}
// Hapus data
$delete = "DELETE FROM mahasiswa WHERE id=$id";
mysqli_query($koneksi, $delete);
header("Location: index.php");
?>
Kesimpulan
Dengan penambahan fitur upload, aplikasi CRUD dengan PHP dan MySQL kini bisa menyimpan data teks + gambar.
Fitur yang sudah ada sekarang:
-
Create → Tambah data + upload foto.
-
Read → Tampilkan data + tampilkan foto.
-
Update → Edit data + ganti foto lama.
-
Delete → Hapus data + hapus foto dari folder.
Posting Komentar