Rabu, 17 April 2013

login multi user

Membuat Login Form dengan PHP [Level Multi User]



Implementasi Login Form untuk user account untuk sebuah website/sebuah system sagatlah dibutuhkan, nah untuk mengintegrasikkan antara level-leveluser didalamnya maka dibutuhkan suatu filter untuk menentukan hak akses masing masing user, misal bagi admin bisa merubah, menghapus, dll… untuk user biasa mungkin hanya bisa melihat dan mencetak.

login.JPG (300×215)

berikut penulis bermaksud berbagi teknik pembuatan user account berdasarkan level user, namun ini sangatlah sederhana, tergantung nanti bagi pembaca untuk mengembangkan lebih lanjut. hayuk kita mulai sekarang.

awalnya kita buat dulu database dan table didalamnya
CREATE DATABASE `login` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; USE `login`; CREATE TABLE `user` (
  `id_user` varchar(50) collate latin1_general_ci NOT NULL,
  `password` varchar(50) collate latin1_general_ci NOT NULL,
  `nama_lengkap` varchar(100) collate latin1_general_ci NOT NULL,
  `email` varchar(100) collate latin1_general_ci NOT NULL,
  `level` varchar(50) collate latin1_general_ci NOT NULL default 'user',
  PRIMARY KEY  (`id_user`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

kemudian isikan nama user berikut kedalam table user
INSERT INTO `user` VALUES ('admin', '21232f297a57a5a743894a0e4a801fc3', 'Administrator', 'andyz_zx@yahoo.com', 'admin'); INSERT INTO `user` VALUES ('user', 'ee11cbb19052e40b07aac0ca060c23ee', 'User Biasa', 'andyz_zx@yahoo.com', 'user');

nah sekarang kita masuk ke dalam inti scripnya
simpan dengan koneksi.php
<?php $server = "localhost"; $username = "root"; $password = ""; $database = "login"; mysql_connect($server,$username,$password) or die("Koneksi gagal"); mysql_select_db($database) or die("Database tidak bisa dibuka"); ?>

simpan dengan nama index.php
<html> <head> <title>Login</title> </head> <body> <h2>Login</h2> <form method="POST" action="cek_login.php"> <table> <tr><td>Username</td><td> : <input type="text" name="username"></td></tr> <tr><td>Password</td><td> : <input type="password" name="password"></td></tr> <tr><td colspan="2"><input type="submit" value="Login"></td></tr> </table> </form> <pre> untuk login sebagai administrator
   - user : admin
   - pass : admin
untuk login sebagai user biasa
   - user : user
   - pass : user
</pre> </body> </html>

simpan dengan nama cek_login.php
<?php include "koneksi.php"; $pass=md5($_POST[password]); $sql=mysql_query("SELECT * FROM user WHERE id_user='$_POST[username]' AND password='$pass'"); $level=mysql_num_rows($sql); $r=mysql_fetch_array($sql); if ($level > 0){ session_start(); session_register("namauser"); session_register("passuser"); session_register("leveluser"); $_SESSION[namauser] = $r[id_user]; $_SESSION[passuser] = $r[password]; $_SESSION[leveluser]= $r[level]; header('location:admin.php'); } else{ header('location:index.php'); } ?>

simpan dengan nama admin.php
<?php session_start(); if (empty($_SESSION[namauser]) AND empty($_SESSION[passuser])){ echo "<center>Untuk mengakses halaman ini, Anda harus login terlebih dahulu<br>"; echo "<a href=index.php><b>Halaman Login</b></a></center>"; } else{ include "koneksi.php"; if ($_SESSION['leveluser']=='admin'){ $sql=mysql_query("SELECT * FROM user WHERE level='admin'"); $level=mysql_num_rows($sql); $r=mysql_fetch_array($sql); echo "Hi <b>$r[nama_lengkap]</b><br><br>"; echo "Andamasuk sebagai <b>Administrator</b><br>"; echo "<a href=logout.php><b>Logout</b></a></center>"; } elseif ($_SESSION['leveluser']=='user'){ $sql=mysql_query("SELECT * FROM user WHERE level='user'"); $level=mysql_num_rows($sql); $r=mysql_fetch_array($sql); echo "Hi <b>$r[nama_lengkap]</b><br><br>"; echo "Andamasuk sebagai <b>User Biasa</b><br>"; echo "<a href=logout.php><b>Logout</b></a></center>"; } } ?>

simpan dengan nama logout.php
<?php
  session_start(); //memulai session
  session_destroy(); //mengakhiri session
  header('location:admin.php');   //mengembalikan ke admin.php
?>

nah mudah kan, tinggal pengembangan masing2 ya.. agar lebih baik dan sempurna, selamat mencoba
untuk script selengkapnya download disini
-----


Bismillah… pada artikel kali ini saya akan mencoba memaparkan bagaimana teknik atau ide dalam membuat sistem login untuk aplikasi multi user.

Dalam suatu aplikasi bisa jadi terdapat lebih dari satu user dan dengan level yang berbeda-beda. Dengan adanya pembagian level tersebut diharapkan adanya hak akses yang berbeda. Untuk memudahkan Anda dalam membayangkan hal ini, misalkan terdapat 5 user katakanlah A, B, C, D dan E dimana user A, B dan C adalah level ‘administrator’, sedangkan D dan E user biasa. Nah… user A, B, dan C ini misalkan berhak mengakses halaman 1, 2 dan 3 dari aplikasi sedangkan D dan E hanya boleh mengakses halaman 3 saja. Dengan kata lain hak akses ke halaman-halaman tersebut ditentukan oleh level usernya.

Pemberian hak akses pada masing-masing user ini bisa dalam bentuk link menu. Ketika seorang user telah melakukan login, dan loginnya sukses maka akan muncul menu link ke halaman-halaman yang boleh diaksesnya. Sebagai gambaran misalnya pada contoh di atas, setelah user A login dan loginnya berhasil maka akan muncul menu link menuju ke halaman 1, 2 dan 3 karena si A ini levelnya Administrator. Namun untuk si D, karena levelnya user biasa, maka hanya akan muncul menu link menuju halaman 3 saja.

Nah… lantas bagaimana ide dan teknik dalam membuat sistem login terkait dengan hak akses untuk multi user seperti kasus di atas? Inilah yang akan saya beberkan rahasianya dalam artikel ini. Artikel ini merupakan request dari xfreecode (member saya) sekaligus salah satu dari sekian banyak trik dan teknik yang saya paparkan pada peserta kursus online PHP bersama saya.


Ide dan teknik untuk menyelesaikan kasus di atas sebenarnya hanyalah pada penggunaan SESSION. Setelah user berhasil login, maka dibaca level usernya. Untuk memudahkan pengecekan level user ini, maka level user disimpan pada SESSION. Nah.. level user yang tersimpan dalam SESSION inilah yang nantinya akan banyak dicek untuk keperluan pembatasan hak akses user pada halaman-halaman yang sifatnya private.

OK.. OK… sudah paham deh idenya, tapi gini… bagaimana seandainya ada user yang nakal? misalkan user E dengan level user biasa kebetulan tahu link URL menuju ke halaman 1. Lantas si E ini mencoba mem bypass link menuju halaman 1 melalui URL langsung tanpa melewati menu link, padahal halaman 1 ini adalah restricted area bagi user biasa (dalam hal ini si E). Nah lo… gimana hayoo?? ya… seorang programmer harus pinter-pinter ngakali. Trus… Gimana ngakalinya? ya… sebelum bagian script yang menampilkan konten pada halaman 1 terlebih dahulu harus mengecek level usernya sebagai ‘administrator’ atau tidak, melalui pengecekan SESSION nya. Jika ya, maka tampilkan kontennya, dan jika tidak maka munculkan pesan ‘Anda mau mencoba masuk ya?? Kagak boleh atuh ‘

OK.. deh … stop berteori, sekarang let’s do it!

Untuk studi kasusnya, misalkan kita punya data user sebagaimana tersaji dalam tabel berikut ini

CREATE TABLE user (
  username varchar(20),
  password varchar(20),
  level varchar(20),
  PRIMARY KEY(username)
);
INSERT INTO `user` VALUES ('a', 'pass1', 'admin'); INSERT INTO `user` VALUES ('b', 'pass2', 'admin'); INSERT INTO `user` VALUES ('c', 'pass3', 'user'); INSERT INTO `user` VALUES ('d', 'pass4', 'user'); INSERT INTO `user` VALUES ('e', 'pass5', 'user');
Wah.. passwordnya kok tidak dienkripsi? he 3x… ya itu saya sengaja karena supaya Anda bisa mencoba script yang saya buat ini. Memang sebaiknya passwordnya Anda enkripsi, paling tidak menggunakan md5().

Nah.. selanjutnya kita buat form loginnya.

login.htm
<form method="post" action="loginsubmit.php">  <table border="0">    <tr>      <td>Masukkan Username </td>      <td><input name="username" type="text"></td>    </tr>    <tr>      <td>Masukkan Password </td>      <td><input name="pass" type="password"></td>    </tr>    <tr>      <td>&nbsp;</td>      <td><input type="submit" name="Submit" value="Submit"></td>    </tr>  </table></form>

Form login sudah dibuat, berikutnya kita buat script untuk memproses loginnya.

loginsubmit.php
<?php
// memulai sessionsession_start();
mysql_connect('dbhost', 'dbuser', 'dbpass');mysql_select_db('dbname');
$username = $_POST['username'];$password = $_POST['pass'];
// query untuk mendapatkan record dari username$query = "SELECT * FROM user WHERE username = '$username'";$hasil = mysql_query($query);$data = mysql_fetch_array($hasil);
// cek kesesuaian passwordif ($password == $data['password']){    echo "<h1>Login Sukses</h1>";
    // menyimpan username dan level ke dalam session    $_SESSION['level'] = $data['level'];    $_SESSION['username'] = $data['username'];
    // tampilkan menu    include "menu.php";
}else echo "<h1>Login gagal</h1>";
?>

Bila Anda perhatikan pada script di atas, maka terlihat bahwa menunya membaca script menu.php. Di dalam script menu.php sendiri nantinya terdapat pengecekan level usernya yang tadi tersimpan dalam session sewaktu login sukses. Bila level usernya adalah ‘admin’ maka tampilkan menu link menuju halaman 1, 2, dan 3. Begitu pula untuk level ‘user’.

menu.php
<?php
session_start();
if ($_SESSION['level'] == "admin"){    // tampilkan menu untuk admin    echo "<a href='hal1.php'>Halaman 1</a> ";    echo "<a href='hal2.php'>Halaman 2</a> ";    echo "<a href='hal3.php'>Halaman 3</a> ";    echo "<a href='logout.php'>Logout</a> ";}else if ($_SESSION['level'] == "user"){    // tampilkan menu untuk user biasa    echo "<a href='hal3.php'>Halaman 3</a>";    echo "<a href='logout.php'>Logout</a> ";}
?>

Selanjutnya, kita bisa mulai membuat konten pada halaman 1, 2 dan 3. Ingat.. sebelum menampilkan kontennya sebaiknya dicek level usernya terlebih dahulu. Bila levelnya tidak sesuai dengan hak aksesnya, maka jangan ragu untuk menolak Untuk halaman 1, dari kasus yang kita ambil hanya bisa diakses oleh user berlevel ‘admin’ saja. Begitu pula untuk halaman 2. Namun untuk halaman 3, baik level ‘admin’ maupun ‘user’ biasa boleh mengaksesnya.

hal1.php
<?php
session_start();
// cek apakah user yang mengakses halaman ini sudah melalui login atau belum// logikanya jika user telah login dan sukses, maka SESSION level dan SESSION username ini pasti sudah ada// jika ada user yang mencoba akses halaman ini tanpa login, maka logikanya kedua SESSION belum ada
if (isset($_SESSION['level']) && isset($_SESSION['username'])){   // tampilkan menu.   // menu hanya ditampilkan bila halaman ini diakses oleh user yang telah login
   include "menu.php";
   // cek level user apakah admin atau bukan
   if ($_SESSION['level'] == "admin")   {       // tampilkan konten halaman 1 jika levelnya admin
       echo "<h1>Halaman 1</h1>";       echo "<p>Selamat datang di halaman satu wahai user : ".$_SESSION['username']."</p>";       echo "<p>Ini adalah konten halaman 1</p>";   }   else   {       // jika levelnya bukan admin, tampilkan pesan       echo "<h1>Maaf.. Anda bukan user berlevel Administrator</h1>";   }}else{   echo "<h1>Nah.. Anda pasti mencoba akses halaman ini tanpa login ya?</h1>";}
?>

Untuk halaman 2, konsepnya juga sama seperti script halaman 1 di atas, hanya yang berbeda pada kontennya tentu saja  Sekarang untuk halaman ke-3 di mana yang bisa mengakses adalah semua level user, scriptnya adalah:

hal3.php
<?php
session_start();
if (isset($_SESSION['level']) && isset($_SESSION['username'])){   include "menu.php";
   if (($_SESSION['level'] == "admin") || ($_SESSION['level'] == "user"))   {       echo "<h1>Halaman 3</h1>";       echo "<p>Selamat datang di halaman tiga wahai user : ".$_SESSION['username']."</p>";       echo "<p>Ini adalah konten halaman 3</p>";   }}else{   echo "<h1>Nah.. Anda pasti mencoba akses halaman ini tanpa login ya?</h1>";}
?>

Eits… hampir lupa, yang terakhir kita buat script logoutnya. Pada prinsipnya proses logout adalah menghapus semua session yang tadi terbentuk ketika login sukses.

logout.php
<?php
session_start();session_destroy();echo "<h1>Anda sudah logout</h1>";echo "<p><a href='formlogin.htm'>Login Kembali</a></p>";
?>

That’s it… mudah bukan membuatnya? Mudah-mudahan artikel di atas menjawab semua unek-unek yang dihadapi bagi Anda yang ingin membuat aplikasi dengan multi user. Download Script
-----


Membuat Login Multi User dengan PHP
Saat ini banyak CMS atau juga situs-situs komunitas memiliki multi user, yang mempunyai tingkatan level yang berbeda-beda juga. Misalnya ada level admin, ada level user, yang mempunyai hak akses yang berbeda-beda.

Konsep untuk membuat login multi user adalah :

  1. Buat tabel user di database yang menyimpan data level masing-masing user
  2. Ketika login kita simpan level user yang login ke dalam variabel $_SESSION
  3. Ketika user masuk ke suatu halaman, cek apakah user sudah login dan cek level user tersebut


Sekarang mari kita lihat contoh tabel user di database dan kode PHPnya. Misal kita punya banyak halaman, di mana halaman-halaman tersebut mempunyai hak akses yang berbeda-beda. Contoh halaman-halaman web yang kita punya :


File / Halaman WebYang Boleh Akses
homeadmin.phpadmin
homeuser.phpuser
halaman1.phpadmin
halaman2.phpadmin dan user
halaman3.phpuser


Berikut adah struktur tabeluser di database :
--
-- Table structure for table `tabeluser`
--
CREATE TABLE `tabeluser` (
`userid` varchar(20) NOT NULL,
`password` varchar(50) NOT NULL,
`level` varchar(15) NOT NULL,
PRIMARY KEY (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Pertama-tama mari kita buat halaman untuk login. index.php

<html><head><title>Login</title></head><body><h2>Halaman Login</h2><form action="log.php?op=in" method="post">User ID : <input type="text" name="userid"><br>Password : <input type="password" name="psw"><br><input type="submit" value="Login"></form></body></html>
Pada halaman login di atas terdapat action berupa file log.php
<?phpsession_start();mysql_connect("localhost","root","") or die("Nggak bisa koneksi");mysql_select_db("test");//sesuaikan dengan nama database anda $userid = $_POST['userid'];$psw = $_POST['psw'];$op = $_GET['op']; if($op=="in"){ $cek = mysql_query("SELECT * FROM tabeluser WHERE userid='$userid' AND password='$psw'"); if(mysql_num_rows($cek)==1){//jika berhasil akan bernilai 1 $c = mysql_fetch_array($cek); $_SESSION['userid'] = $c['userid']; $_SESSION['level'] = $c['level']; if($c['level']=="admin"){ header("location:homeadmin.php"); }else if($c['level']=="user"){ header("location:homeuser.php"); } }else{ die("password salah <a href=\"javascript:history.back()\">kembali</a>"); }}else if($op=="out"){ unset($_SESSION['userid']); unset($_SESSION['level']); header("location:index.php");}?>
Pada kode log.php tersebut pertama-tama kita cek ke dalam tabeluser apakah ada userid dan password yang cocok. Jika ada maka kita set variabel $_SESSION['userid'] dan $_SESSION['level'], di mana nilai dari variabel session tersebut kita ambil dari database. Jika level user adalah admin maka langsung kita arahkan ke halaman homeadmin.php. Jika level user adalah user, maka kita arahlan ke halaman homeuser.php
Berikut adalah kode homeadmin.php
<?phpsession_start(); //cek apakah user sudah loginif(!isset($_SESSION['userid'])){ die("Anda belum login");//jika belum login jangan lanjut..} //cek level userif($_SESSION['level']!="admin"){ die("Anda bukan admin");//jika bukan admin jangan lanjut}?> <html><head><title>Halaman Admin</title></head><body><?php echo "<h3>Welcome ".$_SESSION['userid']."</h3>";?>Menu :<a href=halaman1.php>Halaman 1</a> |<a href=halaman2.php>Halaman 2</a> |<a href=log.php?op=out>Log Out</a> </body></html>
Pada kode di atas untuk mengecek apakah user sudah login atau belum adalah dengan menggunakan kode if(!isset($_SESSION['userid'])), artinya jika user belum login, yang ditandai dengan telah diset-nya variabel $_SESSION['userid']. Jika ternyata belum login maka kita stop sampai disitu dengan menggunakan fungsi die().
Jika user ternyata sudah login maka kita cek tingkatan level user. Kode $_SESSION['level']!="admin") berarti jika level tidak sama dengan admin, maka stop atau die().
Sekarang mari kita lihat kode homeuser.php
<?phpsession_start(); //cek apakah user sudah loginif(!isset($_SESSION['userid'])){ die("Anda belum login");//jika belum login jangan lanjut..} //cek level userif($_SESSION['level']!="user"){ die("Anda bukan user");//jika bukan user jangan lanjut}?> <html><head><title>Halaman User</title></head><body><?php echo "<h3>Welcome ".$_SESSION['userid']."</h3>";?>Menu :<a href=halaman2.php>Halaman 2</a> |<a href=halaman3.php>Halaman 3</a> |<a href=log.php?op=out>Log Out</a> </body></html>
halaman1.php
<?phpsession_start(); //cek apakah user sudah loginif(!isset($_SESSION['userid'])){ die("Anda belum login");//jika belum login jangan lanjut..} //cek level userif($_SESSION['level']!="admin"){ die("Anda bukan admin");//jika bukan admin jangan lanjut}?> <html><head><title>Halaman Admin</title></head><body><?php echo "<h3>Welcome ".$_SESSION['userid']."</h3>";?> <h4>Ini Halaman 1</h4> </body></html>
halaman2.php
<?phpsession_start(); //cek apakah user sudah loginif(!isset($_SESSION['userid'])){ die("Anda belum login");//jika belum login jangan lanjut..} //cek level userif($_SESSION['level']!="admin" && $_SESSION['level']!="user"){ die("Anda bukan admin");//jika bukan admin dan user jangan lanjut}?> <html><head><title>Halaman Admin dan User</title></head><body><?php echo "<h3>Welcome ".$_SESSION['userid']."</h3>";?> <h4>Ini Halaman 2</h4> </body></html>
halaman3.php
<?phpsession_start(); //cek apakah user sudah loginif(!isset($_SESSION['userid'])){ die("Anda belum login");//jika belum login jangan lanjut..} //cek level userif($_SESSION['level']!="user"){ die("Anda bukan user");//jika bukan user jangan lanjut}?> <html><head><title>Halaman User</title></head><body><?php echo "<h3>Welcome ".$_SESSION['userid']."</h3>";?> <h4>Ini Halaman 3</h4> </body></html