Berikut ini akan dibahas tentang bagaimana membuat login dengan php, dan membuat tingkatan hak akses user untuk setiap halaman.
Fitur dalam aplikasi :
- Login dengan PHP
- Penggunaan Cookie
- Aplikasi PHP Multi User
- Hak Akses User
- Dasar Pembuatan Theme
- Dasar Pembuatan Framework
Desain Database
Database berisi dua table, yaitu :
- Table s_user, yang berfungsi untuk menampung data user, seperti username dan password.
- Table s_login, yang berfungsi untuk mencatat user yang sedang login.
|
Tampilan Database |
|
Struktur Table User |
|
Struktur Table Login |
File-File Aplikasi
Berikut adalah file-file php dan file Database :
|
File-File |
Form Login
Bisa diakses oleh semua orang tanpa login.
Berikut tampilan Form Login
|
Halaman Login |
Source Code Form Login (form_login.php)
<h1>Form Login</h1>
<form name="form1" method="post" action="proses_login.php" >
<table border="0" cellpadding="2" cellspacing="0">
<tr>
<td>Username</td>
<td>:</td>
<td><input type="text" name="username" value="" size="30" maxlength="30" /></td>
</tr>
<tr>
<td>Password</td>
<td>:</td>
<td><input type="password" name="password" value="" size="30" maxlength="30" /></td>
</tr>
<tr>
<td> </td>
<td> </td>
<td><input type="submit" name="submit" value="Login" /></td>
</tr>
</table>
</form>
Source Code Proses Login (proses_login.php)
<?php
// Memuat konfigurasi
include("konfigurasi.php");
// Cek variable yang dikirim
if(!isset($_POST['username'])) {
echo "Tidak ada Username";
}
if(!isset($_POST['password'])) {
echo "Tidak ada Password";
}
// Proses variable
$username = str_replace("'", "", $_POST['username']);
$password_post_md5 = md5($_POST['password']);
// Membuat SQL
$sql_user = "
SELECT *
FROM s_user
WHERE
username LIKE '$username'
AND password LIKE '$password_post_md5'
LIMIT 1;
";
// Proses Query
$query_user = mysql_query($sql_user);
// Cek Query
if($query_user) {
if(mysql_num_rows($query_user) > 0) {
$datauser = mysql_fetch_assoc($query_user);
// print_r($datauser);
$id_user = $datauser['id'];
$waktu_login = date('Y-m-d H:i:s', time());
$waktu_kadaluarsa = date('Y-m-d H:i:s', time()+(24*3600));
$key_login = time() . rand(1000,9000); // 13820573563348
// Detect IP User
$ip = info_client_ip_getenv();
// Detect Informasi PC dan Browser
$pc_dan_browser = info_pc_dan_browser();
// Catat user login dalam database
$sql_login = "
INSERT INTO s_login (key_login, id_user, waktu_login, waktu_kadaluarsa, status, ip, pc_dan_browser) VALUES
('$key_login', '$id_user', '$waktu_login', '$waktu_kadaluarsa', '1', '$ip', '$pc_dan_browser');
";
// Proses catat login
$query_login = mysql_query($sql_login);
// Cek query login
if($query_login) {
// Catat login dalam cookies
setcookie("key_login", $key_login, time()+(24*3600),"/");
// Alihkan ke halaman home
header("location:index.php?p=home");
exit;
} else {
// Menampilkan pesan
echo "Login tidak berhasil. #3";
exit;
}
} else {
// Menampilkan pesan
echo "Username atau Password salah.";
exit;
}
} else {
// Menampilkan pesan
echo "Login tidak berhasil. #1";
exit;
}
?>
Halaman Home
Bisa diakses oleh semua user yang sudah login.
Berikut tampilan Halaman Home
|
Halaman Home |
Source Code Halaman Home (home.php)
<?php
// Untuk mengakses halaman ini, harus login
if(!$user_sedang_login) {
echo "Belum Login.";
exit;
}
// Atur hak akses user, untuk halaman ini.
// Halaman ini bisa diakses oleh semua user login
if($hak_akses > 0) {
// Lanjut
} else {
echo "Tidak ada hak akses.";
exit;
}
?>
<h1>Home</h1>
<p>
Selamat datang. <br/>
Halaman ini <u>bisa diakses oleh semua user login</u>.
</p>
<p>
Informasi User yang sedang login (Anda) :
</p>
<table border="1" cellpadding="4" cellspacing="0">
<tr >
<td>ID User</td>
<td><?php echo $datauserlogin[2]['id_user']; ?></td>
</tr>
<tr>
<td>Username</td>
<td><b><?php echo $datauserlogin[2]['username']; ?></b></td>
</tr>
<tr>
<td>Nama</td>
<td><?php echo $datauserlogin[2]['nama']; ?></td>
</tr>
<tr >
<td>Email</td>
<td><?php echo $datauserlogin[2]['email']; ?></td>
</tr>
<tr bgcolor="#FFFF99">
<td>Hak Akses</td>
<td><?php echo $datauserlogin[2]['hak_akses']; ?></td>
</tr>
<tr >
<td>Waktu Login</td>
<td><?php echo $datauserlogin[2]['waktu_login']; ?></td>
</tr>
<tr>
<td>Waktu Kadaluarsa Login</td>
<td><?php echo $datauserlogin[2]['waktu_kadaluarsa']; ?></td>
</tr>
<tr>
<td>IP Address</td>
<td><?php echo $datauserlogin[2]['ip']; ?></td>
</tr>
<tr>
<td>PC dan Browser</td>
<td><?php echo $datauserlogin[2]['pc_dan_browser']; ?></td>
</tr>
</table>
Tes Halaman, Diberi Nama Halaman Jeruk
Diseting untuk bisa diakses oleh user yang memiliki tingkat hak akses lebih dari sama dengan 3.
Berikut tampilan Halaman Jeruk
|
Halaman Jeruk |
Source Code Halaman Jeruk (jeruk.php)
<?php
// Untuk mengakses halaman ini, harus login
if(!$user_sedang_login) {
echo "Belum Login.";
exit;
}
// Atur hak akses user, untuk halaman ini.
// Halaman ini bisa diakses oleh semua user sbb :
if($hak_akses >= 3) {
// Lanjut
} else {
echo "Tidak ada hak akses.";
exit;
}
?>
<h1>Jeruk</h1>
<p>
Halaman Jeruk.<br>
Halaman ini <u>bisa diakses oleh user, dengan hak akses >= 3</u>. <br>
<span style="background-color:#FF9;" >Hak akses user yang sedang login adalah <b><?php echo $hak_akses; ?></b></span>.
</p>
Tes Halaman, Diberi Nama Halaman Manggis
Diseting untuk bisa diakses oleh user yang memiliki tingkat hak akses lebih dari sama dengan 2.
Berikut tampilan Halaman Manggis
|
Halaman Manggis |
Source Code Halaman Manggis (manggis.php)
<?php
// Untuk mengakses halaman ini, harus login
if(!$user_sedang_login) {
echo "Belum Login.";
exit;
}
// Atur hak akses user, untuk halaman ini.
// Halaman ini bisa diakses oleh semua user sbb :
if($hak_akses >= 2) {
// Lanjut
} else {
echo "Tidak ada hak akses.";
exit;
}
?>
<h1>Manggis</h1>
<p>
Halaman Manggis.<br>
Halaman ini <u>bisa diakses oleh user, dengan hak akses >= 2</u>. <br>
<span style="background-color:#FF9;" >Hak akses user yang sedang login adalah <b><?php echo $hak_akses; ?></b></span>.
</p>
Halaman Catatan Login (Log User Login)
Diseting untuk bisa diakses oleh user yang memiliki tingkat hak akses sama dengan 10 (super user)).
Berikut tampilan Halaman Catatan Login
|
Halaman Catatan Login |
Source Code Halaman Catatan Login (catatan_login.php)
<?php
// Untuk mengakses halaman ini, harus login
if(!$user_sedang_login) {
echo "Belum Login.";
exit;
}
// Atur hak akses user, untuk halaman ini.
// Halaman ini bisa diakses oleh semua user sbb :
if($hak_akses == 10) {
// Lanjut
} else {
echo "Tidak ada hak akses.";
exit;
}
?>
<h1>Catatan Login (Log)</h1>
Berikut ini ditampilkan 1000 catatan login terakhir : <br/> <br/>
<table border="1" cellpadding="4" cellspacing="0">
<tr>
<th nowrap scope="col">ID Login</th>
<th nowrap scope="col">Waktu Login</th>
<th nowrap scope="col">Waktu Kadaluarsa</th>
<th nowrap scope="col">ID User</th>
<th nowrap scope="col">Username</th>
<th nowrap scope="col">Hak Akses</th>
<th nowrap scope="col">IP Address</th>
<th nowrap scope="col">PC dan Browser</th>
<th nowrap scope="col">Status Logout</th>
<th nowrap scope="col">Aktif/Online</th>
</tr>
<?php
$sql_clogin = "
SELECT
l.id AS id_login,
l.waktu_login,
l.waktu_kadaluarsa,
l.id_user,
u.username,
u.hak_akses,
l.ip,
l.pc_dan_browser,
l.status AS ketstatus
FROM s_login l
LEFT JOIN s_user u ON l.id_user = u.id
ORDER BY
l.waktu_login DESC
LIMIT 1000;
";
$query_clogin = mysql_query($sql_clogin);
if(!$query_clogin) {
echo "Tidak berhasil query.";
exit;
} else {
while ($baris_clogin = mysql_fetch_assoc($query_clogin)) {
if($waktu_server <= $baris_clogin['waktu_kadaluarsa'] && $baris_clogin['ketstatus'] == '1') {
$online = "Online";
$bg = "#66FF99";
} else {
$online = "---";
$bg = "#FFFFFF";
}
?>
<tr bgcolor="<?php echo $bg; ?>">
<td nowrap ><?php echo $baris_clogin['id_login']; ?></td>
<td nowrap ><?php echo $baris_clogin['waktu_login']; ?></td>
<td nowrap ><?php echo $baris_clogin['waktu_kadaluarsa']; ?></td>
<td nowrap ><?php echo $baris_clogin['id_user']; ?></td>
<td nowrap ><?php echo $baris_clogin['username']; ?></td>
<td nowrap ><?php echo $baris_clogin['hak_akses']; ?></td>
<td nowrap ><?php echo $baris_clogin['ip']; ?></td>
<td nowrap ><?php echo $baris_clogin['pc_dan_browser']; ?></td>
<td nowrap >
<?php
if($baris_clogin['ketstatus'] == '0') {
echo "Telah melakukan Logout";
} else {
echo "---";
}
?>
</td>
<td nowrap style="font-weight:bold;" ><?php echo $online; ?></td>
</tr>
<?php
}
}
?>
</table>
Source Code Logout (logout.php)
<?php
// Memuat konfigurasi
include("konfigurasi.php");
// Hapus Cookie
setcookie("key_login", "0", time()-(24*3600*30),"/");
if(isset($_COOKIE['key_login'])) {
$key_login = $_COOKIE['key_login'];
// Update catatan login
$sql_logout = "
UPDATE s_login SET status = '0'
WHERE key_login = '$key_login'
LIMIT 1;
";
$query_logout = mysql_query($sql_logout);
if($query_logout) {
alihkan_halaman('index.php?p=form_login');
} else {
echo "Tidak sempurna logout.";
}
}
?>
Source Code Index (index.php)
index.php berfungsi untuk meng-include halaman-halaman yang lain.
index.php juga berfungsi sebagai Theme, juga berfungsi sebagai Framework.
<?php
// Theme
// Memuat konfigurasi
include("konfigurasi.php");
?><!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Salim Basic Login PHP</title>
<style type="text/css" >
body {
margin: 30px 60px 30px 60px;
}
</style>
</head>
<body>
<!-- Menu -->
<?php
include("menu.php");
?>
<hr size="1" color="#CCCCCC" />
<?php
// Membaca variable p dalam URL
if(isset($_GET['p'])) {
if(strlen($_GET['p']) == 0) {
$p = "form_login";
} else {
$p = $_GET['p'];
}
} else {
$p = "form_login";
}
// Memuat file
if(file_exists($p . ".php")) {
include($p . ".php");
} else {
echo "Halaman tidak ditemukan.";
}
?>
<!-- Footer -->
<br/>
<hr size="1" color="#CCCCCC" />
<center>
© Frombanda
</center>
</body>
</html>
Source Code Menu (menu.php)
menu.php berisi menu-menu.
Dalam menu.php diatur kapan tampil menu sesuai hak akses user
<?php
// Menu
if($user_sedang_login != true) {
echo '<a href="index.php?p=form_login" >Login</a> | ';
}
if($user_sedang_login == true) {
echo '<a href="index.php?p=home" >Home</a> | ';
}
if($user_sedang_login == true) {
if($hak_akses >= 3) {
echo '<a href="index.php?p=jeruk" >Jeruk</a> | ';
}
}
if($user_sedang_login == true) {
if($hak_akses >= 2) {
echo '<a href="index.php?p=manggis" >Manggis</a> | ';
}
}
if($user_sedang_login == true) {
if($hak_akses == 10) {
echo '<a href="index.php?p=catatan_login" >Catatan Login</a> | ';
}
}
if($user_sedang_login == true) {
echo '<a href="logout.php" >Logout</a> ';
echo '( <b>'.$datauserlogin[2]["username"].'</b> )';
}
?>
Source Code Konfigurasi (konfigurasi.php)
Konfigurasi berisi konfigurasi, seperti password database.
<?php
// Variable Koneksi ke Database
// =====================================================
$host = 'localhost';
$user = 'salim_basiclogin';
$pass = 'U5DHb6F2v9vuz6ah';
$db = 'salim_basiclogin';
// =====================================================
// Setting Time zone
date_default_timezone_set('Asia/Jakarta');
$waktu_server = date('Y-m-d H:i:s', time());
// Setting tidak menampilkan error
error_reporting(0);
// Membuat Koneksi ke database
$con = mysql_connect($host,$user,$pass);
// Menangani kondisi koneksi
if (!$con) {
die('Tidak ada koneksi ke Database : ' . mysql_error());
}
// Memilih Database
mysql_select_db($db, $con);
// Memuat functions
include("functions.php");
// Memuat informasi User Login
// Mendeteksi informasi tentang user login
$datauserlogin = fb_cek_user_login();
// Data berikut ini ada saat user login
// Memuat informasi Sudah Login atau Belum
// $user_sedang_login bernilai true saat user sedang login
if(isset($datauserlogin[0])) {
$user_sedang_login = $datauserlogin[0];
} else {
$user_sedang_login = false;
}
// Data berikut ini ada saat user login
// Memuat informasi Hak Akses
// $hak_akses bernilai 1 sampai 10, jika user sedang login
if(isset($datauserlogin[2]['hak_akses'])) {
$hak_akses = $datauserlogin[2]['hak_akses'];
} else {
$hak_akses = 0;
}
?>
Source Code Functions (functions.php)
functions.php berisi functions cek user login, cek ip user, cek browser user, cek sistem operasi user, dll.
<?php
// Cek user login
function fb_cek_user_login() {
if(isset($_COOKIE['key_login'])) {
$key_login = $_COOKIE['key_login'];
$waktu_sekarang = date('Y-m-d H:i:s', time());
$sql_userlogin = "
SELECT
u.id AS id_user,
u.username,
u.nama,
u.email,
u.hak_akses,
l.waktu_login,
l.waktu_kadaluarsa,
l.ip,
l.pc_dan_browser
FROM s_login l
LEFT JOIN s_user u ON l.id_user = u.id
WHERE
l.key_login = '$key_login' AND
u.status = 1 AND
l.status = 1 AND
'$waktu_sekarang' <= l.waktu_kadaluarsa
LIMIT 1;
";
$query_ceklogin = mysql_query($sql_userlogin);
if($query_ceklogin) {
if(mysql_num_rows($query_ceklogin) > 0) {
$data_ceklogin = mysql_fetch_assoc($query_ceklogin);
// print_r($data_ceklogin);
return array(true, 'berhasil', $data_ceklogin);
} else {
return array(false, '#3');
}
} else {
return array(false, '#2');
}
} else {
return array(false, '#1');
}
}
// redirect
function alihkan_halaman($halaman_tujuan) {
error_reporting(0);
header("location:".$halaman_tujuan);
echo '<meta http-equiv="refresh" content="0; url='.$halaman_tujuan.'">';
echo '<script type="text/javascript"> window.location = "'.$halaman_tujuan.'"; </script>';
echo '<a href="'.$halaman_tujuan.'" >Redirect</a>...';
exit;
}
// Detect IP
function info_client_ip_getenv() {
$ipaddress = '';
if (getenv('HTTP_CLIENT_IP'))
$ipaddress = getenv('HTTP_CLIENT_IP');
else if(getenv('HTTP_X_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_X_FORWARDED_FOR');
else if(getenv('HTTP_X_FORWARDED'))
$ipaddress = getenv('HTTP_X_FORWARDED');
else if(getenv('HTTP_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_FORWARDED_FOR');
else if(getenv('HTTP_FORWARDED'))
$ipaddress = getenv('HTTP_FORWARDED');
else if(getenv('REMOTE_ADDR'))
$ipaddress = getenv('REMOTE_ADDR');
else
$ipaddress = 'UNKNOWN';
return $ipaddress;
}
// Detect PC
function info_pc_dan_browser() {
$ua = $_SERVER["HTTP_USER_AGENT"];
return strtolower($ua);
}
?>
----------------------------------------------------
----------------------------------------------------
Contoh dan Uji Coba Aplikasi
Anda dapat mengunjungi salah satu link di bawah ini yang konek :
Download Full Source Code PHP dan Database MySQL
Download :
Source Code Salim Basic Login PHP
Semoga bermanfaat.
Jika ada pertanyaan boleh email ke agussalim.us@gmail.com
.