Script
upload . download file dengan batasan hak akses
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.
CREATE
TABLE user (
username varchar(20),
password varchar(32),
PRIMARY KEY
(username)
)
CREATE
TABLE upload (
id int(11) auto_increment,
name varchar(30),
type varchar(30),
size int(11),
content mediumblob,
username varchar(20),
PRIMARY KEY (id)
)
Pada
tabel ‘upload’, field ID digunakan untuk memberikan nomor ID dari setiap file
supaya unik (pembeda tiap file) karena bisa jadi nama file yang diupload user
adalah sama. Field ‘name’ terkait dengan nama file yang diupload, ‘type’
terkait dengan jenis file apakah berupa image, text file atau dokumen dll,
‘size’ menyatakan ukuran file, dan ‘content’ untuk menyimpan isi file (di sini
menggunakan blob atau mediumblob). Nah.. kemudian field ‘username’ digunakan
untuk memberikan informasi kepemilikan dari file, milik user siapakah file
tersebut.
Selanjutnya
untuk sekedar mencoba, Anda bisa sekalian tambahkan beberapa user
INSERT
INTO `user` VALUES ('a', 'pass1');
INSERT
INTO `user` VALUES ('b', 'pass2');
Catatan:
dalam contoh ini sengaja saya tidak mengenkripsi password login masing-masing
username supaya Anda bisa mencoba. Namun.. lebih baik jika Anda gunakan
enkripsi.
Langkah
kedua, kita siapkan form login untuk user
index.htm
<h1>Login
User</h1>
<form
method="post" action="login.php">
<table>
<tr><td>Username</td><td><input
type="text" name="user"></td></tr>
<tr><td>Password</td><td><input
type="password" name="pass"></td></tr>
<tr><td></td><td><input
type="submit" name="submit" value="Submit"></td></tr>
</table>
</form>
Langkah
kedua, kita bisa buat script untuk memproses loginnya
login.php
<?php
//
koneksi ke mysql
mysql_connect('dbhost',
'dbuser', 'dbpass');
mysql_select_db('dbname');
//
membaca username dan password dari form login
$username
= $_POST['user'];
$password
= $_POST['pass'];
//
mencari data user yang login tujuannya untuk mendapatkan password dari database
$query =
"SELECT * FROM user WHERE username = '$username'";
$hasil =
mysql_query($query);
$data = mysql_fetch_array($hasil);
//
mencocokkan password user dari database dengan password dari form
if
($password == $data['password'])
{
// jika kedua password sama, maka login
berhasil
// simpan username ke dalam session
session_start();
$_SESSION['username'] = $username;
echo "<h1>Login
Sukses</h1>";
echo "<h2>Anda login sebagai :
".$username."</h2>";
// tampilkan menu user
echo "<p>[ <a
href='formupload.php'>Upload</a> ] [ <a href='list.php'>Daftar
File</a> ] [ <a href='logout.php'>Logout</a>
]</p>";
}
else
{
// jika kedua password tidak cocok, maka
login gagal
echo "<h1>Maaf login
gagal</h1>";
}
?>
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
<?php
session_start();
if
(!isset($_SESSION['username']))
{
echo "<h1>Maaf Anda belum
login</h1>";
exit;
}
?>
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
<?php
session_start();
include
"cek.php";
//
membaca nama user yang tersimpan dalam session
$username
= $_SESSION['username'];
echo
"<h1>Anda login sebagai : ".$username."</h1>";
echo
"<p>[ <a href='formupload.php'>Upload</a> ] [ <a
href='list.php'>Daftar File</a> ] [ <a
href='logout.php'>Logout</a> ]</p>";
echo
"<p>Silakan upload file</p>";
?>
// form
untuk upload
<form
method="post" enctype="multipart/form-data"
action="upload.php">
<table>
<tr><td><input
type="hidden" name="MAX_FILE_SIZE"
value="2000000">
<input name="userfile"
type="file">
</td>
<td><input name="upload"
type="submit" value="Upload">
</td>
</tr>
</table>
</form>
Perhatikan
pada tag <input name=”userfile” type=”file”>. 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
<?php
session_start();
// untuk
keamanan, kita juga includekan cek.php
include
"cek.php";
//
membaca nama file
$fileName
= $_FILES['userfile']['name'];
//
membaca nama file temporary
$tmpName = $_FILES['userfile']['tmp_name'];
//
membaca size file
$fileSize
= $_FILES['userfile']['size'];
//
membaca tipe file
$fileType
= $_FILES['userfile']['type'];
//
membaca username yang disimpan dalam session
//
username ini sekaligus menyatakan informasi pemilik file
$username
= $_SESSION['username'];
//
langkah membaca isi file yang diupload
$fp = fopen($tmpName, 'r');
$content
= fread($fp, filesize($tmpName));
$content
= addslashes($content);
fclose($fp);
//
koneksi ke mysql
mysql_connect('dbhost','dbuser','dbpass');
mysql_select_db('dbname');
// query
SQL untuk menyimpan file ke database disertai username pemiliknya
$query =
"INSERT INTO upload (name, size, type, content, username)
VALUES ('$fileName', '$fileSize',
'$fileType', '$content', '$username')";
mysql_query($query);
echo
"<h1>Anda login sebagai : ".$username."</h1>";
echo
"<p>[ <a href='formupload.php'>Upload</a> ] [ <a
href='list.php'>Daftar File</a> ] [ <a
href='logout.php'>Logout</a> ]</p>";
//
konfirmasi
echo
"<p>File ".$fileName." telah terupload</p>";
?>
Setelah
kita membuat script untuk proses upload, berikutnya kita buat script list.php
untuk menampilkan daftar file yang telah diupload
list.php
<?php
session_start();
include
"cek.php";
//
koneksi ke mysql
mysql_connect('dbhost','dbuser','dbpass');
mysql_select_db('dbname');
//
membaca username yang disimpan dalam session
$username
= $_SESSION['username'];
echo
"<h1>Anda login sebagai : ".$username."</h1>";
echo
"<p>[ <a href='formupload.php'>Upload</a> ] [ <a
href='list.php'>Daftar File</a> ] [ <a
href='logout.php'>Logout</a> ]</p>";
echo
"<h2>Daftar File Anda</h2>";
// query
untuk mencari file yang telah diupload milik si user yang sedang login
$query =
"SELECT * FROM upload WHERE username = '$username'";
$hasil =
mysql_query($query);
//
menampilkan nama-nama file yang telah diupload si user yang sedang login
echo
"<ul>";
while
($data = mysql_fetch_array($hasil))
{
echo "<li><a
href='download.php?id=".$data['id']."'>".$data['name']."</a>
(<a
href='delete.php?id=".$data['id']."'>x</a>)</li>";
}
echo
"</ul>";
?>
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
<?php
session_start();
//
sisipkan cek.php untuk keamanan
include
"cek.php";
//
koneksi ke mysql
mysql_connect('dbhost','dbuser','dbpass');
mysql_select_db('dbname');
//
membaca nilai ID file yang berasal dari link download.php?id=...
$id = $_GET['id'];
//
membaca username yang sedang login melalui session
$username
= $_SESSION['username'];
// query
untuk mencari data file yang akan didownload dalam database
$query = "SELECT * FROM upload WHERE id =
$id";
$hasil = mysql_query($query);
$data = mysql_fetch_array($hasil);
//
mencocokkan username pemilik file dengan
username yang sedang login
if
($username == $data['username'])
{
// bila usernamenya cocok maka file boleh
didownload
header("Content-Disposition:
attachment; filename=".$data['name']);
header("Content-length:
".$data['size']);
header("Content-type:
".$data['type']);
echo $data['content'];
}
else
{
// bila tidak sama maka file tidak boleh
didownload
echo "<h1>Anda tidak berhak
mengakses file</h1>";
}
?>
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
<?php
session_start();
include
"cek.php";
//
koneksi ke mysql
mysql_connect('dbhost','dbuser','dbpass');
mysql_select_db('dbname');
//
membaca id file yang akan dihapus
$id =
$_GET['id'];
//
membaca username yang sedang login
$username
= $_SESSION['username'];
//
mencari username pemilik file yang akan dihapus
$query =
"SELECT username FROM upload WHERE id = $id";
$hasil =
mysql_query($query);
$data = mysql_fetch_array($hasil);
//
mencocokkan username pemilik file dengan username yang sedang login
if
($username == $data['username'])
{
// jika cocok maka hapus file
$query = "DELETE FROM upload WHERE id =
$id";
mysql_query($query);
echo "<h1>Anda login sebagai :
".$username."</h1>";
echo "<p>[ <a
href='formupload.php'>Upload</a> ] [ <a href='list.php'>Daftar
File</a> ] [ <a href='logout.php'>Logout</a>
]</p>";
echo "<p>File telah
dihapus</p>";
}
else
{
// jika tidak cocok maka tolak
echo "<h1>Maaf Anda tidak berhak
menghapus file ini</h1>";
}
?>
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
<?php
session_start();
//
menghapus session
session_destroy();
echo
"<h1>Anda sudah logout</h1>";
?>
Cendol x
Agan2 :DD
0 comments:
Post a Comment