Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Trang Chủ Hướng Dẫn Đồ Án Tạo form đăng nhập có validate trong PHP thuần
Hướng Dẫn Đồ ÁnLập Trình Web

Tạo form đăng nhập có validate trong PHP thuần

Chia sẻ
Chia sẻ

Trong bất kỳ hệ thống website nào, tính năng đăng nhập người dùng luôn là một trong những thành phần cốt lõi. Việc xây dựng một form đăng nhập không chỉ đơn thuần là tạo giao diện HTML, mà còn bao gồm cả quá trình xử lý dữ liệu nhập vào, xác thực thông tin, kiểm tra dữ liệu từ server và bảo vệ khỏi các lỗ hổng như SQL Injection.

Trong bài viết này, bạn sẽ được hướng dẫn chi tiết cách tạo form đăng nhập có đầy đủ phần validate dữ liệu phía client và server, sử dụng PHP thuần (không dùng framework). Bài viết hướng tới người mới học lập trình web PHP và cả những ai muốn củng cố kỹ năng xử lý form một cách an toàn, hiệu quả.

Tổng quan quá trình đăng nhập trong PHP

Quy trình xử lý đăng nhập từ A đến Z

Một hệ thống đăng nhập cơ bản sẽ có các bước sau:

  1. Người dùng điền thông tin vào form (username và password)
  2. Gửi dữ liệu đến server (thường qua phương thức POST)
  3. Kiểm tra tính hợp lệ của dữ liệu (validate)
  4. Truy vấn cơ sở dữ liệu để xác minh thông tin
  5. Nếu thành công: tạo session, chuyển hướng đến trang người dùng
  6. Nếu thất bại: thông báo lỗi và hiển thị lại form

Các điểm cần lưu ý về bảo mật

  • Không lưu mật khẩu dạng plain text: Luôn mã hóa mật khẩu bằng password_hash()

  • Sử dụng prepared statement với PDO: Tránh SQL injection

  • Không echo lỗi trực tiếp từ cơ sở dữ liệu ra trình duyệt

  • Sử dụng session để lưu trạng thái đăng nhập an toàn

Tạo form HTML đăng nhập

Giao diện HTML đơn giản và thân thiện

Trước tiên, bạn cần tạo một file HTML cơ bản với form gồm 2 input: username và password. Ngoài ra, cần có thêm nút submit và nơi hiển thị lỗi nếu có.

Cấu trúc form HTML

<!-- login.php -->
<?php session_start(); ?>
<!DOCTYPE html>
<html lang="vi">
<head>
    <meta charset="UTF-8">
    <title>Đăng nhập</title>
</head>
<body>
    <h2>Form đăng nhập</h2>

    <?php
    if (isset($_SESSION['error'])) {
        echo "<p style='color:red'>" . $_SESSION['error'] . "</p>";
        unset($_SESSION['error']);
    }
    ?>

    <form action="process_login.php" method="POST">
        <label>Tên đăng nhập:</label><br>
        <input type="text" name="username"><br><br>

        <label>Mật khẩu:</label><br>
        <input type="password" name="password"><br><br>

        <button type="submit">Đăng nhập</button>
    </form>
</body>
</html>

Validate dữ liệu đầu vào ở phía server

Tại sao cần validate dữ liệu?

Người dùng có thể cố tình nhập các dữ liệu sai lệch hoặc thậm chí chèn mã độc vào form. Do đó, validate phía server giúp đảm bảo chỉ những dữ liệu hợp lệ mới được xử lý tiếp. Đây là bước cực kỳ quan trọng để bảo vệ website.

Cách kiểm tra dữ liệu và hiển thị lỗi

Bạn sẽ tạo file process_login.php để kiểm tra dữ liệu và xử lý logic đăng nhập. Nếu thông tin thiếu hoặc không hợp lệ, ta sẽ lưu lỗi vào $_SESSION['error'] và chuyển người dùng quay lại form.

<?php
session_start();

// Validate cơ bản
if (empty($_POST['username']) || empty($_POST['password'])) {
    $_SESSION['error'] = 'Vui lòng nhập đầy đủ thông tin!';
    header('Location: login.php');
    exit();
}

// Gán biến từ form
$username = trim($_POST['username']);
$password = trim($_POST['password']);

// Kiểm tra độ dài
if (strlen($username) < 4 || strlen($password) < 6) {
    $_SESSION['error'] = 'Tên đăng nhập phải từ 4 ký tự, mật khẩu từ 6 ký tự trở lên!';
    header('Location: login.php');
    exit();
}

Kết nối cơ sở dữ liệu và kiểm tra thông tin

Cấu trúc bảng người dùng trong MySQL

Để kiểm tra đăng nhập, bạn cần có bảng người dùng trong cơ sở dữ liệu với ít nhất 2 trường: usernamepassword (mã hóa). Sau đây là câu lệnh tạo bảng:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL
);

Bạn nên tạo một tài khoản test với mật khẩu đã mã hóa bằng password_hash():

$hash = password_hash("matkhau123", PASSWORD_DEFAULT);

