Hệ thống đăng nhập cho phép người dùng tạo và đăng nhập vào tài khoản của họ để truy cập nội dung trang web. Hệ thống đăng nhập là một tính năng chính cho mọi trang web thành viên. Nếu bạn muốn hạn chế quyền truy cập vào nội dung trang web và chỉ cho phép người dùng đã đăng nhập truy cập nội dung, cần triển khai chức năng đăng nhập người dùng. Hệ thống đăng ký và đăng nhập người dùng có thể được tích hợp dễ dàng với PHP và MySQL. Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách xây dựng một hệ thống đăng nhập an toàn với PHP và MySQL
Trong tập lệnh hệ thống đăng nhập PHP này, chúng tôi sẽ triển khai các chức năng sau với PHP và MySQL
- Đăng ký tạo tài khoản người dùng
- Xác thực tài khoản người dùng
- Xác thực người dùng bằng PHP SESSION
- Chế độ xem tài khoản người dùng
Trước khi bắt đầu xây dựng Hệ thống đăng nhập người dùng bằng PHP, hãy xem cấu trúc tệp
php_login_system_with_mysql/ ├── User.class.php ├── userAccount.php ├── index.php ├── registration.php └── css/ └── style.css
Tạo bảng cơ sở dữ liệu
Cần có một bảng để lưu trữ chi tiết tài khoản trong cơ sở dữ liệu. SQL sau đây tạo một bảng
CREATE TABLE `users` [ `id` int[11] NOT NULL AUTO_INCREMENT, `first_name` varchar[25] COLLATE utf8_unicode_ci NOT NULL, `last_name` varchar[25] COLLATE utf8_unicode_ci NOT NULL, `email` varchar[50] COLLATE utf8_unicode_ci NOT NULL, `password` varchar[255] COLLATE utf8_unicode_ci NOT NULL, `phone` varchar[15] COLLATE utf8_unicode_ci NOT NULL, `created` datetime NOT NULL, `modified` datetime NOT NULL, `status` tinyint[1] NOT NULL DEFAULT 1 COMMENT '1=Active | 0=Block', PRIMARY KEY [`id`] ] ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;0 trong cơ sở dữ liệu MySQL
CREATE TABLE `users` [ `id` int[11] NOT NULL AUTO_INCREMENT, `first_name` varchar[25] COLLATE utf8_unicode_ci NOT NULL, `last_name` varchar[25] COLLATE utf8_unicode_ci NOT NULL, `email` varchar[50] COLLATE utf8_unicode_ci NOT NULL, `password` varchar[255] COLLATE utf8_unicode_ci NOT NULL, `phone` varchar[15] COLLATE utf8_unicode_ci NOT NULL, `created` datetime NOT NULL, `modified` datetime NOT NULL, `status` tinyint[1] NOT NULL DEFAULT 1 COMMENT '1=Active | 0=Block', PRIMARY KEY [`id`] ] ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Lớp người dùng [Người dùng. lớp. php]
Lớp người dùng xử lý tất cả các hoạt động liên quan đến cơ sở dữ liệu [Kết nối, Tìm nạp và Chèn] với PHP và MySQL
- Lúc đầu, chỉ định máy chủ cơ sở dữ liệu [
CREATE TABLE `users` [ `id` int[11] NOT NULL AUTO_INCREMENT, `first_name` varchar[25] COLLATE utf8_unicode_ci NOT NULL, `last_name` varchar[25] COLLATE utf8_unicode_ci NOT NULL, `email` varchar[50] COLLATE utf8_unicode_ci NOT NULL, `password` varchar[255] COLLATE utf8_unicode_ci NOT NULL, `phone` varchar[15] COLLATE utf8_unicode_ci NOT NULL, `created` datetime NOT NULL, `modified` datetime NOT NULL, `status` tinyint[1] NOT NULL DEFAULT 1 COMMENT '1=Active | 0=Block', PRIMARY KEY [`id`] ] ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
1], tên người dùng [CREATE TABLE `users` [ `id` int[11] NOT NULL AUTO_INCREMENT, `first_name` varchar[25] COLLATE utf8_unicode_ci NOT NULL, `last_name` varchar[25] COLLATE utf8_unicode_ci NOT NULL, `email` varchar[50] COLLATE utf8_unicode_ci NOT NULL, `password` varchar[255] COLLATE utf8_unicode_ci NOT NULL, `phone` varchar[15] COLLATE utf8_unicode_ci NOT NULL, `created` datetime NOT NULL, `modified` datetime NOT NULL, `status` tinyint[1] NOT NULL DEFAULT 1 COMMENT '1=Active | 0=Block', PRIMARY KEY [`id`] ] ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
2], mật khẩu [CREATE TABLE `users` [ `id` int[11] NOT NULL AUTO_INCREMENT, `first_name` varchar[25] COLLATE utf8_unicode_ci NOT NULL, `last_name` varchar[25] COLLATE utf8_unicode_ci NOT NULL, `email` varchar[50] COLLATE utf8_unicode_ci NOT NULL, `password` varchar[255] COLLATE utf8_unicode_ci NOT NULL, `phone` varchar[15] COLLATE utf8_unicode_ci NOT NULL, `created` datetime NOT NULL, `modified` datetime NOT NULL, `status` tinyint[1] NOT NULL DEFAULT 1 COMMENT '1=Active | 0=Block', PRIMARY KEY [`id`] ] ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
3] và tên [CREATE TABLE `users` [ `id` int[11] NOT NULL AUTO_INCREMENT, `first_name` varchar[25] COLLATE utf8_unicode_ci NOT NULL, `last_name` varchar[25] COLLATE utf8_unicode_ci NOT NULL, `email` varchar[50] COLLATE utf8_unicode_ci NOT NULL, `password` varchar[255] COLLATE utf8_unicode_ci NOT NULL, `phone` varchar[15] COLLATE utf8_unicode_ci NOT NULL, `created` datetime NOT NULL, `modified` datetime NOT NULL, `status` tinyint[1] NOT NULL DEFAULT 1 COMMENT '1=Active | 0=Block', PRIMARY KEY [`id`] ] ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
4] theo thông tin đăng nhập cơ sở dữ liệu MySQL - __construct[] – Kết nối cơ sở dữ liệu bằng thông tin đăng nhập MySQL đã chỉ định
- getRows[] – Lấy các bản ghi từ cơ sở dữ liệu dựa trên các điều kiện
- insert[] – Chèn dữ liệu vào cơ sở dữ liệu
/*
* User Class
* This class is used for database related [connect fetch, and insert] operations
* @author CodexWorld.com
* @url //www.codexworld.com
* @license //www.codexworld.com/license
*/
class User{
private $dbHost = "localhost";
private $dbUsername = "root";
private $dbPassword = "root";
private $dbName = "codexworld";
private $userTbl = "users";public function __construct[]{
if[!isset[$this->db]]{
// Connect to the database
$conn = new mysqli[$this->dbHost, $this->dbUsername, $this->dbPassword, $this->dbName];
if[$conn->connect_error]{
die["Failed to connect with MySQL: " . $conn->connect_error];
}else{
$this->db = $conn;
}
}
}/*
* Returns rows from the database based on the conditions
* @param string name of the table
* @param array select, where, order_by, limit and return_type conditions
*/
public function getRows[$conditions = array[]]{
$sql = 'SELECT ';
$sql .= array_key_exists["select",$conditions]?$conditions['select']:'*';
$sql .= ' FROM '.$this->userTbl;
if[array_key_exists["where",$conditions]]{
$sql .= ' WHERE ';
$i = 0;
foreach[$conditions['where'] as $key => $value]{
$pre = [$i > 0]?' AND ':'';
$sql .= $pre.$key." = '".$value."'";
$i++;
}
}if[array_key_exists["order_by",$conditions]]{
$sql .= ' ORDER BY '.$conditions['order_by'];
}if[array_key_exists["start",$conditions] && array_key_exists["limit",$conditions]]{
$sql .= ' LIMIT '.$conditions['start'].','.$conditions['limit'];
}elseif[!array_key_exists["start",$conditions] && array_key_exists["limit",$conditions]]{
$sql .= ' LIMIT '.$conditions['limit'];
}$result = $this->db->query[$sql];
if[array_key_exists["return_type",$conditions] && $conditions['return_type'] != 'all']{
switch[$conditions['return_type']]{
case 'count':
$data = $result->num_rows;
break;
case 'single':
$data = $result->fetch_assoc[];
break;
default:
$data = '';
}
}else{
if[$result->num_rows > 0]{
while[$row = $result->fetch_assoc[]]{
$data[] = $row;
}
}
}
return !empty[$data]?$data:false;
}/*
* Insert data into the database
* @param string name of the table
* @param array the data for inserting into the table
*/
public function insert[$data]{
if[!empty[$data] && is_array[$data]]{
$columns = '';
$values = '';
$i = 0;
if[!array_key_exists['created',$data]]{
$data['created'] = date["Y-m-d H:i:s"];
}
if[!array_key_exists['modified',$data]]{
$data['modified'] = date["Y-m-d H:i:s"];
}
foreach[$data as $key=>$val]{
$pre = [$i > 0]?', ':'';
$columns .= $pre.$key;
$values .= $pre."'".$val."'";
$i++;
}
$query = "INSERT INTO ".$this->userTbl." [".$columns."] VALUES [".$values."]";
$insert = $this->db->query[$query];
return $insert?$this->db->insert_id:false;
}else{
return false;
}
}}
Xử lý yêu cầu đăng ký, đăng nhập và đăng xuất [userAccount. php]
Tập lệnh phía máy chủ này xử lý yêu cầu đăng ký, xác thực và đăng xuất đến từ
CREATE TABLE `users` [ `id` int[11] NOT NULL AUTO_INCREMENT, `first_name` varchar[25] COLLATE utf8_unicode_ci NOT NULL, `last_name` varchar[25] COLLATE utf8_unicode_ci NOT NULL, `email` varchar[50] COLLATE utf8_unicode_ci NOT NULL, `password` varchar[255] COLLATE utf8_unicode_ci NOT NULL, `phone` varchar[15] COLLATE utf8_unicode_ci NOT NULL, `created` datetime NOT NULL, `modified` datetime NOT NULL, `status` tinyint[1] NOT NULL DEFAULT 1 COMMENT '1=Active | 0=Block', PRIMARY KEY [`id`] ] ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;5 và
CREATE TABLE `users` [ `id` int[11] NOT NULL AUTO_INCREMENT, `first_name` varchar[25] COLLATE utf8_unicode_ci NOT NULL, `last_name` varchar[25] COLLATE utf8_unicode_ci NOT NULL, `email` varchar[50] COLLATE utf8_unicode_ci NOT NULL, `password` varchar[255] COLLATE utf8_unicode_ci NOT NULL, `phone` varchar[15] COLLATE utf8_unicode_ci NOT NULL, `created` datetime NOT NULL, `modified` datetime NOT NULL, `status` tinyint[1] NOT NULL DEFAULT 1 COMMENT '1=Active | 0=Block', PRIMARY KEY [`id`] ] ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;0. Lớp Người dùng [
CREATE TABLE `users` [ `id` int[11] NOT NULL AUTO_INCREMENT, `first_name` varchar[25] COLLATE utf8_unicode_ci NOT NULL, `last_name` varchar[25] COLLATE utf8_unicode_ci NOT NULL, `email` varchar[50] COLLATE utf8_unicode_ci NOT NULL, `password` varchar[255] COLLATE utf8_unicode_ci NOT NULL, `phone` varchar[15] COLLATE utf8_unicode_ci NOT NULL, `created` datetime NOT NULL, `modified` datetime NOT NULL, `status` tinyint[1] NOT NULL DEFAULT 1 COMMENT '1=Active | 0=Block', PRIMARY KEY [`id`] ] ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;1] được sử dụng để tìm nạp và chèn dữ liệu tài khoản người dùng từ/đến cơ sở dữ liệu
CREATE TABLE `users` [ `id` int[11] NOT NULL AUTO_INCREMENT, `first_name` varchar[25] COLLATE utf8_unicode_ci NOT NULL, `last_name` varchar[25] COLLATE utf8_unicode_ci NOT NULL, `email` varchar[50] COLLATE utf8_unicode_ci NOT NULL, `password` varchar[255] COLLATE utf8_unicode_ci NOT NULL, `phone` varchar[15] COLLATE utf8_unicode_ci NOT NULL, `created` datetime NOT NULL, `modified` datetime NOT NULL, `status` tinyint[1] NOT NULL DEFAULT 1 COMMENT '1=Active | 0=Block', PRIMARY KEY [`id`] ] ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
2 – Nếu yêu cầu đăng ký được gửi, dữ liệu đầu vào sẽ được chèn vào cơ sở dữ liệu sau khi xác thựcCREATE TABLE `users` [ `id` int[11] NOT NULL AUTO_INCREMENT, `first_name` varchar[25] COLLATE utf8_unicode_ci NOT NULL, `last_name` varchar[25] COLLATE utf8_unicode_ci NOT NULL, `email` varchar[50] COLLATE utf8_unicode_ci NOT NULL, `password` varchar[255] COLLATE utf8_unicode_ci NOT NULL, `phone` varchar[15] COLLATE utf8_unicode_ci NOT NULL, `created` datetime NOT NULL, `modified` datetime NOT NULL, `status` tinyint[1] NOT NULL DEFAULT 1 COMMENT '1=Active | 0=Block', PRIMARY KEY [`id`] ] ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
3 – Nếu yêu cầu đăng nhập được gửi, hệ thống sẽ kiểm tra xem có bản ghi nào tồn tại trong cơ sở dữ liệu với email và mật khẩu đã cho hay khôngCREATE TABLE `users` [ `id` int[11] NOT NULL AUTO_INCREMENT, `first_name` varchar[25] COLLATE utf8_unicode_ci NOT NULL, `last_name` varchar[25] COLLATE utf8_unicode_ci NOT NULL, `email` varchar[50] COLLATE utf8_unicode_ci NOT NULL, `password` varchar[255] COLLATE utf8_unicode_ci NOT NULL, `phone` varchar[15] COLLATE utf8_unicode_ci NOT NULL, `created` datetime NOT NULL, `modified` datetime NOT NULL, `status` tinyint[1] NOT NULL DEFAULT 1 COMMENT '1=Active | 0=Block', PRIMARY KEY [`id`] ] ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
4 – Nếu yêu cầu đăng xuất được gửi, hệ thống sẽ đăng xuất người dùng khỏi tài khoản của họ- PHIÊN PHP được sử dụng để giữ trạng thái đăng nhập của người dùng
Phiếu đăng ký [đăng ký. php]
Các phần tử biểu mẫu HTML sau đây cho phép nhập thông tin tài khoản [tên, email, mật khẩu, v.v. ] để đăng ký
- Khi gửi, dữ liệu biểu mẫu được gửi tới tập lệnh phía máy chủ [________ 15] để xử lý yêu cầu đăng ký
Biểu mẫu đăng nhập và chi tiết tài khoản người dùng [chỉ mục. php]
Ban đầu, biểu mẫu đăng nhập được hiển thị để cho phép người dùng đăng nhập bằng email và mật khẩu
- Nếu người dùng đã đăng nhập, phần chi tiết tài khoản sẽ được hiển thị
- Trong màn hình đăng nhập, liên kết đăng ký được cung cấp
- Trong màn hình tài khoản, liên kết đăng xuất được cung cấp
Sự kết luận
Hy vọng hướng dẫn từng bước này và tập lệnh ví dụ sẽ giúp bạn triển khai hệ thống đăng ký và đăng nhập trong ứng dụng web PHP. Bạn có thể tích hợp chức năng user login vào website với PHP và MySQL bằng SESSION. Ngoài ra, bạn có thể mở rộng Lớp người dùng để xây dựng hệ thống xác thực người dùng và hệ thống quản lý người dùng nâng cao.
Phần tiếp theo. Quên mật khẩu Triển khai chức năng khôi phục trong hệ thống đăng nhập bằng PHP và MySQL
Bạn có muốn nhận trợ giúp triển khai hay sửa đổi hoặc nâng cao chức năng của tập lệnh này không?