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:
- Người dùng điền thông tin vào form (username và password)
- Gửi dữ liệu đến server (thường qua phương thức POST)
- Kiểm tra tính hợp lệ của dữ liệu (validate)
- Truy vấn cơ sở dữ liệu để xác minh thông tin
- Nếu thành công: tạo session, chuyển hướng đến trang người dùng
- 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: username và password (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():

