Beberapa waktu yang lalu, saya pernah memaparkan teknik untuk membuat script PHP untuk proses upload dan download file ke dalam database MySQL. Nah… pada artikel kali ini, akan saya paparkan hal yang masih kelanjutan dari artikel tersebut, yaitu proses update file yang telah diupload.
Pada prinsipnya proses update file yang telah terupload ke MySQL ini sama ketika proses uploadnya. Bedanya hanya pada query SQL nya saja. Ketika proses upload, kita gunakan query INSERT sedangkan untuk proses updatenya kita gunakan UPDATE. seperti halnya jika kita edit/update data pada umumnya. Mudah bukan??
OK… let’s begin..
Andaikan kita punya tabel upload sebagai berikut ini:
01.
CREATE
TABLE
`upload` (
02.
`id`
int
(11) auto_increment,
03.
`
name
`
varchar
(30),
04.
`type`
varchar
(30),
05.
`
size
`
int
(11),
06.
`dateupload`
date
,
07.
`content` longblob,
08.
`keterangan` text,
09.
PRIMARY
KEY
(`id`)
10.
)
Keterangan:
field ‘name’ menunjukkan nama file yang diupload, ‘type’ adalah tipe/jenis file yang diupload, ‘size’ adalah ukuran file, ‘dateupload’ menunjukkan tanggal upload, ‘content’ adalah isi dari file, dan ‘keterangan’ menunjukkan deskripsi dari file.
Karena struktur tabelnya agak beda dengan artikel sebelumnya, maka kita mulai lagi pembahasannya dari membuat script upload nya dahulu.
formupload.htm
01.
<
h1
>Upload File</
h1
>
02.
03.
<
form
method
=
"post"
enctype
=
"multipart/form-data"
action
=
"upload.php"
>
04.
Pilih File <
br
>
05.
<
input
name
=
"userfile"
type
=
"file"
><
br
>
06.
Keterangan:<
br
>
07.
<
textarea
name
=
"keterangan"
></
textarea
><
br
>
08.
<
input
name
=
"upload"
type
=
"submit"
value
=
"Upload"
>
09.
</
form
>
Tampilan dari halaman upload di atas adalah sbb:
Untuk menghubungkan script PHP ke MySQL, kita buat dulu script koneksi
koneksi.php
1.
<?php
2.
3.
mysql_connect(
'dbhost'
,
'dbuser'
,
'dbpass'
);
4.
mysql_select_db(
'dbname'
);
5.
?>
Berikutnya kita buat script untuk proses uploadnya
upload.php
01.
<?php
02.
03.
include
"koneksi.php"
;
04.
05.
06.
$tanggal
=
date
(
"Y-m-d"
);
07.
08.
09.
$ket
=
$_POST
[
'ket'
];
10.
11.
12.
$fileName
=
$_FILES
[
'userfile'
][
'name'
];
13.
14.
15.
$tmpName
=
$_FILES
[
'userfile'
][
'tmp_name'
];
16.
17.
18.
$fileSize
=
$_FILES
[
'userfile'
][
'size'
];
19.
20.
21.
$fileType
=
$_FILES
[
'userfile'
][
'type'
];
22.
23.
24.
$fp
=
fopen
(
$tmpName
,
'r'
);
25.
$content
=
fread
(
$fp
,
filesize
(
$tmpName
));
26.
$content
=
addslashes
(
$content
);
27.
fclose(
$fp
);
28.
29.
30.
31.
$query
= "INSERT INTO upload (name, size, type, content, dateupload, keterangan)
32.
VALUES (
'$fileName'
,
'$fileSize'
,
'$fileType'
,
'$content'
,
'$tanggal'
,
'$ket'
)";
33.
34.
$hasil
= mysql_query(
$query
);
35.
36.
37.
if
(
$hasil
)
echo
"<p>File "
.
$fileName
.
" telah terupload</p>"
;
38.
else
echo
"<p>File "
.
$fileName
.
" gagal diupload</p>"
;
39.
40.
?>
Setelah file terupload, maka ada baiknya kita buat script untuk menampilkan daftar file yang sudah diupload. Di dalam daftar itu nanti kita coba tampilkan nomor ID file, nama file, tanggal diupload, serta link untuk proses update filenya. Oya, nanti di nama file, kita sertakan link untuk proses downloadnya.
Ini dia script untuk menampilkan daftar filenya
list.php
01.
<?php
02.
03.
include
"koneksi.php"
;
04.
05.
echo
"<h2>Daftar File Upload</h2>"
;
06.
07.
08.
$query
=
"SELECT * FROM upload"
;
09.
$hasil
= mysql_query(
$query
);
10.
11.
12.
echo
"<table border='1'>"
;
13.
echo
"<tr><th>ID</th><th>Nama File</th><th>Tanggal Upload</th><th>Keterangan</th><th>Action</th></tr>"
;
14.
while
(
$data
= mysql_fetch_array(
$hasil
))
15.
{
16.
echo
"<tr><td>"
.
$data
[
'id'
].
"</td><td><a href='download.php?id="
.
$data
['id
']."'
>".
$data
[
'name'
].
"</a></td><td>"
.
$data
[
'dateupload'
].
"</td><td>"
.
$data
[
'ket'
].
"</td><td><a href='edit.php?id="
.
$data
['id
']."'
>Edit</a></td></tr>";
17.
}
18.
echo
"</table>"
;
19.
20.
?>
Keterangan: Jangan lupa untuk menyertakan parameter nomor ID file pada link proses download dan updatenya. Karena nomor ID ini nanti akan digunakan untuk mengidentifikasi file mana yang akan didownload atau diupdate.
Berikut ini tampilan dari daftar file yang diupload.
Untuk proses downloadnya, kita buat script berikut ini
download.php
01.
<?php
02.
03.
04.
include
"koneksi.php"
;
05.
06.
07.
$id
=
$_GET
[
'id'
];
08.
09.
10.
$query
=
"SELECT * FROM upload WHERE id = $id"
;
11.
12.
$hasil
= mysql_query(
$query
);
13.
$data
= mysql_fetch_array(
$hasil
);
14.
15.
16.
header(
"Content-Disposition: attachment; filename="
.
$data
[
'name'
]);
17.
header(
"Content-length: "
.
$data
[
'size'
]);
18.
header(
"Content-type: "
.
$data
[
'type'
]);
19.
20.
echo
$data
[
'content'
];
21.
22.
?>
Sedangkan untuk proses edit file, kita arahkan linknya menuju form edit
edit.php
01.
<h1>Edit File</h1>
02.
03.
<?php
04.
05.
include
"koneksi.php"
;
06.
07.
08.
$id
=
$_GET
[
'id'
];
09.
10.
11.
12.
13.
$query
=
"SELECT keterangan FROM upload WHERE id = '$id'"
;
14.
$hasil
= mysql_query(
$query
);
15.
$data
= mysql_fetch_array(
$hasil
);
16.
?>
17.
18.
<form method=
"post"
enctype=
"multipart/form-data"
action=
"update.php"
>
19.
Pilih File <br>
20.
<input name=
"userfile"
type=
"file"
><br>
21.
Keterangan:<br>
22.
<textarea name=
"ket"
><?php
echo
$data
[
'keterangan'
]; ?></textarea>
23.
<input type=
"hidden"
name=
"id"
value=
"<?php echo $id; ?>"
>
24.
<br>
25.
<input name=
"submit"
type=
"submit"
value=
"Update"
>
26.
</form>
Nah.. selanjutnya kita buat script update nya. Untuk idenya, sebelum proses update, kita harus mengecek dahulu apakah filenya diupdate atau tidak, ataukah hanya deskripsi (keterangan) filenya saja. Jika filenya tidak diupdate, maka kita hanya gunakan query untuk update deskripsinya saja.
Untuk mengecek apakah filenya diupdate atau tidak, kita hanya ngecek file size nya saja. Jika filenya diupdate, maka file sizenya tidak sama dengan 0. Namun jika file sizenya sama dengan 0 maka file tidak diupdate.
Mengapa menggunakan logika tsb? Ya… karena file size sama dengan 0 itu maksudnya user tidak memilih file baru untuk diupload menggantikan file lama.
OK… sekarang kita terapkan ide tersebut
update.php
01.
<?php
02.
03.
04.
include
"koneksi.php"
;
05.
06.
07.
$tanggal
=
date
(
"Y-m-d"
);
08.
09.
10.
$id
=
$_POST
[
'id'
];
11.
12.
13.
$ket
=
$_POST
[
'ket'
];
14.
15.
16.
$fileSize
=
$_FILES
[
'userfile'
][
'size'
];
17.
18.
if
(
$fileSize
> 0)
19.
{
20.
21.
22.
23.
$fileName
=
$_FILES
[
'userfile'
][
'name'
];
24.
25.
26.
$tmpName
=
$_FILES
[
'userfile'
][
'tmp_name'
];
27.
28.
29.
$fileType
=
$_FILES
[
'userfile'
][
'type'
];
30.
31.
32.
$fp
=
fopen
(
$tmpName
,
'r'
);
33.
$content
=
fread
(
$fp
,
filesize
(
$tmpName
));
34.
$content
=
addslashes
(
$content
);
35.
fclose(
$fp
);
36.
37.
38.
39.
$query
= "UPDATE upload
40.
SET name =
'$fileName'
, size =
'$fileSize'
, type =
'$fileType'
, content =
'$content'
,
41.
dateupload =
'$tanggal'
, keterangan =
'$ket'
42.
WHERE id =
'$id'
";
43.
}
44.
else
45.
{
46.
47.
$query
=
"UPDATE upload SET keterangan = '$ket' WHERE id = '$id'"
;
48.
}
49.
50.
51.
$hasil
= mysql_query(
$query
);
52.
53.
54.
if
(
$hasil
)
echo
"<p>Berhasil diupdate</p>"
;
55.
else
echo
"<p>Gagal diupdate</p>"
;
56.
57.
?>
Selesai dah membuat script update filenya… prinsipnya sama kan dengan proses update data seperti umumnya? OK selamat mengembangkan sendiri ya..