Jika dibagian tutorial tersebut anda belajar bagaimana cara membuat fitur
upload file dengan PHP dan MySQL tetapi yang disimpan di database hanyalah
nama filenya, jadi sebenarnya filenya tidak benar – benar diupload di database,
filenya hanya dipindahkan di webserver sedangkan yang disimpan di database
hanyalah nama dari filenya saja, karena itu pada kolom file/berkas hanya
menggunakan tipe data varchar, karena memang yang disimpan hanya nama
filenya.
Materi ini kita akan belajar bagaimana cara mengupload sebuah file kedalam
database, bukan sebatas nama filenya saja, tetapi filenya akan benar – benar
disimpan di dalam tabel database.
Istilah BLOB, BLOB adalah kependekan dari binary large object, jadi BLOB adalah
koleksi dari data biner yang disimpan dalam sebuah entitas pada database
management systems (DBMS).
Sederhananya BLOB adalah suatu cara yang digunakan untuk menyimpan file –
file media seperti jpg, mp3, flv, mp4, dll, ke dalam database.
1. Membuat database
Pada tutorial ini kita contohkan menggunakan xampp, sehingga untuk membuat
database kita akan menggunakan phpmyadmin sebagai toolsnya, baik langkah –
langkah pembuatan databasenya adalah sebagai berikut :
1. Pastikan untuk service MySQL sudah berjalan di xampp control panel
2. Lalu silahkan akses phpmyadmin melalui alamat
http://localhost/phpmyadmin, berikutnya buat databasenya, dalam contoh ini
nama databasenya db_upload_blob, lalu klik tombol Buat
Keterangan :
id_gambar (integer) digunakan sebagai primary key dengan auto increment
gambar (blob) kolom in digunakan untuk menyimpan file yang diupload ke database
nama_gambar (varchar 255) kolom ini digunakan untuk menyimpan nama file yang
diupload
tipe_gambar (varchar 255) digunakan untuk menyimpan tipe / format file
ukuran_gambar (integer) digunakan untuk menyimpan ukuran dari file yang diupload
keterangan (varchar 255) digunakan untuk menyimpan keterangan dari file yang
diupload
setelah dibuat kolomnya, silahkan klik tombol Simpan
maka tabel tb_gambar akan terbuat, jika anda tidak inget ribet di pembuatan
database serta tabel, bisa menggunakan perintah sql dibawah ini :
1<?php
2$host = "localhost";
3$user = "root";
4$password = "";
5$database = "db_upload_blob";
6$koneksi = mysqli_connect($host, $user, $password, $database);
7?>
Keterangan :
Perintah diatas digunakan untuk koneksi ke database db_upload_blob yang
sebelumnya telah kita buat.
$host dengan nilai “localhost” yang merupakan alamat server databasenya
$user dengan nilai “root” yang merupakan user dari databasenya
$password dengan nilai “” yang merupakan password untuk mengakses database,
nilainya kosong karena default dari xampp untuk password user root adalah kosong
$database dengan nilai “db_upload_blob” yang merupakan nama dari database yang
sebelumnya telah kita buat
Baris 6 adalah perintah untuk melakukan koneksi ke database, dan hasilnya disimpan
di variabel $koneksi.
b. Membuat Halaman Form Upload – form_upload.php
Berikutnya silahkan buka file form_upload.php, dan isikan code seperti berikut
ini :
1 <?php
2 include('koneksi.php');
3 if(isset($_POST['tombol']))
4{
5 if(!isset($_FILES['gambar']['tmp_name'])){
6 echo '<span style="color:red"><b><u><i>Pilih file gambar</i></u></b></span>';
7 }
8 else
9 {
10 $file_name = $_FILES['gambar']['name'];
11 $file_size = $_FILES['gambar']['size'];
12 $file_type = $_FILES['gambar']['type'];
13 if ($file_size < 2048000 and ($file_type =='image/jpeg' or $file_type == 'image/png'))
14 {
15 $image = addslashes(file_get_contents($_FILES['gambar']['tmp_name']));
16 $keterangan = $_POST['keterangan'];
17 mysqli_query($koneksi,"insert into tb_gambar
18 (gambar,nama_gambar,tipe_gambar,ukuran_gambar,keterangan) values
19 ('$image','$file_name','$file_type','$file_size','$keterangan')");
20 header("location:index.php");
21 }
22 else
23 {
24 echo '<span style="color:red"><b><u><i>Ukuruan File / Tipe File Tidak
25 Sesuai</i></u></b></span>';
26 }
27 }
28 }
29 ?>
30 <html>
31 <head>
32 <title></title>
33 </head>
34 <body>
35 <form method="post" action="" enctype="multipart/form-data">
36 <table>
37 <tr>
38 <td>Gambar</td>
39 <td><input type="file" name="gambar"/></td>
40 </tr>
41 <tr>
42 <td>Keterangan</td>
43 <td><textarea name="keterangan"></textarea></td>
44 </tr>
45 <tr>
46 <td></td>
47 <td><input type="submit" name="tombol"/></td>
48 </tr>
49 </table>
</form>
</body>
</html>
Untuk mengakses halaman form upload, anda bisa mengakses di
alamat : http://localhost/app_upload_blob/form_upload.php
Tampilannya kurang lebih seperti berikut ini :
Keterangan :
Baris 32 (form_upload.php) kita membuat tag <form> dengan menggunakan method
post, dan kita tambahkan attribute enctype dengan value “multipart/form-data”, dan
dibagian attribute action kita benilai nilai kosong, karena pemrosesan form kita akan
lakukan di file form_upload.php ini sendiri
Baris 36 (form_upload.php) kita membuat inputan dengan type file dengan attribute
name “gambar”
Baris 40 (form_upload.php) kita membuat textarea dengan attribute name
“keterangan”
Baris 44 (form_upload.php) kita membuat tombol dengan attribute name “tombol”.
c. Mencoba upload file gambar
Berikutnya kita akan coba untuk mengupload sebuah gambar dengan
mengggunakan form yang telah kita buat, kurang lebih tampilannya seperti ini :
Gambar dan keterangan bisa disesuaikan dengan gambar yang dimiliki teman –
teman, lalu silahkan tombol Submit.
Setelah berhasil upload, langkah berikutnya kita akan cek databasenya, gunakan
phpmyadmin.
Silahkan phpmyadmin dengan menggunakan alamat localhost/phpmyadmin
dan pilih databasenya dalam hal ini adalah db_upload_blob, lalu silahkan klik
tabel tb_gambar, kurang lebih tampilannya seperti berikut ini :
Terlihat ada 1 record yang berisi data gambar yang berhasil kita upload.
d. Pemrosesan Form upload
Berikutnya kita akan bahas skrip untuk memproses form uploadnya,
penjelasannya sebagai berikut :
1include('koneksi.php');
Baris 2 (form_upload.php) kita include file koneksi.php yang sudah kita buat
sebelumnya, yang berisi koneksi ke database.
1if(isset($_POST['tombol']))
Baris 3 (form_upload.php) digunakan untuk melakukan pengecekan apakah
tombol submit dengan name “tombol” di klik (baris 44 – form_upload.php), jika
baris 3 bernilai true maka akan menjalankan skrip pada baris 5 – 24
1if(!isset($_FILES['gambar']['tmp_name'])){
Baris 5 (form_upload.php) digunakan untuk melakukan pengecekan apakah file
di form upload sudah dipilih atau belum, jika belum dipilih maka akan
menjalankan skrip di baris 6 untuk menampilkan tulisan Pilih file gambar, jika file
telah dipilih maka akan menjalankan skrip dibaris 10 – 23
1$file_name = $_FILES['gambar']['name'];
Baris 10 (form_upload.php) digunakan untuk menangkap nama file yang
diupload dan disimpan di variabel $file_name
1$file_size = $_FILES['gambar']['size'];
Baris 11 (form_upload.php) digunakan untuk menangkap ukuran file yang
diupload dan disimpan di variabel $file_size
1$file_type = $_FILES['gambar']['type'];
Baris 12 (form_upload.php) digunakan untuk menangkap tipe file yang diupload
dan disimpan di variabel $file_type
1$image = addslashes(file_get_contents($_FILES['gambar']['tmp_name']));
Baris 15 digunakan untuk mengkonversi file yang kita upload menjadi data
binary dan disimpan di variabel $image, dan nantinya data ini akan dimasukkan
ke dalam kolom gambar di tabel tb_gambar dimana di kolom ini menggunakan
tipe blob
1$keterangan = $_POST['keterangan'];
Baris 16 digunakan untuk menangkap inputan form dengan name “keterangan”
dan disimpan ke dalam variabel $keterangan.
1 <?php
2 include('koneksi.php');
3 if(isset($_GET['id_gambar']))
4{
5 $query = mysqli_query($koneksi,"select * from tb_gambar where id_gambar='".
6 $_GET['id_gambar']."'");
7 $row = mysqli_fetch_array($query);
8 header("Content-type: " . $row["tipe_gambar"]);
9 echo $row["gambar"];
10 }
11 else
12 {
13 header('location:index.php');
14 }
?>
Keterangan :
Baris 2 (image_view.php)digunakan untuk menginclude file koneksi.php yang
berisi file koneksi ke database
1if(isset($_GET['id_gambar']))
Baris 3 (image_view.php) digunakan untuk melakukan pengecekan, apakah
ketika mengakses file image_view.php juga menyertakan variabel id_gambar
dengan method get ?
Jika ditemukan variabel id_gambar dengan method get, maka akan menjalankan
skrip di baris 5 – 8, tetapi jika tidak akan menjalankan baris 12 yang akan
meredirect ke halaman index.php
1$row = mysqli_fetch_array($query);
Baris 6 (image_view.php) kita akan konversi datanya menjadi bentuk array
menggunakan perintah mysqli_fetch_array, hasil konversinya akan disimpan di
variabel $row
1echo $row["gambar"];
Baris 8(image_view.php) kita menampilkan data binary yang disimpan di kolom
gambar di tabel tb_gambar.
Jadi kurang lebih perintah ini digunakan untuk membuat file, yang sebelumnya
diupload, dengan hasil export sesuai tipe file yang diupload, kalau kita
mengupload file gambar dengan tipe .jpeg, ya maka file image_view.php ini akan
mengexport file jpeg juga, begitu juga untuk file – file lainnya.
Baik kita sudah membuat file image_view.php yang digunakan untuk konversi
data binary di kolom gambar, menjadi sebuah file sesuai tipe file yang kita
upload, berikutnya kita akan membuat file index.php yang digunakan untuk
menampilkan data file yang telah diupload ke dalam bentuk list tabel.
f. Menampilkan data hasil upload – index.php
Untuk menampilkan daftar file kedalam bentuk daftar tabel, silahkan buka file
index.php lalu isikan skrip seperti berikut :
1 <?php
2 include('koneksi.php');
3 $query = mysqli_query($koneksi,"SELECT * FROM tb_gambar");
4 ?>
5 <html>
6 <head>
7 <title></title>
8 </head>
9 <body>
10 <a href="form_upload.php">Upload Gambar</a>
11 <table border="1">
12 <tr>
13 <th>No</th>
14 <th>Gambar</th>
15 <th>Keterangan</th>
16 <th>Tipe</th>
17 <th>Ukuran</th>
18 <th>Action</th>
19 </tr>
20 <?php
21 $no = 1;
22 while($row = mysqli_fetch_array($query))
23 {
24 ?>
25 <tr>
26 <td><?php echo $no++; ?></td>
27 <td><img src="image_view.php?id_gambar=<?php echo $row['id_gambar'];
28 ?>" width="100"/></td>
29 <td><?php echo $row['keterangan']; ?></td>
30 <td><?php echo $row['tipe_gambar']; ?></td>
31 <td><?php echo $row['ukuran_gambar']; ?></td>
32 <td><a href="delete_gambar.php?id_gambar=<?php echo $row['id_gambar'];
33 ?>">Delete</a></td>
34 </tr>
35 <?php
36 }
37 ?>
38 </table>
</body>
</html>
Untuk menjalankan silahkan mengakses dengan menggunakan
alamat : http://localhost/app_upload_blob/index.php
Keterangan :
1include('koneksi.php');
Baris 2 (index.php) kita include file koneksi.php yang berisi koneksi ke database
db_upload_blob
1 <table border="1">
2 <tr>
3 <th>No</th>
4 <th>Gambar</th>
5 <th>Keterangan</th>
6 <th>Tipe</th>
7 <th>Ukuran</th>
8 <th>Action</th>
9 </tr>
Baris 11 – 19 (index.php) kita membuat tabel dan header pada tabel
1while($row = mysqli_fetch_array($query))
Baris 22 (index.php) kita melakukan extract data di variabel $query dengan
menggunakan perintah while, sehingga akan melakukan perulangan sejumlah
data hasil query, datanya juga akan dikonversi menjadi array dengan
menggunakan perintah mysqli_fetch_array, dan disetiap record kita simpan di
variabel $row.
1<?php
2if(isset($_GET['id_gambar']))
3{
4 include('koneksi.php');
5 $id_gambar = $_GET['id_gambar'];
6 $query = mysqli_query($koneksi,"delete from tb_gambar where
7id_gambar='$id_gambar'");
8}
9header('location:index.php');
?>
Keterangan :
1if(isset($_GET['id_gambar']))
Baris 2 (delete_gambar.php) digunakan untuk melakukan pengecekan apakah
saat mengakses file delete_gambar.php serta menyertakan variabel id_gambar
dengan method get, jika iya maka akan menjalankan perintah di baris 4 – 6.
1include('koneksi.php');
Baris 4 (delete_gambar.php) kita includekan file koneksi.php yang berisi koneksi
ke database
1$id_gambar = $_GET['id_gambar'];
Baris 5 (delete_gambar.php) digunakan untuk menangkap nilai dari variabel
id_gambar dengan method get, lalu disimpan di variabel $id_gambar
1header('location:index.php');
Baris 8 akan diredirect ke file index.php ketika telah menjalankan perintah di file
delete_gambar.php