06/04/2021, 14:46

[Module User] - Tạo trang đăng nhậ - PHP MVC căn bản

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. ...

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ạ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: Zaidap.com.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.

Tạ Quốc Bảo

23 chủ đề

7270 bài viết

0