Membuat Limit Access User Berdasarkan WaktuTutorial ini mengimplementasikan bagaimana menentukan hak akses user berdasarkan limit hari yang di peroleh dari sistem
dengan demikian dapat diterapkan pada login sistem yg menginginkan adanya batasan pada member mereka.
simak tutorial na
Bwat sample database dan table:
-- phpMyAdmin SQL Dump
-- version 2.10.3
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Dec 09, 2009 at 10:22 AM
-- Server version: 5.0.51
-- PHP Version: 5.2.6
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- Database: `tester`
--
-- --------------------------------------------------------
--
-- Table structure for table `user`
--
CREATE TABLE `user` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
`registered` int(11) NOT NULL,
`expired` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
--
-- Dumping data for table `user`
--
so, bikin scriptna:
1. DEFINISI
beberapa define akan diperlukan dalam kasus ini:
<?
##DEFINE
define("_HOST", "localhost");
define("_USER", "root");
define("_PASS", "123");
define("_DBASE", "tester");
define("_TABLE", "user");
?>
2. CLASS DAN FUNCTION
Class digunakan untuk koneksi database, sedangkan fungsi lainnya untuk keperluan aksi script
<?
##MY CLASS
class db
{
function connect($host, $user, $pass, $dbase)
{
mysql_connect($host, $user, $pass) or die('Could not connect: ' . mysql_error());
mysql_select_db($dbase) or die('Could not select database');
}
function query($sql)
{
$qry = mysql_query($sql);
return $qry;
}
function num_rows($qry)
{
$num = mysql_num_rows($qry);
return $num;
}
function fetch_array($qry)
{
$row = mysql_fetch_array($qry);
return $row;
}
}
##SIMPLE FUNCTION TO CALCULATE THE LIMIT INFO OF USERS
function getUserInfo($reg, $exp, $select)
{
//echo $reg;
//echo $exp;
$chkToday = mktime(0,0,0,date("m"),date("d"),date("Y"));
$rangeDays = $exp - $reg;
$limit = round($rangeDays/(24*60*60));
$remain = round(($exp - $chkToday)/(24*60*60));
//minus handler for remaining days
if($remain <=0)
{
$remain = 0;
}
$used = round($limit - $remain);
if($select == 'limit')
{
return $limit;
}
elseif($select == 'remain')
{
return $remain;
}
elseif($select == 'used')
{
return $used;
}
}
function quote_smart($value)
{
// Stripslashes
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
// Quote if not integer
if (!is_numeric($value)) {
$value = "'" . mysql_real_escape_string($value) . "'";
}
return $value;
}
?>
3. MAIN SCRIPT
untuk main script mulailah dengan pemanggilan class:
##CALLING CLASS
//Construct the database
$mysql = new db;
$mysql->connect(_HOST, _USER, _PASS, _DBASE);
4. USER LOGOUT
//just fill the blank table
$query = $mysql->query("SELECT * FROM "._TABLE."");
$count = $mysql->num_rows($query);
if($count == 0)
{
echo "<p style=\"margin-left:65px;\">No Data</p>";
}
if($_GET['logout'] == 1)
{
unset($username);
session_destroy();
echo "<p style=margin-left:65px>Session Clear Done ! <meta http-equiv=\"refresh\" content=\"3;$_SERVER[PHP_SELF]\" /></p>";
}
5. CLEAR DATABASE
simulasi mengclear sluruh data dalam database
##IMPLEMENTAD OF USER NAVIGATION
//clear data
echo "<p style=\"margin-left:65px;\">";
if($_GET['cPub'] == 'clear')
{
$clear = $mysql->query("TRUNCATE TABLE "._TABLE."");
if($clear)
{
echo "Clear Data Done ! <meta http-equiv=\"refresh\" content=\"3;$_SERVER[PHP_SELF]\" />";
}
}
6. INSERT USER KE DALAM TABLE
elseif($_GET['cPub'] == 'insert')
{
if(isset($_POST['submit']))
{
if(empty($_POST['username']) || empty($_POST['password']) || empty($_POST['expired']))
{
echo "Empty Field for username || password || expired date !
<meta http-equiv=\"refresh\" content=\"3;?cPub=insert\" />";
}
else
{
$username = stripslashes(strip_tags(trim($_POST['username'])));
$password = stripslashes(strip_tags(trim($_POST['password'])));
$data = $_POST['expired'];
list($year, $month, $day) = explode("-", $data);
$queryToCheck = $mysql->query("SELECT * FROM "._TABLE."
WHERE username='".$username."'");
$countOfCheck = $mysql->num_rows($queryToCheck);
if($countOfCheck == 0)
{
$mysql->query("INSERT INTO "._TABLE." (username, password, registered, expired)
VALUES('$username', '".md5("$password")."',
'".mktime(0,0,0,date('m'),date('d'),date('Y'))."',
'".mktime(0,0,0,$month,$day,$year)."')");
echo "Insert Data Done !
<meta http-equiv=\"refresh\" content=\"3;$_SERVER[PHP_SELF]\" />";
}
else
{
echo "Username has been taken ! Chose another username.
<meta http-equiv=\"refresh\" content=\"3;?cPub=insert\" />";
}
}
}
else
{
?>
<form style="margin-left:65px;" action="" method="post" name="insertUser">
Username:<br />
<input type="text" name="username" /><br /><br />
Password:<br />
<input type="password" name="password" /><br /><br />
Expired Date:<br />
<input name="expired" id="dob" size="10" maxlength="10" type="text">
<img src="js/datechooser/IconDateTimePicker.jpg" onclick="showChooser(this, 'dob', 'chooserSpan', 1950, 2010, 'Y-m-d', false);">
<div id="chooserSpan" class="dateChooser select-free" style="display: none; visibility: hidden; width: 160px;">
</div>
<br /><br />
<input name="submit" type="submit" value="register" />
</form>
<?
}
}
7. USER LOGIN
untuk login user setelah terdaftar dalam table user
elseif($_GET['cPub'] == 'login')
{
if(isset($_POST['submit']))
{
if(empty($_POST['username']) || empty($_POST['password']))
{
echo "Empty Field for username and password !
<meta http-equiv=\"refresh\" content=\"3;?cPub=login\" />";
}
else
{
$username = stripslashes(strip_tags(trim($_POST['username'])));
$password = stripslashes(strip_tags(trim($_POST['password'])));
$qLogin = $mysql->query("SELECT * FROM "._TABLE."
WHERE username='".$username."'
AND password='".md5($password)."'");
$nLogin = $mysql->num_rows($qLogin);
$rLogin = $mysql->fetch_array($qLogin);
if($nLogin == 1)
{
if(getUserInfo($rLogin['registered'], $rLogin['expired'], 'remain') <= 0)
{
echo "<font color=red>Access Failed ! </font>
Your remaining login has reach of limit day.";
}
else
{
if(!session_is_registered('username'))
{
session_register('username');
}
echo "Welcome back <strong>".$_SESSION['username']."</strong>
<a href='?logout=1'>(LogOut)</a>";
echo "<br> You have
Remaining Login:
".getUserInfo($rLogin['registered'], $rLogin['expired'], 'remain')." day";
echo "
<p style=margin-left:65px>
And here are your details:<br>
<strong>$rLogin[username]</strong><br>
Password: ********* <br>
Registered: ".date('d-m-Y', $rLogin['registered'])." <br>
Expired: ".date('d-m-Y', $rLogin['expired'])." <br>
Limit Access: ".getUserInfo($rLogin['registered'], $rLogin['expired'], 'limit')." day<br>
Remain: ".getUserInfo($rLogin['registered'], $rLogin['expired'], 'remain')." day<br>
Attempt Used: ".getUserInfo($rLogin['registered'], $rLogin['expired'], 'used')." day<br>
</p>
";
}
}
else
{
echo "Login Failed !
<meta http-equiv=\"refresh\" content=\"3;?cPub=login\" />";
}
}
}
else
{
?>
<form style="margin-left:65px;" action="" method="post" name="loginUser">
Username:<br />
<input type="text" name="username" /><br /><br />
Password:<br />
<input type="password" name="password" /><br /><br />
<br /><br />
<input name="submit" type="submit" value="login" />
</form>
<?
}
}
7. LISTING DATA DALAM TABLE USER
echo "<br />
<br />
";
$i=1;
//reach the result of query
while($result = $mysql->fetch_array($query))
{
echo "
<pre style=padding:0px;margin:0px;>
<strong>$i. $result[username]</strong>
Password: *********
Registered: ".date('d-m-Y', $result['registered'])."
Expired: ".date('d-m-Y', $result['expired'])."
Limit Access: ".getUserInfo($result['registered'], $result['expired'], 'limit')." day
Remain: ".getUserInfo($result['registered'], $result['expired'], 'remain')." day
Attempt Used: ".getUserInfo($result['registered'], $result['expired'], 'used')." day
</pre>
";
$i++;
}
echo "</p>";
so ini complete script na:<?
@session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Membuat Limit Access User Berdasarkan Waktu</title>
<script src="js/datechooser/date-functions.js" type="text/javascript"></script>
<script src="js/datechooser/datechooser.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="js/datechooser/datechooser.css">
<style type="text/css">
<!--
body {
margin-left: 10px;
margin-top: 10px;
margin-right: 10px;
margin-bottom: 10px;
}
body,td,th {
font-family: Courier New, Courier, monospace;
font-size: 14px;
}
-->
</style></head>
<body>
<p style="margin-left:65px;"><a href="<? echo $_SERVER['PHP_SELF']; ?>">Home</a> | <a href="?cPub=clear">Clear Data</a> | <a href="?cPub=insert">Insert Data</a> | <a href="?cPub=login">Login</a></p>
<?
##DEFINE
define("_HOST", "localhost");
define("_USER", "root");
define("_PASS", "123");
define("_DBASE", "tester");
define("_TABLE", "user");
?>
<?
##MY CLASS
class db
{
function connect($host, $user, $pass, $dbase)
{
mysql_connect($host, $user, $pass) or die('Could not connect: ' . mysql_error());
mysql_select_db($dbase) or die('Could not select database');
}
function query($sql)
{
$qry = mysql_query($sql);
return $qry;
}
function num_rows($qry)
{
$num = mysql_num_rows($qry);
return $num;
}
function fetch_array($qry)
{
$row = mysql_fetch_array($qry);
return $row;
}
}
##SIMPLE FUNCTION TO CALCULATE THE LIMIT INFO OF USERS
function getUserInfo($reg, $exp, $select)
{
//echo $reg;
//echo $exp;
$chkToday = mktime(0,0,0,date("m"),date("d"),date("Y"));
$rangeDays = $exp - $reg;
$limit = round($rangeDays/(24*60*60));
$remain = round(($exp - $chkToday)/(24*60*60));
//minus handler for remaining days
if($remain <=0)
{
$remain = 0;
}
$used = round($limit - $remain);
if($select == 'limit')
{
return $limit;
}
elseif($select == 'remain')
{
return $remain;
}
elseif($select == 'used')
{
return $used;
}
}
function quote_smart($value)
{
// Stripslashes
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
// Quote if not integer
if (!is_numeric($value)) {
$value = "'" . mysql_real_escape_string($value) . "'";
}
return $value;
}
?>
<?
##CALLING CLASS
//Construct the database
$mysql = new db;
$mysql->connect(_HOST, _USER, _PASS, _DBASE);
//just fill the blank table
$query = $mysql->query("SELECT * FROM "._TABLE."");
$count = $mysql->num_rows($query);
if($count == 0)
{
echo "<p style=\"margin-left:65px;\">No Data</p>";
}
if($_GET['logout'] == 1)
{
unset($username);
session_destroy();
echo "<p style=margin-left:65px>Session Clear Done ! <meta http-equiv=\"refresh\" content=\"3;$_SERVER[PHP_SELF]\" /></p>";
}
##IMPLEMENTAD OF USER NAVIGATION
//clear data
echo "<p style=\"margin-left:65px;\">";
if($_GET['cPub'] == 'clear')
{
$clear = $mysql->query("TRUNCATE TABLE "._TABLE."");
if($clear)
{
echo "Clear Data Done ! <meta http-equiv=\"refresh\" content=\"3;$_SERVER[PHP_SELF]\" />";
}
}
elseif($_GET['cPub'] == 'insert')
{
if(isset($_POST['submit']))
{
if(empty($_POST['username']) || empty($_POST['password']) || empty($_POST['expired']))
{
echo "Empty Field for username || password || expired date !
<meta http-equiv=\"refresh\" content=\"3;?cPub=insert\" />";
}
else
{
$username = stripslashes(strip_tags(trim($_POST['username'])));
$password = stripslashes(strip_tags(trim($_POST['password'])));
$data = $_POST['expired'];
list($year, $month, $day) = explode("-", $data);
$queryToCheck = $mysql->query("SELECT * FROM "._TABLE."
WHERE username='".$username."'");
$countOfCheck = $mysql->num_rows($queryToCheck);
if($countOfCheck == 0)
{
$mysql->query("INSERT INTO "._TABLE." (username, password, registered, expired)
VALUES('$username', '".md5("$password")."',
'".mktime(0,0,0,date('m'),date('d'),date('Y'))."',
'".mktime(0,0,0,$month,$day,$year)."')");
echo "Insert Data Done !
<meta http-equiv=\"refresh\" content=\"3;$_SERVER[PHP_SELF]\" />";
}
else
{
echo "Username has been taken ! Chose another username.
<meta http-equiv=\"refresh\" content=\"3;?cPub=insert\" />";
}
}
}
else
{
?>
<form style="margin-left:65px;" action="" method="post" name="insertUser">
Username:<br />
<input type="text" name="username" /><br /><br />
Password:<br />
<input type="password" name="password" /><br /><br />
Expired Date:<br />
<input name="expired" id="dob" size="10" maxlength="10" type="text">
<img src="js/datechooser/IconDateTimePicker.jpg" onclick="showChooser(this, 'dob', 'chooserSpan', 1950, 2010, 'Y-m-d', false);">
<div id="chooserSpan" class="dateChooser select-free" style="display: none; visibility: hidden; width: 160px;">
</div>
<br /><br />
<input name="submit" type="submit" value="register" />
</form>
<?
}
}
elseif($_GET['cPub'] == 'login')
{
if(isset($_POST['submit']))
{
if(empty($_POST['username']) || empty($_POST['password']))
{
echo "Empty Field for username and password !
<meta http-equiv=\"refresh\" content=\"3;?cPub=login\" />";
}
else
{
$username = stripslashes(strip_tags(trim($_POST['username'])));
$password = stripslashes(strip_tags(trim($_POST['password'])));
$qLogin = $mysql->query("SELECT * FROM "._TABLE."
WHERE username='".$username."'
AND password='".md5($password)."'");
$nLogin = $mysql->num_rows($qLogin);
$rLogin = $mysql->fetch_array($qLogin);
if($nLogin == 1)
{
if(getUserInfo($rLogin['registered'], $rLogin['expired'], 'remain') <= 0)
{
echo "<font color=red>Access Failed ! </font>
Your remaining login has reach of limit day.";
}
else
{
if(!session_is_registered('username'))
{
session_register('username');
}
echo "Welcome back <strong>".$_SESSION['username']."</strong>
<a href='?logout=1'>(LogOut)</a>";
echo "<br> You have
Remaining Login:
".getUserInfo($rLogin['registered'], $rLogin['expired'], 'remain')." day";
echo "
<p style=margin-left:65px>
And here are your details:<br>
<strong>$rLogin[username]</strong><br>
Password: ********* <br>
Registered: ".date('d-m-Y', $rLogin['registered'])." <br>
Expired: ".date('d-m-Y', $rLogin['expired'])." <br>
Limit Access: ".getUserInfo($rLogin['registered'], $rLogin['expired'], 'limit')." day<br>
Remain: ".getUserInfo($rLogin['registered'], $rLogin['expired'], 'remain')." day<br>
Attempt Used: ".getUserInfo($rLogin['registered'], $rLogin['expired'], 'used')." day<br>
</p>
";
}
}
else
{
echo "Login Failed !
<meta http-equiv=\"refresh\" content=\"3;?cPub=login\" />";
}
}
}
else
{
?>
<form style="margin-left:65px;" action="" method="post" name="loginUser">
Username:<br />
<input type="text" name="username" /><br /><br />
Password:<br />
<input type="password" name="password" /><br /><br />
<br /><br />
<input name="submit" type="submit" value="login" />
</form>
<?
}
}
echo "<br />
<br />
";
$i=1;
//reach the result of query
while($result = $mysql->fetch_array($query))
{
echo "
<pre style=padding:0px;margin:0px;>
<strong>$i. $result[username]</strong>
Password: *********
Registered: ".date('d-m-Y', $result['registered'])."
Expired: ".date('d-m-Y', $result['expired'])."
Limit Access: ".getUserInfo($result['registered'], $result['expired'], 'limit')." day
Remain: ".getUserInfo($result['registered'], $result['expired'], 'remain')." day
Attempt Used: ".getUserInfo($result['registered'], $result['expired'], 'used')." day
</pre>
";
$i++;
}
echo "</p>";
?>
</body>
</html>
so cobain yak !!!!