Kết nối cơ sở dữ liệu và truy vấn

require_once 'db.php'; // chứa hàm getPDO()

try {
    $pdo = getPDO();

    $stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
    $stmt->execute([$username]);
    $user = $stmt->fetch();

    if ($user && password_verify($password, $user['password'])) {
        $_SESSION['user'] = $user['username'];
        header('Location: dashboard.php');
    } else {
        $_SESSION['error'] = 'Sai tên đăng nhập hoặc mật khẩu!';
        header('Location: login.php');
    }
} catch (PDOException $e) {
    error_log("Lỗi DB: " . $e->getMessage());
    $_SESSION['error'] = 'Lỗi hệ thống, vui lòng thử lại sau.';
    header('Location: login.php');
}

Hiển thị nội dung sau khi đăng nhập thành công

Sử dụng session để lưu trạng thái đăng nhập

Session là phương pháp phổ biến để lưu thông tin đăng nhập. Sau khi người dùng xác thực thành công, bạn có thể lưu thông tin vào session để dùng ở các trang khác.

Trang chào mừng sau khi đăng nhập

<!-- dashboard.php -->
<?php
session_start();
if (!isset($_SESSION['user'])) {
    header('Location: login.php');
    exit();
}
?>

<h2>Chào mừng, <?php echo $_SESSION['user']; ?>!</h2>
<a href="logout.php">Đăng xuất</a>

Tạo chức năng đăng xuất

Vì sao cần logout?

Đăng xuất giúp người dùng thoát khỏi phiên đăng nhập, đảm bảo thông tin không bị rò rỉ nếu họ dùng máy công cộng.

Xử lý đăng xuất bằng PHP

<!-- logout.php -->
<?php
session_start();
session_unset();
session_destroy();
header('Location: login.php');
exit();

Bổ sung validate phía client bằng JavaScript

Trải nghiệm người dùng tốt hơn

Validate phía client giúp giảm số lần gửi dữ liệu không hợp lệ lên server. Điều này làm tăng trải nghiệm người dùng và giảm tải server.

Đoạn mã validate đơn giản

<script>
document.querySelector("form").addEventListener("submit", function(e) {
    let username = document.querySelector("input[name='username']").value.trim();
    let password = document.querySelector("input[name='password']").value.trim();

    if (username.length < 4 || password.length < 6) {
        alert("Tên đăng nhập phải từ 4 ký tự, mật khẩu từ 6 ký tự trở lên!");
        e.preventDefault();
    }
});
</script>

Kết luận

Việc xây dựng form đăng nhập trong PHP thuần không hề phức tạp nếu bạn nắm rõ các nguyên tắc validate và bảo mật cơ bản. Bằng cách tách các thành phần (form HTML, xử lý server, cơ sở dữ liệu, session), bạn sẽ dễ dàng kiểm soát và mở rộng hệ thống trong tương lai.

Đừng quên kiểm tra lỗi người dùng nhập sai, bảo mật mật khẩu bằng hashing, sử dụng PDO để phòng chống SQL Injection và tổ chức mã một cách rõ ràng.

Tham Gia Nhóm – Hỗ Trợ Lập Trình

Hỗ Trợ Đồ Án – ThueDoAn.vn

Liên quan
Hướng Dẫn Đồ Án

Checklist 10 bước kiểm tra cuối cùng trước khi nhấn nút nộp đồ án

Thời điểm chuẩn bị nhấn nút nộp đồ án luôn mang lại...

Hướng Dẫn Đồ Án

Tuyệt chiêu đối phó với những giảng viên hướng dẫn ‘khó tính’ nhất

Giai đoạn làm đồ án tốt nghiệp luôn đi kèm với vô...

Hướng Dẫn Đồ Án

Tại sao việc quản lý Source Code bằng Git lại quan trọng hơn bạn nghĩ?

Trong thế giới lập trình hiện đại, mã nguồn chính là linh...

Hướng Dẫn Đồ Án

Những chức năng ‘thừa’ khiến bạn tốn thời gian mà không được cộng điểm

Làm đồ án tốt nghiệp là một cuộc đua thực thụ với...

Hướng Dẫn Đồ Án

Cách xử lý khi đề tài bị trùng lặp ý tưởng với các khóa trước quá nhiều

Lựa chọn đề tài đồ án luôn là bước khởi đầu đầy...

Hướng Dẫn Đồ Án

Làm sao để giải trình với giảng viên khi code bị nghi ngờ là đi chép?

Trong quá trình thực hiện đồ án, việc tham khảo mã nguồn...

Hướng Dẫn Đồ Án

Cảnh báo: Những nguồn share code ‘rác’ trên mạng cần tuyệt đối tránh

Trong quá trình làm đồ án, việc tìm kiếm sự hỗ trợ...

Hướng Dẫn Đồ Án

Sai lầm khi chọn công nghệ quá khó so với năng lực thực tế của bản thân

Chọn đề tài và công nghệ cho đồ án luôn là bước...

Liên Hệ
Liên hệ để được tư vấn & hỗ trợ đồ án CNTT nhé bạn!