2077 Posts in 484 Topics- by 821 Members - Latest Member: liricklagu

Pages: [1]   Go Down
  Print  
Author Topic: Membuat Limit Access User Berdasarkan Waktu  (Read 1385 times)
webmaster
Administrator
phpBB Guru
*****
Offline Offline

Posts: 924


hairulazami
View Profile WWW
« on: December 09, 2008, 11:46:54 AM »

Membuat Limit Access User Berdasarkan Waktu


Tutorial 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:
Code:
-- 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:
Code:
<?
##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
Code:
<?
##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:

Code:
##CALLING CLASS
//Construct the database
$mysql = new db;
$mysql->connect(_HOST, _USER, _PASS, _DBASE);

4. USER LOGOUT

Code:
//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

Code:
##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

Code:
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">
&nbsp;<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

Code:
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

Code:
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:

Code:
<?
@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">
&nbsp;<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 !!!!
Logged


Pages: [1]   Go Up
  Print  
 
Jump to: