Bài 7: Làm chức năng đăng nhập Admin - Xây dựng Website PHP theo MVC

Đăng bởi: Admin | Lượt xem: 12064 | Chuyên mục: PHP


1) Chuẩn bị giao diện đăng nhập Admin

Tạo file View/client/pages/login_admin.php và chèn đoạn code sau:
<section class="bg-accent section-space-less2">
    <div class="container">
        <div class="modal-header">
            <div class="title-login-form">Đăng nhập Admin</div>
        </div>
        <div class="login-form">
            <form method="post">
                <label>Tên đăng nhập *</label>
                <input name="username_admin" type="text" placeholder="Tên đăng nhập" />
                <label>Mật khẩu *</label>
                <input name="password_admin" type="password" placeholder="Mật khẩu" />
                <button type="submit" name="login_admin" value="Login">Đăng nhập</button>
            </form>
        </div>
    </div>
</section>
Chạy đường dẫn để hiển thị giao diện đăng nhập Admin:
http://localhost/blog/?controller=login

2) Viết chức năng đăng nhập

Tạo file Controller/client/login.php
Kiểm tra nếu tồn tại $_SESSION['useradmin'] chuyển hướng vào trang admin ngược lại hiển thị giao diện đăng nhập Admin
public function __construct()
    {
        /**
        * Nếu tồn tại $_SESSION['useradmin'] chuyển hướng vào trang admin
        * Ngược lại hiển thị giao diện đăng nhập
        * @var array
        */
        if (!empty($_SESSION['useradmin'])) {
            header('Location: View/admin');
        } else {
            $userModel = new UserModel();
            $error = $this->loginAdmin($userModel);

            require('View/client/pages/login_admin.php');
        }
    }
Viết hàm đăng nhập:
public function loginAdmin($userModel)
    {
        $username = $password = $fullName = NULL;
        $error = array();
        $error['username_admin'] = $error['password_admin'] = NULL;

        if (!empty($_POST['login_admin'])) {
            if (empty($_POST['username_admin'])) {
                $error['username_admin'] = '* Cần điền tên đăng nhập';
            } else {
                $username = $_POST['username_admin'];
            }
            if (empty($_POST['password_admin'])) {
                $error['password_admin'] = '* Cần điền mật khẩu';
            } else {
                $password = md5(md5($_POST['password_admin']));
            }

            if ($username && $password) {
                $result = $userModel->login($username, $password);
                $check = $result->num_rows; /*đếm số dòng trong database*/
            /**
            * Nếu số dòng trong database > 0 => lưu session + lấy dữ liệu + chuyển hướng
            * Ngược lại thông báo alert bằng script
            * @var array
            */
                if ($check > 0) {
                    $data = $result->fetch_array(); /*lấy dữ liệu tương ứng với username và password nhập*/
                    $_SESSION['useradmin'] = $data; /*lưu session*/
                /**
                * Nếu level = 1 thì chuyển hướng đến trang quản trị viên
                * Ngược lại thì thông báo đăng nhập lại
                * @var array
                */
                    if ($data['level'] == admin) {
                        header('Location: View/admin');
                    } else {
                        echo "<script>alert('Vui lòng đăng nhập lại')</script>";
                    }
                } else {
                    echo "<script>alert('Sai mật khẩu hoặc tên đăng nhập')</script>";
                }
            }
        }

        return $error;
    }
File Controller/client/login.php hoàn chỉnh:
<?php

class Login
{
    public function __construct()
    {
        /**
        * Nếu tồn tại $_SESSION['useradmin'] chuyển hướng vào trang admin
        * Ngược lại hiển thị giao diện đăng nhập
        * @var array
        */
        if (!empty($_SESSION['useradmin'])) {
            header('Location: View/admin');
        } else {
            $userModel = new UserModel();
            $error = $this->loginAdmin($userModel);

            require('View/client/pages/login_admin.php');
        }
    }

    public function loginAdmin($userModel)
    {
        $username = $password = $fullName = NULL;
        $error = array();
        $error['username_admin'] = $error['password_admin'] = NULL;

        if (!empty($_POST['login_admin'])) {
            if (empty($_POST['username_admin'])) {
                $error['username_admin'] = '* Cần điền tên đăng nhập';
            } else {
                $username = $_POST['username_admin'];
            }
            if (empty($_POST['password_admin'])) {
                $error['password_admin'] = '* Cần điền mật khẩu';
            } else {
                $password = md5(md5($_POST['password_admin']));
            }

            if ($username && $password) {
                $result = $userModel->login($username, $password);
                $check = $result->num_rows; /*đếm số dòng trong database*/
            /**
            * Nếu số dòng trong database > 0 => lưu session + lấy dữ liệu + chuyển hướng
            * Ngược lại thông báo alert bằng script
            * @var array
            */
                if ($check > 0) {
                    $data = $result->fetch_array(); /*lấy dữ liệu tương ứng với username và password nhập*/
                    $_SESSION['useradmin'] = $data; /*lưu session*/
                /**
                * Nếu level = 1 thì chuyển hướng đến trang quản trị viên
                * Ngược lại thì thông báo đăng nhập lại
                * @var array
                */
                    if ($data['level'] == admin) {
                        header('Location: View/admin');
                    } else {
                        echo "<script>alert('Vui lòng đăng nhập lại')</script>";
                    }
                } else {
                    echo "<script>alert('Sai mật khẩu hoặc tên đăng nhập')</script>";
                }
            }
        }

        return $error;
    }
}
Trong file View/admin/index.php ta chỉnh lại như sau:
<?php
	session_start(); /*đăng ký phiên làm việc*/
        ob_start();
	require '../../Config/config.php';
	require '../../Model/Database.php';
	$db = new Database();

	/**
     * Nếu tồn tại session và giá trị level = 1 thì có quyền truy cập trang quản trị viên
     * Ngược lại thì chuyển hướng về trang chủ
     * @var array
     */

	if (!empty($_SESSION['useradmin']) && $_SESSION['useradmin']['level'] == admin) {
		require('layouts/header.php');

		if (isset($_GET['controller'])) {
			require '../../Route/admin/web.php'; /*xử lý các request trong Route/web.php*/
		} else {
			require('pages/home.php');
		}

		require('layouts/footer.php');
	} else {
		header('Location: ../../');
	}

	$db->closeDatabase();
Mỗi dòng code mình đã ghi chú rất kỹ trong đó, các bạn nhớ đọc kỹ nhé. Nếu có gì không hiểu hãy comment bên dưới để được giải đáp.
Chúc các bạn thành công!.
Bài tiếp theo: Làm chức năng đăng xuất >>
vncoder logo

Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!