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.
)
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 Fileh1
>
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.
2.
// koneksi ke mysql
3.
mysql_connect(
'dbhost'
,
'dbuser'
,
'dbpass'
);
4.
mysql_select_db(
'dbname'
);
5.
?>
Berikutnya kita buat script untuk proses uploadnya
upload.php
01.
02.
// koneksi ke mysql
03.
include
"koneksi.php"
;
04.
05.
// membaca tanggal sekarang
06.
$tanggal
=
date
(
"Y-m-d"
);
07.
08.
// membaca keterangan
09.
$ket
=
$_POST
[
'ket'
];
10.
11.
// membaca nama file
12.
$fileName
=
$_FILES
[
'userfile'
][
'name'
];
13.
14.
// membaca nama file temporary
15.
$tmpName
=
$_FILES
[
'userfile'
][
'tmp_name'
];
16.
17.
// membaca size file
18.
$fileSize
=
$_FILES
[
'userfile'
][
'size'
];
19.
20.
// membaca tipe file
21.
$fileType
=
$_FILES
[
'userfile'
][
'type'
];
22.
23.
// membaca isi file yang diupload
24.
$fp
=
fopen
(
$tmpName
,
'r'
);
25.
$content
=
fread
(
$fp
,
filesize
(
$tmpName
));
26.
$content
=
addslashes
(
$content
);
27.
fclose(
$fp
);
28.
29.
// query SQL untuk menyimpan isi file dan informasi lainnya ke database
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.
// konfirmasi proses upload
37.
if
(
$hasil
)
echo
"
File "
.
$fileName
.
" telah terupload
"
;
38.
else
echo
"
File "
.
$fileName
.
" gagal diupload
"
;
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.
02.
// koneksi ke mysql
03.
include
"koneksi.php"
;
04.
05.
echo
"
Daftar File Upload
"
;
06.
07.
// query untuk membaca semua file yang terupload
08.
$query
=
"SELECT * FROM upload"
;
09.
$hasil
= mysql_query(
$query
);
10.
11.
// menampilkan daftar file
12.
echo
"";
13.
echo
"
"
;
14.
while
(
$data
= mysql_fetch_array(
$hasil
))
15.
{
16.
echo
"
";
17.
}
18.
echo
"
ID Nama
File Tanggal
Upload Keterangan Action
".
$data
[
'id'
].
"
']."'
>".
$data
[
'name'
].
"
".
$data
[
'dateupload'
].
"
".
$data
[
'ket'
].
"
']."'
>Edit
"
;
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.
02.
03.
// koneksi ke mysql
04.
include
"koneksi.php"
;
05.
06.
// membaca nilai ID file yang berasal dari link download.php?id=...
07.
$id
=
$_GET
[
'id'
];
08.
09.
// query untuk membaca data file berdasarkan ID
10.
$query
=
"SELECT * FROM upload WHERE id = $id"
;
11.
12.
$hasil
= mysql_query(
$query
);
13.
$data
= mysql_fetch_array(
$hasil
);
14.
15.
// mengenerate proses download file
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.
Edit File
02.
03.
04.
// koneksi ke mysql
05.
include
"koneksi.php"
;
06.
07.
// membaca ID file yang akan diedit
08.
$id
=
$_GET
[
'id'
];
09.
10.
// membaca data deskripsi dari file
11.
// deskripsi ini nanti akan ditampilkan di form edit
12.
13.
$query
=
"SELECT keterangan FROM upload WHERE id = '$id'"
;
14.
$hasil
= mysql_query(
$query
);
15.
$data
= mysql_fetch_array(
$hasil
);
16.
?>
17.
18.
19.
Pilih File
20.
"userfile"
type=
"file"
>
21.
Keterangan:
22.
23.
"hidden"
name=
"id"
value=
""
>
24.
25.
"submit"
type=
"submit"
value=
"Update"
>
26.
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.
02.
03.
// koneksi ke mysql
04.
include
"koneksi.php"
;
05.
06.
// membaca tanggal sekarang
07.
$tanggal
=
date
(
"Y-m-d"
);
08.
09.
// membaca ID file yang akan diupdate
10.
$id
=
$_POST
[
'id'
];
11.
12.
// membaca keterangan
13.
$ket
=
$_POST
[
'ket'
];
14.
15.
// membaca size file
16.
$fileSize
=
$_FILES
[
'userfile'
][
'size'
];
17.
18.
if
(
$fileSize
> 0)
19.
{
20.
// jika file size > 0 maka proses update file dilakukan
21.
22.
// membaca nama file
23.
$fileName
=
$_FILES
[
'userfile'
][
'name'
];
24.
25.
// membaca nama file temporary
26.
$tmpName
=
$_FILES
[
'userfile'
][
'tmp_name'
];
27.
28.
// membaca tipe file
29.
$fileType
=
$_FILES
[
'userfile'
][
'type'
];
30.
31.
// membaca isi file yang diupload
32.
$fp
=
fopen
(
$tmpName
,
'r'
);
33.
$content
=
fread
(
$fp
,
filesize
(
$tmpName
));
34.
$content
=
addslashes
(
$content
);
35.
fclose(
$fp
);
36.
37.
// query SQL untuk update data file
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.
// jika file size tidak lebih besar dari 0 maka hanya deskripsi file nya saja yang diupdate
47.
$query
=
"UPDATE upload SET keterangan = '$ket' WHERE id = '$id'"
;
48.
}
49.
50.
// jalankan query update
51.
$hasil
= mysql_query(
$query
);
52.
53.
// konfirmasi proses upload
54.
if
(
$hasil
)
echo
"Berhasil diupdate
"
;
55.
else
echo
"Gagal diupdate
"
;
56.
57.
?>
Selesai dah membuat script update filenya… prinsipnya sama kan dengan
proses update data seperti umumnya? OK selamat mengembangkan sendiri
ya..
EmoticonEmoticon