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