Vấn đề là chúng ta muốn tạo trang đăng ký account, đăng nhập, có nút ghi nhớ tên đăng nhập , viết bằng PHP và MySQL ( bài này trước đây có viết rồi nhưng thấy có nhiều lỗi quá nay viết lại hoàn chỉnh hơn )
Các bước thực hiện :
1. Tạo cơ sở dữ liệu (database ) : shopping
2. Tạo bảng (table) dữ liệu trong cơ sở dữ liệu trên : user
CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(100) NOT NULL,
`password` varchar(100) NOT NULL,
`email` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ;
3. Tạo file "check_login.php", file này phần php dùng để kiểm tra dữ liệu nhập vào từ form html, nội file như sau :
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
session_start();
$_SESSION['db_is_logged_in'] = false;
$remember=false;
if(isset($_POST['ok'])){
if(($_POST['username'] == NULL)&&($_POST['password'] == NULL)) {
//echo "Ban khong nhap vao Username va Password " ."<br>";
header("location:check_login.php");
} else if($_POST['username'] == NULL){
// echo " Ban chua nhap Usernam " ."<br>";
header("location:check_login.php");
} else if($_POST['password'] == NULL){
//echo " Ban chua nhap Password" ."<br>";
header("location:check_login.php");
} else {
$u=$_POST['username'];
$p=md5( addslashes($_POST['password']));
$connect=mysql_connect("localhost","root","huy") or die("can't connect this database");
mysql_select_db("shopping",$connect);
$sql="select * from user where username='".$u."' and password='".$p."'";
$query=mysql_query($sql);
if(mysql_num_rows($query)==0) {
//echo " Ban nhap username va password khong dung " ."<br>";
header("location:check_login.php");
} else {
$row=mysql_fetch_array($query);
$_SESSION['db_is_logged_in'] = true;
$_SESSION['username'] = $row["username"];
$_SESSION['id'] = $row["ID"];
$_SESSION['password'] = $row["password"];
if (isset($_POST['remember'])) {
$_SESSION['remember']=true;
setcookie("remember", $_SESSION['remember'],time()+60*60*24*100);
$_COOKIE["remember"];
setcookie("NhapTen", $_SESSION['username'], time()+60*60*24*100, "/");
$_COOKIE["NhapTen"];
setcookie("NhapMK", $_SESSION['password'], time()+60*60*24*100, "/");
$_COOKIE["NhapMK"];
}
header("location:management.php"); // kiem tra dung, khong check
exit;
}
}
} else if($_COOKIE["remember"]==true) {
$_SESSION['db_is_logged_in'] = true;
header("location:management.php");
}
?>
Các bước thực hiện :
1. Tạo cơ sở dữ liệu (database ) : shopping
2. Tạo bảng (table) dữ liệu trong cơ sở dữ liệu trên : user
CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(100) NOT NULL,
`password` varchar(100) NOT NULL,
`email` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ;
3. Tạo file "check_login.php", file này phần php dùng để kiểm tra dữ liệu nhập vào từ form html, nội file như sau :
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
session_start();
$_SESSION['db_is_logged_in'] = false;
$remember=false;
if(isset($_POST['ok'])){
if(($_POST['username'] == NULL)&&($_POST['password'] == NULL)) {
//echo "Ban khong nhap vao Username va Password " ."<br>";
header("location:check_login.php");
} else if($_POST['username'] == NULL){
// echo " Ban chua nhap Usernam " ."<br>";
header("location:check_login.php");
} else if($_POST['password'] == NULL){
//echo " Ban chua nhap Password" ."<br>";
header("location:check_login.php");
} else {
$u=$_POST['username'];
$p=md5( addslashes($_POST['password']));
$connect=mysql_connect("localhost","root","huy") or die("can't connect this database");
mysql_select_db("shopping",$connect);
$sql="select * from user where username='".$u."' and password='".$p."'";
$query=mysql_query($sql);
if(mysql_num_rows($query)==0) {
//echo " Ban nhap username va password khong dung " ."<br>";
header("location:check_login.php");
} else {
$row=mysql_fetch_array($query);
$_SESSION['db_is_logged_in'] = true;
$_SESSION['username'] = $row["username"];
$_SESSION['id'] = $row["ID"];
$_SESSION['password'] = $row["password"];
if (isset($_POST['remember'])) {
$_SESSION['remember']=true;
setcookie("remember", $_SESSION['remember'],time()+60*60*24*100);
$_COOKIE["remember"];
setcookie("NhapTen", $_SESSION['username'], time()+60*60*24*100, "/");
$_COOKIE["NhapTen"];
setcookie("NhapMK", $_SESSION['password'], time()+60*60*24*100, "/");
$_COOKIE["NhapMK"];
}
header("location:management.php"); // kiem tra dung, khong check
exit;
}
}
} else if($_COOKIE["remember"]==true) {
$_SESSION['db_is_logged_in'] = true;
header("location:management.php");
}
?>
<html>
<head>
</head>
<body>
<form action='' method='POST'>
<table>
<tr>
<td>Tên đăng nhập:</td> <td> <input type='text' name='username' value='NhapTen' /> </td>
</tr>
<tr>
<td>Mật khẩu:</td> <td> <input type='password' name='password' value ='NhapMK' /> </td>
</tr>
<tr>
<td align="left" colspan="2" >
<input type="checkbox" name="remember" />
Ghi nhớ
</td>
</tr>
<tr>
<td align="center" colspan="2">
<input type='submit' name='ok' value='Đăng nhập'
<input type="reset" name = 'cancel' value = 'Cancel' />
</td>
</tr>
</table>
</form>
</body>
</html>
4. Tạo file "management.php", file này điều phối quá trình logout, vì có 2 quá trình logout khác nhau, nội dung file như sau :
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
session_start();
if(isset($_COOKIE['NhapMK']))
{
echo "Tên đăng nhập :<b>".$_COOKIE["NhapTen"]."</br>";
echo " Bạn đã vào Check Remember " . "</br>" ;
print " <a href='remove.php'>Nhấp vào đây để thoát</a>";
}
if(($_SESSION['db_is_logged_in'] == true)&&((isset($_COOKIE['NhapMK']))==false))
{
echo "Tên đăng nhập :<b>".$_SESSION['username']."</br>";
print "<a href='logout.php'>Nhấp vào đây để thoát</a>";
}
?>
5. Tạo file "logout.php", file này dùng để logout trường hợp không có check vào mục " Ghi nhớ", nội dung file :
<?php
session_start();
if (isset($_SESSION['db_is_logged_in'])) {
unset($_SESSION['db_is_logged_in']);
}
// trở về trang login
header('Location: check_login.php');
?>
6. Tạo file "logout_remember.php", file này dùng logout trường hợp có check "Ghi nhớ ", nội dung file như sau :
<?php
session_start();
setcookie("remember", $_SESSION['remember'],time()-60*60*24*100);
$_COOKIE["remember"];
setcookie("NhapTen", $_SESSION['username'], time()-60*60*24*100, "/");
$_COOKIE["NhapTen"];
setcookie("NhapMK", $_SESSION['password'], time()-60*60*24*100, "/");
$_COOKIE["NhapMK"];
header("location:check_login.php");
exit;
?>
7. Tạo file "register.php", file này dung kiểm tra quá trình nhập liệu tạo account, kiểm tra thỏa diều kiện thì insert vào table "user", nội dung file :
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
// Tải file mysql.php lên
require_once("mysql.php");
if ( isset($_POST['ok']) )
{
// Dùng hàm addslashes() để tránh SQL injection, dùng hàm md5() để mã hóa password
$username = addslashes( $_POST['username'] );
$password = md5( addslashes( $_POST['password'] ) );
$verify_password = md5( addslashes( $_POST['verify_password'] ) );
$email = addslashes( $_POST['email'] );
// Kiểm tra 4 thông tin, nếu có bất kỳ thông tin chưa điền thì sẽ báo lỗi
if ( ! $username || ! $password || ! $verify_password || ! $email )
{
print "Xin vui lòng nhập đầy đủ các thông tin. <a href='javascript:history.go(-1)'>Nhấp vào đây để quay trở lại</a>";
exit;
}
// Kiểm tra mật khẩu, bắt buộc mật khẩu nhập lúc đầu và mật khẩu lúc sau phải trùng nhau
if ( $password != $verify_password )
{
print "Mật khẩu không giống nhau, bạn hãy nhập lại mật khẩu. <a href='javascript:history.go(-1)'>Nhấp vào đây để quay trở lại</a>";
exit;
}
// Tiến hành tạo tài khoản
@mysql_query("INSERT INTO user (username, password, email) VALUES ('{$username}', '{$password}', '{$email}')");
// Thông báo hoàn tất việc tạo tài khoản
print "Tài khoản {$username} đã được tạo. <a href='check_login.php'>Nhấp vào đây để đăng nhập</a>";
}
?>
<html>
<head>
</head>
<body>
<form action="register.php" method="POST">
<table align="left" >
<tr>
<td>Tên truy nhập: </td><td> <input type="text" name="username" value=""></td>
</tr>
<tr>
<td>Mật khẩu: </td><td> <input type="password" name="password" value=""> </td>
</tr>
<tr>
<td>Xác nhận mật khẩu:</td><td> <input type="password" name="verify_password" value=""> </td>
</tr>
<tr>
<td>Địa chỉ E-mail: </td><td><input type="text" name="email" value=""></td>
</tr>
<tr>
<td align="center" colspan="2"> <input type="submit" name="ok" value="Đăng ký tài khoản"> </td>
</tr>
</table>
</form>
</body>
</html>
8. Tạo file "user.php" , file này làm nhiệm vụ, xem có đăng nhập không, có thì được quyền là việc A-Z gì đó , không thì đưa về trang đăng nhập "check_login.php", nội dung file:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
session_start();
if( $_SESSION['db_is_logged_in'] ==false)
header("location:check_login.php");
?>
9. Tạo file "admin.php", file này kiểm tra tên đăng nhập phải là admin không, có thì được làm viêc, không thì đưa về trang "check_login.php", nội dung file:
<?php
session_start();
// đặt một biến cho password admin
// passoword này có trong bảng cơ sở dữ liệu
// password dẫ được mã hóa MD5
// hoặc bạn tạo table chứa username và pass admin, sau đó dung hàm select để lấy ra rồi so sánh
$pass_admin=="chuỗi_ đã_ mã_ hóa _MD5";
// nếu không đăng nhập thì đưa về trang đăng nhập
if( $_SESSION['db_is_logged_in'] ==false)
{
header("location:check_login.php");
}
// Nếu có đăng nhập, không check "ghi nhớ", password không phải pass admin
if( ($_SESSION['db_is_logged_in'] ==true)&&( $_SESSION['password']!=$pass_admin))
{
header("location:check_login.php");
}
// Nếu có đăng nhập, có check "ghi nhớ", password không phải pass admin
// Trường hợp này khố tí là khi đóng trình duyêt, rồi mở lên, giá trị của pass giờ là lấy từ cookie
if( ($_SESSION['db_is_logged_in'] ==true)&&( $_COOKIE["NhapMK"]!=$pass_admin))
{
header("location:check_login.php");
}
?>
10. Video demo:
11. The End
0 nhận xét:
Đăng nhận xét