Step 1: bắt đầu sử dụng session
- Hiệu chỉnh file
bootstrap.php
<?php
// Load các thư viện (packages) do Composer quản lý vào chương trình
require_once __DIR__.'/vendor/autoload.php';
// Chỉ định thư mục `templates` (nơi Twig sẽ biên dịch cú pháp Twig thành các đoạn code PHP)
$loader = new Twig_Loader_Filesystem(__DIR__.'/templates');
// Khởi tạo Twig
$twig = new Twig_Environment($loader);
// Bắt đầu sử dụng session
session_start();
// Tạo biến global để có thể sử dụng trong tất cả các view được render bởi TWIG
$twig->addGlobal('session', $_SESSION);
Step 2: tạo file xử lý Login
- Tạo file
frontend/auth/login.php
<?php
// Include file cấu hình ban đầu của `Twig`
require_once __DIR__ . '/../../bootstrap.php';
// Truy vấn database
// 1. Include file cấu hình kết nối đến database, khởi tạo kết nối $conn
include_once(__DIR__ . '/../../dbconnect.php');
// Đã đăng nhập rồi -> điều hướng về trang chủ
if(isset($_SESSION['email_logged']) && !empty($_SESSION['email_logged'])) {
echo 'Bạn đã đăng nhập rồi. <a href="/project-nentang/frontend/">Bấm vào đây để quay về trang chủ.</a>';
}
else {
if(isset($_POST['btnLogin'])) {
// Kiểm tra đăng nhập...
$email = $_POST['email'];
$password = $_POST['password'];
// Câu lệnh SELECT
$sqlSelect = <<<EOT
SELECT *
FROM khachhang kh
WHERE kh.kh_email = '$email' AND kh.kh_matkhau = '$password';
EOT;
// Thực thi SELECT
$result = mysqli_query($conn, $sqlSelect);
// Sử dụng hàm `mysqli_num_rows()` để đếm số dòng SELECT được
// Nếu có bất kỳ dòng dữ liệu nào SELECT được <-> Người dùng có tồn tại và đã đúng thông tin USERNAME, PASSWORD
if (mysqli_num_rows($result) > 0) {
echo 'Đăng nhập thành công!';
// redirect đi đâu đó...
// Lưu thông tin Email user đã đăng nhập
$_SESSION['email_logged'] = $email;
} else {
echo 'Đăng nhập thất bại!';
}
} else {
echo $twig->render('frontend/auth/login.html.twig');
}
}
?>
Step 3: tạo file giao diện Template Login
- Tạo file
templates/frontend/auth/login.html.twig
{# Kế thừa layout frontend #}
{% extends "frontend/layouts/layout.html.twig" %}
{# Nội dung trong block title #}
{% block title %}
Đăng nhập
{% endblock %}
{# End Nội dung trong block title #}
{# Nội dung trong block headline #}
{% block headline %}
Đăng nhập
{% endblock %}
{# End Nội dung trong block headline #}
{# Nội dung trong block content #}
{% block content %}
<form name="frmLogin" id="frmLogin" method="post" action="/frontend/auth/login.php">
<div class="container mt-4">
{% if errors %}
<div id="errors-container" class="alert alert-danger face" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
<ul>
{% for fields in errors %}
{% for field in fields %}
<li>{{ field.msg | raw }}</li>
{% endfor %}
{% endfor %}
</ul>
</div>
{% endif %}
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card-group">
<div class="card p-4">
<div class="card-body">
<h1>Đăng nhập</h1>
<p class="text-muted">Nhập thông tin Tài khoản</p>
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text">
<i class="icon-user"></i>
</span>
</div>
<input class="form-control" type="email" name="email" placeholder="Tên đăng nhập">
</div>
<div class="input-group mb-4">
<div class="input-group-prepend">
<span class="input-group-text">
<i class="icon-lock"></i>
</span>
</div>
<input class="form-control" type="password" name="password" placeholder="Mật khẩu">
</div>
<div class="row">
<div class="col-6">
<button class="btn btn-primary px-4" name="btnLogin">Đăng nhập</button>
</div>
<div class="col-6 text-right">
<a class="btn btn-link px-0" href="/frontend/auth/forgot-password.php">Quên mật khẩu?</a>
</div>
</div>
</div>
</div>
<div class="card text-white bg-primary py-5 d-md-down-none" style="width:44%">
<div class="card-body text-center">
<div>
<h2>Đăng ký</h2>
<p>Đăng ký để làm thành viên của Trang web bán hàng. Bạn sẽ được một số quyền lợi nhất
định khi làm thành viên của Chúng tôi.</p>
<a class="btn btn-primary active mt-3" href="/frontend/pages/register.php">Đăng
ký ngay!</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
{% endblock %}
{# End Nội dung trong block content #}
|