|
PHP กับ MySQL ระบบ Login กำหนด จำนวน Count ครั้งที่ Login ผิด และมีการ Lock Account |
PHP กับ MySQL ระบบ Login กำหนด จำนวน Count ครั้งที่ Login ผิด และมีการ Lock Account สร้างระบบ Login ด้วย PHP กับ MySQL ด้วยฟีเจอร์กำหนดจำนวนครั้งที่ Login ผิด เช่น กำหนด 3 ครั้ง ซึ่ง User จะสามารถ Login ได้ 3 ครั้งเท่านั้น ถ้า Login ผิดเกินจากนี้ Account จะถูก Lock ทันที สำหรับบทความนี้คิดว่าจะมีประโยชน์สำหรับสมาชิกที่ต้องการจะนำไปใช้ โดยหลักการนั้นก็ไม่ได้ยากอะไร เราเพียงออกแบบสร้างฟิวด์ขึ้นมา 2 ตัวคือ เก็บจำนวนล็อกอินผิด และ เก็บสถานะการ Lock Account ซึ่งกระบวนการก็คือ ให้ไป SELECT ข้อมูลตาม User ที่ Login เข้ามา หลังจากได้ User แล้ว เราจะได้ Password และสถานะอื่น ๆ ตามมาอีกด้วย ซึ่งหลังจากนั้นก็ให้ตรวจสอบ Password ใน Database กับตัวที่ Input เข้ามาว่าตรงกันหรือไม่ ถ้าไม่ตรงกันก็ให้ไป Update ฟิวด์ที่เก็บจำนวนครั้งที่ Login ผิด และถ้าเกินกว่าจำนวนที่กำหนดก็ให้ไป Update ฟิวด์ที่เก็บสถานะ Lock ของ Account และในทางตรงกันข้ามถ้า Login ผ่านก็ควรจะไป Clear ค่าเหล่านี้ด้วย
![Login User / Password Login User / Password](https://www.thaicreate.com/upload/stock/20140219084853.jpg?v=1001)
ในตาราง User จะมีฟิวด์ชื่อว่า LoginCount (เก็บจำนวนที่ Login ผิด) และ FlagLock (เก็บสถานะ Account ว่าถูก Lock หรือไม่)
Example 1 ทำระบบ Login และ User / Password ตรวจสอบจำนวน Login ผิด และ Lock Account
โครงสร้าง Table และ Data
CREATE TABLE `member` (
`UserID` int(3) unsigned zerofill NOT NULL auto_increment,
`Username` varchar(20) NOT NULL,
`Password` varchar(20) NOT NULL,
`Name` varchar(100) NOT NULL,
`LoginCount` int(2) NOT NULL default '0',
`FlagLock` enum('Yes','No') NOT NULL default 'No',
PRIMARY KEY (`UserID`),
UNIQUE KEY `Username` (`Username`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
INSERT INTO `member` VALUES (001, 'win', 'win123', 'Weerachai Nukitram', 0, 'No');
INSERT INTO `member` VALUES (002, 'chai', 'chai123', 'Surachai Sirisart', 0, 'No');
ลองมาดู Code ทั้งหมด
login.php (ฟอร์มสำหรับ Login)
<html>
<head>
<title>ThaiCreate.Com Tutorials</title>
</head>
<body>
<form name="form1" method="post" action="check_login.php">
Login<br>
<table border="1" style="width: 300px">
<tbody>
<tr>
<td> Username</td>
<td>
<input name="txtUsername" type="text" id="txtUsername">
</td>
</tr>
<tr>
<td> Password</td>
<td><input name="txtPassword" type="password" id="txtPassword">
</td>
</tr>
</tbody>
</table>
<br>
<input type="submit" name="Submit" value="Login">
</form>
</body>
</html>
check_login.php (ไฟล์ตรวจสอบการ Login)
<?php
$LimitTime = 3;
session_start();
mysql_connect("localhost","root","root");
mysql_select_db("login");
$strSQL = "SELECT * FROM member WHERE Username = '".mysql_real_escape_string($_POST['txtUsername'])."' ";
$objQuery = mysql_query($strSQL);
$objResult = mysql_fetch_array($objQuery);
if(!$objResult)
{
echo "Not Found User!";
exit();
}
else
{
if($objResult["FlagLock"] == "Yes")
{
echo "This user account is lock!";
exit();
}
if($objResult["Password"] != $_POST["txtPassword"])
{
echo "Password Incorrect!";
// Update Login Failed
$strSQL = "UPDATE member SET LoginCount = LoginCount + 1 WHERE Username = '".mysql_real_escape_string($_POST['txtUsername'])."' ";
$objQuery = mysql_query($strSQL);
// If more than limit time auto lock account
if($objResult["LoginCount"] + 1 >= $LimitTime)
{
$strSQL = "UPDATE member SET FlagLock = 'Yes' WHERE Username = '".mysql_real_escape_string($_POST['txtUsername'])."' ";
$objQuery = mysql_query($strSQL);
}
exit();
}
else
{
// Login Success
$_SESSION["UserID"] = $objResult["UserID"];
session_write_close();
// Reset LoginCount
$strSQL = "UPDATE member SET LoginCount = 0 WHERE Username = '".mysql_real_escape_string($_POST['txtUsername'])."' ";
$objQuery = mysql_query($strSQL);
header("location:user_page.php");
}
}
mysql_close();
?>
![](/images/adv.jpg)
user_page.php (ไฟล์สำหรับแสดงข้อมูล Login ที่ Login ผ่านแล้ว)
<?php
session_start();
if($_SESSION['UserID'] == "")
{
echo "Please Login!";
exit();
}
mysql_connect("localhost","root","root");
mysql_select_db("mydatabase");
$strSQL = "SELECT * FROM member WHERE UserID = '".$_SESSION['UserID']."' ";
$objQuery = mysql_query($strSQL);
$objResult = mysql_fetch_array($objQuery);
?>
<html>
<head>
<title>ThaiCreate.Com Tutorials</title>
</head>
<body>
Welcome to Page! <br>
<table border="1" style="width: 300px">
<tbody>
<tr>
<td width="87"> Username</td>
<td width="197"><?php echo $objResult["Username"];?>
</td>
</tr>
<tr>
<td> Name</td>
<td><?php echo $objResult["Name"];?></td>
</tr>
</tbody>
</table>
<a href="logout.php">Logout</a>
</body>
</html>
logout.php (ไฟล์สำหรับ Loout ออกจากระบบ)
<?php
session_start();
session_destroy();
header("location:login.php");
?>
Screenshot
![Login User / Password Login User / Password](https://www.thaicreate.com/upload/stock/20140219085320.jpg?v=1001)
แสดงหน้าจอ Login
![Login User / Password Login User / Password](https://www.thaicreate.com/upload/stock/20140219085324.jpg?v=1001)
เมื่อ Login ผิด
![Login User / Password Login User / Password](https://www.thaicreate.com/upload/stock/20140219085328.jpg?v=1001)
ใน Table จะมีการ Update จำนวนครั้งที่ Login ผิด
![Login User / Password Login User / Password](https://www.thaicreate.com/upload/stock/20140219085332.jpg?v=1001)
เมื่อ Login เกินจำนวนครั้ง Account จะถูก Lock
![Login User / Password Login User / Password](https://www.thaicreate.com/upload/stock/20140219085335.jpg?v=1001)
ใน Table จะเห็นว่ามีสถานะ Update ว่าถูก Lock แล้ว
Example 2 กำหนดเวลา Ban เช่น จะต้องรออีก 10 นาทีถึงจะ Login ได้อีกครั้ง
![Login User / Password Login User / Password](https://www.thaicreate.com/upload/stock/20140219091118.jpg?v=1001)
สร้างฟิวด์เก็บเวลาที่ถูก Ban
CREATE TABLE `member` (
`UserID` int(3) unsigned zerofill NOT NULL auto_increment,
`Username` varchar(20) NOT NULL,
`Password` varchar(20) NOT NULL,
`Name` varchar(100) NOT NULL,
`LoginCount` int(2) NOT NULL default '0',
`FlagLock` enum('Yes','No') NOT NULL default 'No',
`BanExpire` datetime NOT NULL,
PRIMARY KEY (`UserID`),
UNIQUE KEY `Username` (`Username`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
--
-- dump ตาราง `member`
--
INSERT INTO `member` VALUES (001, 'win', 'win123', 'Weerachai Nukitram', 0, 'No', '0000-00-00 00:00:00');
INSERT INTO `member` VALUES (002, 'chai', 'chai123', 'Surachai Sirisart', 0, 'No', '0000-00-00 00:00:00');
จากนั้นเขียน Code เพิ่มเป็นดังนี้
<?php
$LimitTime = 3;
$BanTime = 10; // Minute
session_start();
mysql_connect("localhost","root","root");
mysql_select_db("login");
// Reset Ban
$strSQL = "UPDATE member SET LoginCount = 0 , FlagLock = 'No' WHERE BanExpire <= NOW() AND LoginCount = '".$LimitTime."' ";
$objQuery = mysql_query($strSQL);
// Check Login
$strSQL = "SELECT * FROM member WHERE Username = '".mysql_real_escape_string($_POST['txtUsername'])."' ";
$objQuery = mysql_query($strSQL);
$objResult = mysql_fetch_array($objQuery);
if(!$objResult)
{
echo "Not Found User!";
exit();
}
else
{
if($objResult["FlagLock"] == "Yes")
{
echo "This user account is lock!";
exit();
}
if($objResult["Password"] != $_POST["txtPassword"])
{
echo "Password Incorrect!";
// Update Login Failed
$strSQL = "UPDATE member SET LoginCount = LoginCount + 1 WHERE Username = '".mysql_real_escape_string($_POST['txtUsername'])."' ";
$objQuery = mysql_query($strSQL);
// If more than limit time auto lock account
if($objResult["LoginCount"] + 1 >= $LimitTime)
{
$strSQL = "UPDATE member SET FlagLock = 'Yes' , BanExpire = DATE_ADD(NOW(),INTERVAL $BanTime MINUTE) WHERE Username = '".mysql_real_escape_string($_POST['txtUsername'])."' ";
$objQuery = mysql_query($strSQL);
}
exit();
}
else
{
// Login Success
$_SESSION["UserID"] = $objResult["UserID"];
session_write_close();
// Reset LoginCount
$strSQL = "UPDATE member SET LoginCount = 0 WHERE Username = '".mysql_real_escape_string($_POST['txtUsername'])."' ";
$objQuery = mysql_query($strSQL);
header("location:user_page.php");
}
}
mysql_close();
?>
![Login User / Password Login User / Password](https://www.thaicreate.com/upload/stock/20140219091150.jpg?v=1001)
เมื่อทดสอบ Login ผิดจะมีการกำหนดเวลาที่ถูก Ban ซึ่งในตัวอย่างกำหนดไว้ 10 นาที ซึ่งหลังจากผ่าน 10 นาทีจะถูกปลด Ban อัตโนมัติ
บทความที่เกี่ยวข้อง
Go to : PHP MySQL กับ Login Form ทำระบบ User ล็อกอิน แบบง่าย ๆ ด้วย PHP และ MySQL
Go to : PHP Authentication : การใช้งาน Authentication ตรวจสอบสถานะการ Login
Go to : PHP Session ($_SESSION,$HTTP_SESSION_VARS)
Go to : PHP MySQL : Connect to MySQL Database ภาษา PHP กับฐานข้อมูล MySQL
|
|
|
By : |
TC Admin
|
|
Article : |
บทความเป็นการเขียนโดยสมาชิก หากมีปัญหาเรื่องลิขสิทธิ์ กรุณาแจ้งให้ทาง webmaster ทราบด้วยครับ |
|
Score Rating : |
![](/images/resource/startrue.gif) ![](/images/resource/startrue.gif) ![](/images/resource/startrue.gif) |
|
Create Date : |
2014-02-19 |
|
Download : |
No files |
|
Sponsored Links |
|
|
|
|
|
|