Wah… bingung nih mau ngasih judul artikel yang satu ini. Tapi mudah-mudahan Anda yang membacanya tidak bingung ya..
Maksud dari judul di atas adalah bagaimana ide membuat aplikasi untuk
keperluan upload dan download file, namun dengan disertai pembatasan
hak akses. Misalkan user A mengupload sebuah file. Nah… file ini hanya
boleh didownload oleh si A. Bila ada user lain yang mencoba mendownload
atau menghapus file tersebut maka tidak diperbolehkan.
Aplikasi ini juga nantinya disertai semacam autentifikasi artinya
tidak sembarangan orang bisa upload file, melainkan hanya user-user
tertentu saja yang berhak.
Artikel ini merupakan request dari member saya, mas Ario Wibowo.
OK… bagaimana ide dan langkah-langkah membuatnya? simak artikel ini lebih lanjut.
Langkah pertama, kita siapkan terlebih dahulu 2 buah tabel yaitu
tabel ‘user’ dan tabel ‘upload’. Tabel ‘user’ digunakan untuk menyimpan
data user yang berhak mengakses, serta tabel ‘upload’ untuk menyimpan
file-file yang diupload oleh user.
01.
CREATE
TABLE
user
(
02.
username
varchar
(20),
03.
password
varchar
(32),
04.
PRIMARY
KEY
(username)
05.
)
06.
07.
CREATE
TABLE
upload (
08.
id
int
(11) auto_increment,
09.
name
varchar
(30),
10.
type
varchar
(30),
11.
size
int
(11),
12.
content mediumblob,
13.
username
varchar
(20),
14.
PRIMARY
KEY
(id)
15.
)
Selanjutnya untuk sekedar mencoba, Anda bisa sekalian tambahkan beberapa user
1.
INSERT
INTO
`
user
`
VALUES
(
'a'
,
'pass1'
);
2.
INSERT
INTO
`
user
`
VALUES
(
'b'
,
'pass2'
);
Langkah kedua, kita siapkan form login untuk user
index.htm
01.
<
h1
>Login Userh1
>
02.
03.
<
form
method
=
"post"
action
=
"login.php"
>
04.
<
table
>
05.
<
tr
><
td
>Usernametd
><
td
><
input
type
=
"text"
name
=
"user"
>td
>tr
>
06.
<
tr
><
td
>Passwordtd
><
td
><
input
type
=
"password"
name
=
"pass"
>td
>tr
>
07.
<
tr
><
td
>td
><
td
><
input
type
=
"submit"
name
=
"submit"
value
=
"Submit"
>td
>tr
>
08.
table
>
09.
form
>
Langkah kedua, kita bisa buat script untuk memproses loginnya
login.php
01.
02.
03.
// koneksi ke mysql
04.
mysql_connect(
'dbhost'
,
'dbuser'
,
'dbpass'
);
05.
mysql_select_db(
'dbname'
);
06.
07.
// membaca username dan password dari form login
08.
$username
=
$_POST
[
'user'
];
09.
$password
=
$_POST
[
'pass'
];
10.
11.
// mencari data user yang login tujuannya untuk mendapatkan password dari database
12.
$query
=
"SELECT * FROM user WHERE username = '$username'"
;
13.
$hasil
= mysql_query(
$query
);
14.
$data
= mysql_fetch_array(
$hasil
);
15.
16.
// mencocokkan password user dari database dengan password dari form
17.
if
(
$password
==
$data
[
'password'
])
18.
{
19.
// jika kedua password sama, maka login berhasil
20.
// simpan username ke dalam session
21.
22.
session_start();
23.
$_SESSION
[
'username'
] =
$username
;
24.
echo
"
Login Sukses
"
;
25.
echo
"
Anda login sebagai : "
.
$username
.
"
"
;
26.
27.
// tampilkan menu user
28.
echo
"[
Upload ] [ Daftar File ] [ Logout ]
"
;
29.
}
30.
else
31.
{
32.
// jika kedua password tidak cocok, maka login gagal
33.
echo
"
Maaf login gagal
"
;
34.
}
35.
36.
?>
Perhatikan script di atas! Terdapat 3 buah menu yang akan tampil
begitu user berhasil login. Menu ‘upload’ untuk melakukan proses upload
file, ‘daftar file’ untuk melihat daftar file apa saja yang telah
diuploadnya, dan ‘logout’ untuk proses logout. Nah.. di antara ketiga
menu tersebut, menu ‘upload’ yang diarahkan ke script ‘formupload.php’
dan ‘daftar file’ yang diarahkan ke script ‘list.php’ ini hendaknya
diproteksi supaya hanya bisa diakses oleh user yang telah terdaftar
dalam database saja. Maksudnya, kedua script tersebut haruslah hanya
bisa diakses oleh user yang telah melakukan login dengan sukses saja.
Sehingga untuk keperluan ini, kita harus mengatur strategi supaya user
nakal tidak bisa mengakses kedua script tersebut tanpa login (by pass)…
he.. 3x kayak mau perang saja pake strategi segala
Nah… untuk mencegah ada penyusup yang masuk tanpa login, kita buat dulu script untuk pengamanannya.
cek.php
01.
02.
03.
session_start();
04.
05.
if
(!isset(
$_SESSION
[
'username'
]))
06.
{
07.
echo
"
Maaf Anda belum login
"
;
08.
exit
;
09.
}
10.
11.
?>
Ide dari script pengaman di atas adalah dengan mengecek keberadaan
session dengan nama ‘$_SESSION['username']‘. Bila login berhasil, maka
session tersebut ada (perhatikan kembali script login.php). Namun bila
user mencoba masuk tanpa login, maka keberadaan session ini tidak ada.
Sehingga bila session tersebut dideteksi tidak ada, maka ditolak dengan
pesan ‘Maaf Anda belum login’.
Nah… selanjutnya script cek.php di atas diincludekan ke dalam script ‘formupload.php’ dan ‘list.php’.
Langkah berikutnya, kita sudah bisa buat script untuk formupload.php nya
formupload.php
01.
02.
session_start();
03.
include
"cek.php"
;
04.
05.
// membaca nama user yang tersimpan dalam session
06.
$username
=
$_SESSION
[
'username'
];
07.
08.
echo
"
Anda login sebagai : "
.
$username
.
"
"
;
09.
echo
"[
Upload ] [ Daftar File ] [ Logout ]
"
;
10.
echo
"Silakan upload file
"
;
11.
?>
12.
13.
// form untuk upload
14.
15.
16.
17.
20.
22.
23.
"hidden"
name=
"MAX_FILE_SIZE"
value=
"2000000"
>
18.
"userfile"
type=
"file"
>
19.
"upload"
type=
"submit"
value=
"Upload"
>
21.
24.
Perhatikan pada tag . Tag
ini digunakan untuk input file yang akan diupload. Tag ini diberikan
nama komponen ‘userfile’. Nama komponen ini selanjutnya akan digunakan
dalam script proses uploadnya.
upload.php
01.
02.
03.
session_start();
04.
05.
// untuk keamanan, kita juga includekan cek.php
06.
include
"cek.php"
;
07.
08.
// membaca nama file
09.
$fileName
=
$_FILES
[
'userfile'
][
'name'
];
10.
11.
// membaca nama file temporary
12.
$tmpName
=
$_FILES
[
'userfile'
][
'tmp_name'
];
13.
14.
// membaca size file
15.
$fileSize
=
$_FILES
[
'userfile'
][
'size'
];
16.
17.
// membaca tipe file
18.
$fileType
=
$_FILES
[
'userfile'
][
'type'
];
19.
20.
// membaca username yang disimpan dalam session
21.
// username ini sekaligus menyatakan informasi pemilik file
22.
$username
=
$_SESSION
[
'username'
];
23.
24.
// langkah membaca isi file yang diupload
25.
$fp
=
fopen
(
$tmpName
,
'r'
);
26.
$content
=
fread
(
$fp
,
filesize
(
$tmpName
));
27.
$content
=
addslashes
(
$content
);
28.
fclose(
$fp
);
29.
30.
// koneksi ke mysql
31.
mysql_connect(
'dbhost'
,
'dbuser'
,
'dbpass'
);
32.
mysql_select_db(
'dbname'
);
33.
34.
// query SQL untuk menyimpan file ke database disertai username pemiliknya
35.
36.
$query
= "INSERT INTO upload (name, size, type, content, username)
37.
VALUES (
'$fileName'
,
'$fileSize'
,
'$fileType'
,
'$content'
,
'$username'
)";
38.
39.
mysql_query(
$query
);
40.
echo
"
Anda login sebagai : "
.
$username
.
"
"
;
41.
echo
"[
Upload ] [ Daftar File ] [ Logout ]
"
;
42.
43.
// konfirmasi
44.
45.
echo
"
File "
.
$fileName
.
" telah terupload
"
;
46.
47.
?>
Setelah kita membuat script untuk proses upload, berikutnya kita buat
script list.php untuk menampilkan daftar file yang telah diupload
list.php
01.
02.
03.
session_start();
04.
05.
include
"cek.php"
;
06.
07.
// koneksi ke mysql
08.
mysql_connect(
'dbhost'
,
'dbuser'
,
'dbpass'
);
09.
mysql_select_db(
'dbname'
);
10.
11.
// membaca username yang disimpan dalam session
12.
$username
=
$_SESSION
[
'username'
];
13.
14.
echo
"
Anda login sebagai : "
.
$username
.
"
"
;
15.
echo
"[
Upload ] [ Daftar File ] [ Logout ]
"
;
16.
17.
echo
"
Daftar File Anda
"
;
18.
19.
// query untuk mencari file yang telah diupload milik si user yang sedang login
20.
$query
=
"SELECT * FROM upload WHERE username = '$username'"
;
21.
22.
$hasil
= mysql_query(
$query
);
23.
24.
// menampilkan nama-nama file yang telah diupload si user yang sedang login
25.
echo
"
"
;
26.
while
(
$data
= mysql_fetch_array(
$hasil
))
27.
{
28.
echo
"
']."'
>".
$data
[
'name'
].
"
(']."'
>x
)
";
29.
}
30.
echo
""
;
31.
32.
?>
Pada daftar file yang tampil, si user dapat mendownload file nya
dengan mengklik nama filenya atau menghapusnya dengan mengklik tanda X
yang ada di sebelah kanan nama file. Untuk proses download, linknya akan
diarahkan ke script ‘download.php’ dan hapus file di arahkan ke
‘delete.php’. Kedua link tersebut ditambahkan parameter ‘?id=…’ yang
digunakan untuk mengidentifikasi file apa yang akan didownload atau
dihapus, mengingat pembeda antar file adalah ID nya.
Bagaimana script download.php nya? trus bagaimana idenya supaya file
tersebut hanya berhak didownload oleh user yang telah menguploadnya atau
yang berhak? ya… konsepnya kita cari dulu nama username pemilik file
yang akan didownload dalam database. Selanjutnya kita cocokkan username
pemiliknya dengan username yang sedang login. Jika sama atau cocok, maka
bolehlah file tersebut didownload. Jika tidak, maka tolak mentah-mentah
download.php
01.
02.
03.
session_start();
04.
05.
// sisipkan cek.php untuk keamanan
06.
include
"cek.php"
;
07.
08.
// koneksi ke mysql
09.
mysql_connect(
'dbhost'
,
'dbuser'
,
'dbpass'
);
10.
mysql_select_db(
'dbname'
);
11.
12.
// membaca nilai ID file yang berasal dari link download.php?id=...
13.
$id
=
$_GET
[
'id'
];
14.
15.
// membaca username yang sedang login melalui session
16.
$username
=
$_SESSION
[
'username'
];
17.
18.
// query untuk mencari data file yang akan didownload dalam database
19.
$query
=
"SELECT * FROM upload WHERE id = $id"
;
20.
21.
$hasil
= mysql_query(
$query
);
22.
$data
= mysql_fetch_array(
$hasil
);
23.
24.
// mencocokkan username pemilik file dengan username yang sedang login
25.
if
(
$username
==
$data
[
'username'
])
26.
{
27.
// bila usernamenya cocok maka file boleh didownload
28.
header(
"Content-Disposition: attachment; filename="
.
$data
[
'name'
]);
29.
header(
"Content-length: "
.
$data
[
'size'
]);
30.
31.
header(
"Content-type: "
.
$data
[
'type'
]);
32.
33.
echo
$data
[
'content'
];
34.
}
35.
else
36.
{
37.
// bila tidak sama maka file tidak boleh didownload
38.
echo
"
Anda tidak berhak mengakses file
"
;
39.
}
40.
?>
Konsep yang hampir sama juga kita terapkan dalam delete.php. Artinya
bahwa mekanisme pencocokan username pemilik file dengan username yang
sedang login juga harus dilakukan sebelum file dihapus.
delete.php
01.
02.
03.
session_start();
04.
05.
include
"cek.php"
;
06.
07.
// koneksi ke mysql
08.
mysql_connect(
'dbhost'
,
'dbuser'
,
'dbpass'
);
09.
mysql_select_db(
'dbname'
);
10.
11.
// membaca id file yang akan dihapus
12.
$id
=
$_GET
[
'id'
];
13.
14.
// membaca username yang sedang login
15.
$username
=
$_SESSION
[
'username'
];
16.
17.
// mencari username pemilik file yang akan dihapus
18.
$query
=
"SELECT username FROM upload WHERE id = $id"
;
19.
$hasil
= mysql_query(
$query
);
20.
$data
= mysql_fetch_array(
$hasil
);
21.
22.
// mencocokkan username pemilik file dengan username yang sedang login
23.
if
(
$username
==
$data
[
'username'
])
24.
{
25.
// jika cocok maka hapus file
26.
$query
=
"DELETE FROM upload WHERE id = $id"
;
27.
mysql_query(
$query
);
28.
29.
echo
"
Anda login sebagai : "
.
$username
.
"
"
;
30.
echo
"[
Upload ] [ Daftar File ] [ Logout ]
"
;
31.
32.
echo
"File telah dihapus
"
;
33.
}
34.
else
35.
{
36.
// jika tidak cocok maka tolak
37.
echo
"
Maaf Anda tidak berhak menghapus file ini
"
;
38.
}
39.
40.
?>
Yang terakhir, jangan lupa buat script logout.php untuk proses
logoutnya. Konsep logout adalah dengan menghapus session yang digunakan
untuk menyimpan username yang login.
logout.php
01.
02.
03.
session_start();
04.
05.
// menghapus session
06.
session_destroy();
07.
echo
"
Anda sudah logout
"
;
08.
09.
?>
Perhatian:
Script di atas sudah melalui tahap pengujian dan dipastikan 100%
dapat berjalan dengan normal. Bila Anda mencoba dan mengalami kesalahan
atau berjalan tidak normal maka dipastikan kesalahan ada pada Anda. Coba
cek kembali script yang Anda buat. Bila kesalahan masih berlanjut, maka
downloadlah script di bawah ini.
[ Download Script ]
Mudah bukan membuatnya? Selamat mencoba ya…
EmoticonEmoticon