PHẦN 7: TRANG ĐĂNG NHẬP, ĐĂNG XUẤT
Từ phần này, tôi sẽ hướng dẫn các bạn thực hiện các trang trong phần quản trị (Admin).
Nội dung kiến thức phần này gồm:
- Session.
- Câu lệnh điều kiện (Cấu trúc điều khiển).
- Toán tử.
Trong thư mục admin, các bạn tạo mới một thư mục tên là user để chứa các tập tin xử lý liên quan tới người dùng (Đăng nhập, đăng xuất, danh sách, thêm mới, chỉnh sửa).
Trong thư mục admin/user, tạo mới tập tin login.php để viết mã lệnh xử lý đăng nhập.
Nội dung tập tin
admin/user/login.php như sau:
PHP:
<?php
//Khởi động session
session_start();
//Kiểm tra nếu đã đăng nhập thì quay về trang chủ quản trị
if (isset($_SESSION['user'])) {
header('location:../home/home.php');
}
//Require các tập tin cần thiết
require '../../configs/config.php';
require '../../libraries/connect.php';
require '../../models/user.php';
//Kiểm tra dữ liệu POST lên
if (isset($_POST['username']) && !empty($_POST['username']) && isset($_POST['password']) && !empty($_POST['password'])) {
//Gán tài khoản và mật khẩu nhận được từ form vào 2 biến tương ứng
$username = $_POST['username'];
$password = $_POST['password'];
//Lấy thông tin người dùng từ DB
$user = get_user_by_username($username, $connect);
//Kiểm tra sự tồn tại của người dùng và mật khẩu có trùng khớp
if ($user && $user['password'] === md5($password)) {
//Tạo session lưu thông tin người dùng đăng nhập thành công
$_SESSION['user'] = $user;
//Chuyển hướng về trang chủ quản trị
header('location:../home/home.php');
} else {
//Bật cờ lỗi
$error = true;
}
}
//Require tập tin giao diện (View)
require '../../views/admin/user/login.tpl.php';
?>
Lưu ý:
- Các bạn mở tập tin libraries/connect.php và xóa dòng lệnh "require 'configs/config.php';". Tập tin configs/config.php sẽ được require ở các tập tin xử lý chứ không require trong tập tin libraries/connect.php nữa. Phần trước tôi thực hiện như vậy là để các bạn dễ hình dung vấn đề.
- Trang chủ quản trị tôi sẽ không hướng dẫn các bạn thực hiện mà sẽ để mở cho các bạn tự phát triển, hoàn thiện website.
Tiếp theo, trong thư mục models các bạn tạo một tập tin tên là user.php để viết các hàm tương tác với DB (Tôi gọi là model và tôi sẽ giải thích ở các phần sau).
Nội dung tập tin
models/user.php như sau:
PHP:
<?php
function get_user_by_username($username, $connect)
{
//SQL
$sql = "SELECT * FROM tbl_user WHERE username = '$username' AND status = 1";
//Query
$query = mysqli_query($connect, $sql);
//Return
return mysqli_fetch_assoc($query);
}
?>
Tập tin
admin/user/login.php ở trên chỉ mới là tập tin xử lý, trang đăng nhập còn cần phải có giao diện (Tôi gọi là view). Về giao diện HTML tôi chỉ trình bày đơn giản và cũng không giải thích về mã lệnh HTML.
Trong thư mục views/admin, các bạn tạo mới một thư mục tên là user để chứa các tập tin trình bày giao diện HTML.
Trong thư mục views/admin/user, tạo mới tập tin login.tpl.php để trình bày giao diện trang đăng nhập (Tên tập tin này tôi thêm ".tpl" để dễ phân biệt với tập tin xử lý login.php).
Nội dung tập tin
views/admin/user/login.tpl.php như sau:
PHP:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Quản trị - Đăng nhập</title>
</head>
<body>
<form name="login" method="post" action="">
<?php if (isset($error) && $error == true): ?>
<p style="color: red;">Sai Tài khoản hoặc Mật khẩu!</p>
<?php endif; ?>
<p>
<label>Tài khoản:</label>
<input type="text" name="username" value="">
</p>
<p>
<label>Mật khẩu:</label>
<input type="password" name="password" value="">
</p>
<p>
<input type="submit" value="Đăng nhập">
</p>
</form>
</body>
</html>
Bây giờ các bạn vào phpMyAdmin để thêm mới một dòng dữ liệu vào bảng tbl_user với các thông tin như tài khoản, mật khẩu (Mã hóa MD5), trạng thái (Nhập giá trị là 1)... rồi bắt đầu truy cập trang đăng nhập theo địa chỉ
http://localhost/admin/user/login.php để kiểm tra.
Đối với trang đăng xuất, trong thư mục admin/user các bạn tạo một tập tin tên là logout.php để xử lý đăng xuất.
Nội dung tập tin
admin/user/logout.php như sau:
PHP:
<?php
//Khởi động session
session_start();
//Hủy toàn bộ session
session_destroy();
//Quay về trang đăng nhập
header('location:login.php');
?>
Trang đăng xuất không có giao diện hay truy cập DB nên mã lệnh chỉ đơn giản như vậy.
1. Session:
Session dùng để lưu thông tin mà người lập trình muốn lưu giữ (Hoặc truyền qua trang khác) để có thể sử dụng ở mọi tập tin PHP của website. Nếu các bạn chỉ lưu thông tin và sử dụng duy nhất ở một tập tin PHP nào đó thì tôi khuyên các bạn nên sử dụng biến thay vì sử dụng session.
Tập tin
admin/user/login.php, tôi có khai báo hàm
session_start với mục đích khởi động session. Các bạn lưu ý là cần phải khởi động session trước khi sử dụng.
Để tạo ra một session, các bạn sử dụng biến $_SESSION do PHP cung cấp. $_SESSION là một biến kiểu mãng nên các bạn sẽ sử dụng như một mãng (Sẽ trình bày ở các phần sau). Các bạn có thể tạo ra một session theo mẫu sau:
Mã:
$_SESSION['Tên_session'] = 'Giá_trị_của_session';
Ví dụ:
PHP:
$_SESSION['a'] = 1;
$_SESSION['b'] = 'Hello';
Để sử dụng session đã khởi tạo, các bạn sử dụng theo mẫu sau:
Mã:
$_SESSION['Tên_session'];
Ví dụ:
Các bạn có thể tìm hiểu thêm về session tại địa chỉ
http://php.net/manual/en/book.session.php.
2. Câu lệnh điều kiện (Cấu trúc điều khiển):
Câu lệnh IF...ELSE:
Mã:
if (Điều_kiện) {
//Khối lệnh thỏa điều kiện
}
Hoặc
Mã:
if (Điều_kiện) {
//Khối lệnh thỏa điều kiện
} else {
//Khối lệnh không thỏa điều kiện
}
Hoặc
Mã:
if (Điều_kiện_1) {
//Khối lệnh thỏa điều kiện 1
} elseif (Điều_kiện_2) {
//Khối lệnh không thỏa điều kiện 1 nhưng thỏa điều kiện 2
} else {
//Khối lệnh không thỏa điều kiện 1 và 2
}
Các bạn có thể tham khảo các ví dụ sau:
Ví dụ 1:
PHP:
if (1 == 1) {
echo '1 = 1';
}
Ví dụ 2:
PHP:
if (1 > 2) {
echo '1 > 2';
} else {
echo '1 < 2';
}
Ở ví dụ 1, câu lệnh "echo '1 = 1';" sẽ được thực hiện và in ra màn hình dòng "1 = 1". Ví dụ 2, câu lệnh "echo '1 < 2';" sẽ được thực hiện và in ra màn hình dòng "1 < 2".
Trong PHP, để in ra một nội dung nào đó các bạn sử dụng câu lệnh "echo" như trên.
Các bạn có thể tìm hiểu thêm về câu lệnh điều kiện IF...ELSE tại địa chỉ
http://php.net/manual/en/control-structures.if.php.
Câu lệnh SWITCH...CASE:
Mã:
switch (Giá_trị_đem_so_sánh) {
case Giá_trị_so_sánh_1:
//Khối lệnh thỏa giá trị so sánh 1
break;
case Giá_trị_so_sánh_2:
//Khối lệnh thỏa giá trị so sánh 2
break;
default:
//Khối lệnh không thỏa giá trị so sánh nào ở trên
}
Về SWITCH...CASE tôi không giải thích nhiều, các bạn có thể tìm hiểu thêm tại địa chỉ
http://php.net/manual/en/control-structures.switch.php.
3. Toán tử:
Ngoài toán tử gán "=" mà phần trước tôi đã giới thiệu thì phần này tôi sẽ trình bày cho các bạn một số toán tử khác (Toán tử so sánh, toán tử toán học, toán tử "and", "or").
Toán tử so sánh gồm:
- Bằng (Về giá trị): ==
- Bằng (Về mọi thứ): ===
- Khác (Không bằng về giá trị): !=
- Khác (Không bằng về mọi thứ): !==
- Lớn hơn: >
- Lớn hơn hoặc bằng: >=
- Nhỏ hơn: <
- Nhỏ hơn hoặc bằng: <=
- Phủ định: !
Toán tử toán học gồm:
- Cộng: +
- Trừ: -
- Nhân: *
- Chia: /
- Phần dư: %
Ngoài ra, có hai toán tử quan trọng là:
- Toán tử và (and): &&
- Toán tử hoặc (or): ||
Các bạn có thể tìm hiểu thêm về toán tử tại địa chỉ
http://php.net/manual/en/language.operators.php.