PHẦN 4: TRANG DANH SÁCH NGƯỜI DÙNG
Từ phần này tôi sẽ trình bày cho các bạn các kiến thức PHP nâng cao mà không liên quan tới dự án website tôi đang hướng dẫn các bạn thực hiện.
Nội dung kiến thức phần này gồm:
- Biểu thức chính quy (Regular expressions).
Trong thư mục admin/user, tạo mới tập tin list.php để viết mã lệnh trang danh sách người dùng.
Nội dung tập tin
admin/user/list.php như sau:
PHP:
<?php
//Khởi động session
session_start();
//Kiểm tra nếu chưa đăng nhập thì quay về trang đăng nhập
if (!isset($_SESSION['user'])) {
header('location:login.php');
}
//Require các tập tin cần thiết
require '../../configs/Config.php';
require '../../models/User.php';
//Khởi tạo đối tượng người dùng (User)
$userModel = new User();
//Lấy danh sách người dùng
$userList = $userModel->getList();
//Tiêu đề trang
$title = 'Người dùng - Danh sách';
//Giao diện (View)
$view = 'user/list.tpl.php';
//Require khung giao diện (Layout)
require '../../views/admin/layout.tpl.php';
?>
Mở tập tin
models/User.php và thêm vào lớp User khối lệnh mới dưới đây:
PHP:
public function getList()
{
//SQL
$sql = "SELECT * FROM tbl_user ORDER BY user_id DESC";
//Query
$this->db->query($sql);
//Tạo mãng lưu trữ
$listUser = array();
//Fetch
while ($row = $this->db->fetch()) {
//Khởi tạo đối tượng UserObj
$userObj = new UserObj();
//Gán thông tin
$userObj->setUserId($row['user_id']);
$userObj->setUsername($row['username']);
$userObj->setPassword($row['password']);
$userObj->setFullname($row['fullname']);
$userObj->setEmail($row['email']);
$userObj->setStatus($row['status']);
$userObj->setCreated($row['created']);
$userObj->setModified($row['modified']);
//Gán vào mãng lưu trữ
$listUser[] = $userObj;
}
//Return
return $listUser;
}
Về phần giao diện (View) của website, tôi mở rộng thêm phần khung giao diện (Layout) của website. Khung giao diện là phần giao diện HTML chung của toàn bộ các trang (Trừ trang đăng nhập). Mục đích của việc tạo ra khung giao diện là để giúp cho việc lập trình, bảo trì đơn giản, khoa học hơn.
Trong thư mục views/admin, tạo mới tập tin layout.tpl.php để trình bày khung giao diện của website.
Nội dung tập tin
views/admin/layout.tpl.php như sau:
PHP:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Quản trị - <?php echo $title; ?></title>
</head>
<body>
<?php require Config::BASE_PATH . 'views/admin/' . $view; ?>
</body>
</html>
Trong thư mục views/admin/user, tạo mới tập tin list.tpl.php để trình bày giao diện trang danh sách người dùng.
Nội dung tập tin
views/admin/user/list.tpl.php như sau:
PHP:
<table width="100%" cellpadding="10">
<tr>
<th>ID</th>
<th>Tài khoản</th>
<th>Họ tên</th>
<th>Trạng thái</th>
<th>Ngày tạo</th>
<th>Ngày chỉnh sửa</th>
<th>Tác vụ</th>
</tr>
<?php foreach ($userList as $user): ?>
<tr>
<td>
<?php echo $user->getUserId(); ?>
</td>
<td>
<a href="<?php echo Config::SITE_URL . 'admin/user/edit.php?user_id=' . $user->getUserId(); ?>"><?php echo $user->getUsername(); ?></a>
</td>
<td>
<?php echo $user->getFullname(); ?>
</td>
<td>
<?php echo ($user->getStatus() == 1) ? 'Kích hoạt' : 'Không kích hoạt'; ?>
</td>
<td>
<?php echo date('d/m/Y H:i:s', strtotime($user->getCreated())); ?>
</td>
<td>
<?php echo date('d/m/Y H:i:s', strtotime($user->getModified())); ?>
</td>
<td>
<a href="<?php echo Config::SITE_URL . 'admin/user/delete.php?user_id=' . $user->getUserId(); ?>">Xóa</a>
</td>
</tr>
<?php endforeach; ?>
</table>
Các bạn truy cập trang danh sách người dùng theo địa chỉ
http://localhost/admin/user/list.php để kiểm tra.
Biểu thức chính quy (Regular expressions):
Biểu thức chính quy là một chuỗi hoặc một mẫu các ký tự miêu tả một bộ các chuỗi khác.
Biểu thức chính quy thường được sử dụng trong trường hợp tìm kiếm một chuỗi bên trong một chuỗi khác, thay thế một chuỗi bằng chuỗi khác và có thể tách một chuỗi thành nhiều chuỗi.
Nếu bạn sử dụng tốt biểu thức chính quy, chúng sẽ đơn giản hơn nhiều trong lập trình và quá trình xử lý văn bản, có những vấn đề sẽ không thể giải quyết được nếu không sử dụng biểu thức chính quy.
Về biểu thức chính quy, các bạn có thể tìm hiểu thêm về khái niệm, nguồn gốc của nó. Và tôi khuyên các bạn nên sử dụng biểu thức chính quy để việc lập trình trở nên đơn giản, tối ưu và chính xác hơn.
Tôi giới thiệu với các bạn một số cú pháp về biểu thức chính quy sau đây hi vọng các bạn có đủ kiến thức để tiếp tục tìm hiểu:
- Dấu ngoặc vuông ([]): Dấu ngoặc vuông có một ý nghĩa đặc biệt khi sử dụng trong bối cảnh của biểu thức chính quy. Dấu ngoặc vuông thường được dùng khi các bạn muốn tìm kiếm một loạt các ký tự theo mẫu đã khai báo bên trong nó.
Ví dụ:
[0-9]: Phù hợp với bất kỳ các chữ số từ 0 đến 9.
[a-z]: Phù hợp với bất kỳ các ký tự chữ in thường từ a đến z.
[A-Z]: Phù hợp với bất kỳ các ký tự chữ in hoa từ A đến Z.
[0-9a-zA-Z]: Phù hợp với bất kỳ các chữ số từ 0 đến 9, ký tự in thường và in hoa từ a đến z.
- Các ký hiệu định lượng: Các bạn cần quan tâm tới các ký hiệu +, *, ?, {} và $. Các ký hiệu này biểu thị số lượng hoặc vị trí hoặc một ký tự cụ thể nào đó.
Ví dụ:
p+: Phù hợp với bất kỳ chuỗi mà có chứa ít nhất một ký tự p.
p*: Phù hợp với bất kỳ chuỗi mà có chứa số 0 hoặc chứa nhiều hơn ký tự p.
p?: Có ý nghĩa tương tự như p*.
p{5}: Phù hợp với chuỗi có chứa đúng 5 ký tự p.
p{1,5}: Phù hợp với bất kỳ chuỗi mà có chứa từ 1 đến 5 ký tự p.
p{5,}: Phù hợp với bất kỳ chuỗi mà có chứa ít nhất 5 ký tự p.
p$: Phù hợp với bất kỳ chuỗi mà có ký tự p là cuối cùng.
^p: Phù hợp với bất kỳ chuỗi mà có ký tự p là bắt đầu.
[^a-zA-Z]: Phù hợp với bất kỳ chuỗi mà không chứa các ký tự in thường và in hoa từ a đến z.
^.{2}$: Phù hợp với bất kỳ chuỗi có chứa hai ký tự.
Lưu ý là các mẫu ví dụ trên không bao gồm dấu hai chấm.
Ngoài loại biểu thức chính quy như trên (POSIX), trong PHP còn có một loại biểu thức chính quy khác gọi là PCRE (Hoặc PERL) các bạn có thể tìm hiểu thêm.
Các bạn có thể tìm hiểu thêm về các hàm PHP xử lý biểu thức chính quy tại địa chỉ
http://php.net/manual/en/ref.regex.php và
http://php.net/manual/en/ref.pcre.php.