Membuat galeri foto dengan php dan mysql

Tutorial kali ini merupakan jawaban dari salah satu pertanyaan dari pengunjung di posting Upload form sederhana dengan PHP.

Membuat galeri foto dengan php dan mysql

pertanyaan dari Evan

Disini kita akan mengembangkan fungsi upload sehingga informasi gambar yang di-unggah akan disimpan di database MySQL, pembuatan galeri foto merupakan contoh yang akan kita gunakan dalam penerapannya.

Untuk memudahkan pemahaman dan pembelajaran terhadap upload dan database saya mengesampingkan beberapa faktor keamanan seperti validasi dan pengecekan extensi dari file.

Yang pertama kali harus dibuat adalah database dari gambar, buka phpmyadmin (biasanya ada di http://localhost/phpmyadmin) lalu buat database dengan nama galeri dan tekan tombol Create.

Membuat galeri foto dengan php dan mysql

Create database galeri

Dan database galeri pun tercipta namun masih belum memiliki tabel, masukan gambar pada kolom name dan 3 pada kolom number of fields, kita akan membuat tabel gambar dengan 3 field yang masing-masing field-nya akan menampung informasi yang berbeda. Jangan lupa tekan tombol Go jika sudah selesai.

Membuat galeri foto dengan php dan mysql

Buat tabel gambar

Pada halaman berikutnya kita harus mengisi definisi data dari ketiga field yang ingin kita buat, isi seperti gambar dibawah:

Membuat galeri foto dengan php dan mysql

Jika sudah jangan lupa tekan save.

  • Field: nama field-nya
  • Type: tipe data yang akan kita simpan
  • Length/Values: panjang data, tidak semuanya harus diisi
  • Null: jika di-cek berarti field tersebut nantinya boleh kosong/tidak diisi
  • Index: peran dari field
  • AUTO_INCREMENT: nilai dari field akan otomatis  diisi dan nilainya selalu ditambah 1 dari record sebelumnya

Membuat galeri foto dengan php dan mysql

Struktur tabel gambar

Bagian database beres, tabel gambar dengan struktur datanya telah tercipta, sekarang kita bisa fokus ke PHP.

Pada folder htdocs buat folder galeri dan didalamnya buat lagi folder gambar, lihat gambar.

Membuat galeri foto dengan php dan mysql

isi folder galeri

Membuat galeri foto dengan php dan mysql

Susunan file dan folder

Lalu buat file config.php untuk menyimpan semua variabel penting

<?php
$server = 'localhost'; //server MySQL
$user = 'root'; //username MySQL
$password = ''; //Password MySQL
$db = 'galeri'; //nama database
$dir_gambar = 'C:\xampp\htdocs\galeri\gambar\\'; //direktori dalam server
$url_folder_gambar = 'http://localhost/galeri/gambar/';  //URL dari direktori jika diakses lewat browser
?>

Perhatikan variebel $dir_gambar pastikan folder tersebut sudah anda buat terlebih dahulu, jika tidak hal ini akan memicu error.

$dir_gambar = 'C:\xampp\htdocs\galeri\gambar\\'; //direktori dalam server

Selanjutnya buat file db.php yang manyimpan fungsi koneksi ke database MySQL

<?php
include_once('config.php'); //sertakan semua kode yang ada di config.php

if( !mysql_connect($server, $user, $password) ) {
	die(mysql_error());
} else {
	if( !mysql_select_db($db) ){
		die(mysql_error());
	}
}
?>

buat index.php sebagai landing page, halaman ini yang akan pertama kali diakses ketika direktori galeri diakses lewat web.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Upload gambar</title>
</head>

<body>
<p>
<a href="index.php">depan</a> | <a href="galeri.php">galeri</a>
</p>
<form action="upload.php" enctype="multipart/form-data" method="post">
<table border="0">
<tr>
	<td>Judul</td>
    <td><input type="text" name="judul" />
    </td>
</tr>
<tr>
	<td>Gambar</td>
    <td><input type="file" name="userfile" size="40" /></td>
</tr>
<tr>
	<td><input type="submit" name="submit" value="Unggah" /></td>
    <td></td>
</tr>
<input type="hidden" name="MAX_FILE_SIZE" value="2000000" /> <!-- dalam byte {2000000b = 2Mb} -->
</form>
</body>
</html>

galeri.php untuk menampilkan daftar gambar

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Galeri</title>
</head>

<body>
<p>
<a href="index.php">depan</a> | <a href="galeri.php">galeri</a>
</p>
<?php
include('db.php');
if( !empty($_REQUEST['j']) ){
	$msg = '<div style="background:#F6F3C0;text-align:center;color:#999;">';
	$msg .= 'Gambar baru telah ditambahkan | <strong>' . $_REQUEST['j'];
	$msg .= '</strong></div>';
	echo $msg;
}
$query = "SELECT * FROM gambar";
$query = mysql_query( $query );
if(!$query){
	die( mysql_error() );
}
while( $rows = mysql_fetch_row($query) ){
	?>
	<p>
	<img src="<?php echo $url_folder_gambar . $rows[2];?>" width="100" />
	</p>
	<?php
	echo $rows[1];
	?>
	<hr />
<?php
}
?>
</body>
</html>

Dan yang terakhir adalah upload.php sebagai file php yang bertanggung jawab terhadap proses upload

<?php
if( isset($_REQUEST['submit']) ){

	include('db.php');

	$title = $_REQUEST['judul'] ? htmlspecialchars($_REQUEST['judul']) : 'blun ada judul'; //ternary operator

	$filename = basename($_FILES['userfile']['name']);
	$uploadfile = $dir_gambar . $filename;

	if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
		$query = "INSERT INTO gambar VALUES('', '$title', '$filename')";
		$query = mysql_query($query);
		if(!$query){
			die( mysql_error() );
		}
		header('Location: galeri.php?j=' . $title);
		exit();
	} else {
		echo "Kemungkinan hacking!\n";
	}
}else{
	echo "Anda kesasaar? kembali ke <a href='index.php'>jalan yang benar</a>";
}
?>

Pada kode tersebut saya menggunakan operator logika yang disebut ternary untuk mendapatkan nilai TRUE dan FALSE, coba perhatikan kode:

$title = $_REQUEST['judul'] ? htmlspecialchars($_REQUEST['judul']) : 'blun ada judul'; //ternary operator

Pola dari ternary adalah statement ? BLOK TRUE : BLOK FALSE; jika statement bernilai TRUE maka BLOK TRUE yang akan dieksekusi sebaliknya jika FALSE maka BLOK FALSE yang akan dieksekusi. Jika memungkinkan saya selalu menggunakan ternary, karena kodenya lebih pendek

$dir_gambar = 'C:\xampp\htdocs\galeri\gambar\\'; //direktori dalam server
0 😉