[Module User] - Tạo trang đăng nhập
Trong bài này chúng ta sẽ tiến hành xây dựng chức năng đăng nhập sử dụng thư viện PHP và database MySQL mà các bài trước chúng ta đã tạo.
Nội dung bài này sẽ tương đối dài vì chúng ta phải xây dựng các thư viện, xây dựng model xử lý database và xây dựng luôn form HTML dể login.
Trước tiên chúng ta tạo một trang dashboard đã nhé.
1. Tạo trang dashboard
Trang dashboard là trang mặc định khi đăng nhập thành công thì sẽ hiển thị trang này.
Bài viết này được đăng tại [free tuts .net]
Bạn tạo một file tên dashboard.php
nằm trong thư mục common
.
<?php if (!defined('IN_SITE')) die ('The request not found'); ?> <?php include_once('widgets/header.php'); ?> <h1>Chào mừng bạn đến với trang quản trị admin [Author: freetuts.net]!</h1> <?php include_once('widgets/footer.php'); ?>
Kể từ bây giờ khi đăng nhập thành công hoặc khi người dùng đã đăng nhập nhưng vẫn cố tình vào trang login thì sẽ bị chuyển hướng sang tran dashboard.
URL của trang này sẽ là http://localhost/php_example/admin/?m=common&a=dashboard
.
2. Viết thư viện bổ trợ
Bạn vào file libs/helper.php
và viết các hàm sau:
# BÀI THỨ 07 // Hàm tạo URL function base_url($uri = ''){ return 'http://localhost/php_example/'.$uri; } // Hàm redirect function redirect($url){ header("Location:{$url}"); exit(); } // Hàm lấy value từ $_POST function input_post($key){ return isset($_POST[$key]) ? trim($_POST[$key]) : false; } // Hàm lấy value từ $_GET function input_get($key){ return isset($_GET[$key]) ? trim($_GET[$key]) : false; } // Hàm kiểm tra submit function is_submit($key){ return (isset($_POST['request_name']) && $_POST['request_name'] == $key); } // Hàm show error function show_error($error, $key){ echo '<span style="color: red">'.(empty($error[$key]) ? "" : $error[$key]). '</span>'; }
Trong các hàm đó thì bạn cần chú ý hàm is_submit()
, đây là hàm kiểm tra khi người dùng submit form. Vì key mặc định nó sử dụng là request_name
nên kể từ bài này nếu bạn xây dựng form thì tạo một input hidden và gán tên của form cho nó.
Ví dụ:
<input type="hidden" name="request_name" value="login"/>
3. Viết model lấy chi tiết người dùng
Bạn mở file admin/database/user.php
lên và bổ sung hàm sau:
<?php if (!defined('IN_SITE')) die ('The request not found'); function db_user_get_by_username($username){ $username = addslashes($username); $sql = "SELECT * FROM tb_user where username = '{$username}'"; return db_get_row($sql); }
Hàm này sẽ lấy thông tin người dùng theo tên đăng nhập.
4. Tạo trang đăng nhập
Trước khi code chức năng đăng nhập thì ban kiểm tra file libs/session.php
ở phía trên cùng của file đã có đoạn code session_start();
hay chưa, nếu chưa có thì bổ sung đoạn code đó ở đầu file nhé. Lý do là trong bài này chúng ta có sử dụng Session nên bắt buộc start trước khi dùng.
Bạn vào trang admin/modules/common/login.php
và dán đoạn code sau vào:
<?php $error = array(); // BƯỚC 1: KIỂM TRA NẾU LÀ ADMIN THÌ REDIRECT if (is_admin()){ redirect(base_url('admin/?m=common&a=dashboard')); } // BƯỚC 2: NẾU NGƯỜI DÙNG SUBMIT FORM if (is_submit('login')) { // lấy tên đăng nhập và mật khẩu $username = input_post('username'); $password = input_post('password'); // Kiểm tra tên đăng nhập if (empty($username)){ $error['username'] = 'Bạn chưa nhập tên đăng nhập'; } // Kiểm tra mật khẩu if (empty($password)){ $error['password'] = 'Bạn chưa nhập mật khẩu'; } // Nếu không có lỗi if (!$error) { // include file xử lý database user include_once('database/user.php'); // lấy thông tin user theo username $user = db_user_get_by_username($username); // Nếu không có kết quả if (empty($user)){ $error['username'] = 'Tên đăng nhập không đúng'; } // nếu có kết quả nhưng sai mật khẩu else if ($user['password'] != md5($password)){ $error['password'] = 'Mật khẩu bạn nhập không đúng'; } // nếu mọi thứ ok thì tức là đăng nhập thành công // nên thực hiện redirect sang trang chủ if (!$error){ set_logged($user['username'], $user['level']); redirect(base_url('admin/?m=common&a=dashboard')); } } } ?> <?php include_once('widgets/header.php'); ?> <h1>Trang đăng nhập!</h1> <form method="post" action="<?php echo base_url('admin/?m=common&a=login'); ?>"> <table> <tr> <td>Username</td> <td> <input type="text" name="username" value=""/> <?php show_error($error, 'username'); ?> </td> </tr> <tr> <td>Password</td> <td> <input type="password" name="password" value=""/> <?php show_error($error, 'password'); ?> </td> </tr> <tr> <td> <input type="hidden" name="request_name" value="login"/> </td> <td> <input type="submit" name="login-btn" value="Đăng nhập"/> </td> </tr> </table> </form> <?php include_once('widgets/footer.php'); ?>
Phần comment mình đã giải thích kỹ rồi nên mình không giải thích gì thêm.
5. Lời kết
Như vậy là ta đã xây dựng xong chức năng đăng nhập sử dụng PHP và MySQL. Kể từ bài này độ khó sẽ tăng dần nên bạn cần chú ý cao độ, đặc biệt là nên xem video để hiểu rõ hơn. Bài tiếp theo chúng ta sẽ bổ sung một số thành phần quan trọng cho project.