Tạo trang đăng nhập – Tạo website bằng PHP (Phần 4)
Ở bài trước, chúng ta đã hoàn thành xong phần tạo trang đăng ký thành viên, hôm nay chúng ta sẽ tiếp tục tạo trang đăng nhập và sử dụng thông tin đã đăng ký trong bài trước để đăng nhập vào hệ thống của chúng ta.
TẠO TRANG ĐĂNG NHẬP
Nội dung bài viết hôm nay bao gồm các mục chính như sau :
- Thiết kế giao diện trang đăng nhập
- Lấy thông tin đăng nhập so sánh đối chiều với dữ liệu trong database
- Nếu đăng nhập thành công lưu thông tin người dùng vào session dùng cho các mục đích khác
- Nếu đăng nhập thất bại hiển thị thông báo lỗi cho người dùng
1. Thiết kế giao diện trang đăng nhập
Trong thư mục website đã tạo ra ở phần 1, các bạn tạo một file và đặt tên là dang-nhap.php có nội dung như sau :
<?php include "includes/header.php" ?> <form method="POST" action="dang-nhap.php"> <fieldset> <legend>Đăng nhập</legend> <table> <tr> <td>Username</td> <td><input type="text" name="username" size="30"></td> </tr> <tr> <td>Password</td> <td><input type="password" name="password" size="30"></td> </tr> <tr> <td colspan="2" align="center"> <input type="submit" name="btn_submit" value="Đăng nhập"></td> </tr> </table> </fieldset> </form> <?php include "includes/footer.php" ?>
Vào trình duyệt, chạy đường dẫn :
http://localhost/website/dang-nhap.php
các bạn sẽ có được giao diện trang đăng nhập hiển thị ra như sau :
Trong form đăng nhập này bao gồm:
Username : tên đăng nhập của người dùng
Password : Mật khẩu đăng nhập
Nut Đăng nhập : Tiến hành thực thi kiểm tra thông tin đăng nhập
Trong thẻ <form> mình dùng method=”POST”, là phương thức được chỉ định để gửi thông tin đi (Bạn có thể tham khảo sự khác nhau giữa POST và GET tại đây )
2. Tiến hành xử lý thông tin đăng nhập
a. Khởi tạo session
Sau khi đã thiết kế xong giao diện dành cho trang đăng nhập, tiếp đến chúng ta sẽ tiến hành xử lý thông tin đăng nhập. Như đã nói ở trên, khi kiểm tra thông tin đăng nhập, nếu thông tin đúng chúng ta sẽ lưu thông tin đăng nhập vào session, ngược lại sai thì sẽ hiển thị thông báo lỗi ra ngoài.
Để thực thi việc lưu thông tin vào session chúng ta luôn phải làm thao tác đầu tiên đó là khởi tạo session. Cú pháp khởi tạo session như sau:
<?php session_start(); ?>
đoạn code này các bạn lưu ý phải đặt ở đầu trang dang-nhap.php nhé.
b. Xử lý đăng nhập
Tiếp theo, chúng ta sẽ bắt đầu xử lý thông tin đăng nhập, nếu thông tin đúng sẽ tiến hành lưu vào session, ngược lại thông báo lỗi cho người dùng và yêu cầu họ nhập lại.
Gợi ý: Bạn đang quan tâm đến Bitcoin? Tìm hiểu ngay Bitcoin Toàn Tập Cho Người Mới nhé!
<?php
//Gọi file connection.php ở bài trước
require_once("includes/connection.php");
// Kiểm tra nếu người dùng đã ân nút đăng nhập thì mới xử lý
if (isset($_POST["btn_submit"])) {
// lấy thông tin người dùng
$username = $_POST["username"];
$password = $_POST["password"];
//làm sạch thông tin, xóa bỏ các tag html, ký tự đặc biệt
//mà người dùng cố tình thêm vào để tấn công theo phương thức sql injection
$username = strip_tags($username);
$username = addslashes($username);
$password = strip_tags($password);
$password = addslashes($password);
if ($username == "" || $password =="") {
echo "username hoặc password bạn không được để trống!";
}else{
$sql = "select * from users where username = '$username' and password = '$password' ";
echo $sql;
$query = mysqli_query($conn,$sql);
$num_rows = mysqli_num_rows($query);
if ($num_rows==0) {
echo "tên đăng nhập hoặc mật khẩu không đúng !";
}else{
// Lấy ra thông tin người dùng và lưu vào session
while ( $data = mysqli_fetch_array($query) ) {
$_SESSION["user_id"] = $data["id"];
$_SESSION['username'] = $data["username"];
$_SESSION["email"] = $data["email"];
$_SESSION["fullname"] = $data["fullname"];
$_SESSION["is_block"] = $data["is_block"];
$_SESSION["permision"] = $data["permision"];
}
// Thực thi hành động sau khi lưu thông tin vào session
// ở đây mình tiến hành chuyển hướng trang web tới một trang gọi là index.php
header('Location: index.php');
}
}
}
?>
Toàn bộ chú thích mình đã comment bên trong code, các bạn đọc comment để hiểu rõ hơn.
c. Toàn bộ code trang dang-nhap.php
Như vậy toàn bộ đoạn code của trang dang-nhap.php có nội dung như sau :
<?php
session_start();
?>
<?php include "includes/header.php" ?>
<?php
//Gọi file connection.php ở bài trước
require_once("includes/connection.php");
// Kiểm tra nếu người dùng đã ân nút đăng nhập thì mới xử lý
if (isset($_POST["btn_submit"])) {
// lấy thông tin người dùng
$username = $_POST["username"];
$password = $_POST["password"];
//làm sạch thông tin, xóa bỏ các tag html, ký tự đặc biệt
//mà người dùng cố tình thêm vào để tấn công theo phương thức sql injection
$username = strip_tags($username);
$username = addslashes($username);
$password = strip_tags($password);
$password = addslashes($password);
if ($username == "" || $password =="") {
echo "username hoặc password bạn không được để trống!";
}else{
$sql = "select * from users where username = '$username' and password = '$password' ";
$query = mysqli_query($conn,$sql);
$num_rows = mysqli_num_rows($query);
if ($num_rows==0) {
echo "tên đăng nhập hoặc mật khẩu không đúng !";
}else{
// Lấy ra thông tin người dùng và lưu vào session
while ( $data = mysqli_fetch_array($query) ) {
$_SESSION["user_id"] = $data["id"];
$_SESSION['username'] = $data["username"];
$_SESSION["email"] = $data["email"];
$_SESSION["fullname"] = $data["fullname"];
$_SESSION["is_block"] = $data["is_block"];
$_SESSION["permision"] = $data["permision"];
}
// Thực thi hành động sau khi lưu thông tin vào session
// ở đây mình tiến hành chuyển hướng trang web tới một trang gọi là index.php
header('Location: index.php');
}
}
}
?>
<form method="POST" action="dang-nhap.php">
<fieldset>
<legend>Đăng nhập</legend>
<table>
<tr>
<td>Username</td>
<td><input type="text" name="username" size="30"></td>
</tr>
<tr>
<td>Password</td>
<td><input type="password" name="password" size="30"></td>
</tr>
<tr>
<td colspan="2" align="center"> <input type="submit" name="btn_submit" value="Đăng nhập"></td>
</tr>
</table>
</fieldset>
</form>
<?php include "includes/footer.php" ?>
Khi các bạn chạy trang này, điền đầy đủ thông tin (thông tin username, password các bạn lấy ở bài Hướng dẫn tạo trang đăng ký). Nếu thông tin nhập đúng, khi ấn nút Đăng nhập bạn sẽ được chuyển hướng đến trang index.php. Ngược lại sẽ hiển thông báo lỗi ra bên ngoài.
Kết thúc bài viết, nếu bạn có bất kỳ thắc mắc nào thì để lại comment bên dưới, chúng ta sẽ cùng nhau thảo luận. Nếu thấy bài viết hay thì đừng quên ấn nút share bên dưới để mọi người cùng nhau học nhé.
P/S : Bài viết là công sức mình và thời gian mình bỏ ra chia sẽ đến các bạn, hy vọng các bạn học tốt hơn, nên bạn nào copy bài, vui lòng ghi rõ nguồn giúp mình nhé. Đây là nguyên tắc tôn trọng người viết bài,
Chúc các bạn học tốt !



Share code git hub của phần này đi ạ
hic, a cũng ko còn giữ code của phần này nữa,e chịu khó code theo nhé 🙁
Thầy ơi cho em hỏi. Em đăng nhập xong nó không chuyển hướng. Em có test phần này báo đã đăng nhập thành công. Vậy lỗi ở chỗ nào ạ?
<?php
session_start();
//tiến hành kiểm tra là người dùng đã đăng nhập hay chưa
//nếu chưa, chuyển hướng người dùng ra lại trang đăng nhập
if (!isset($_SESSION['username'])) {
header('Location: dang-nhap.php');
}
E thử echo biến $_Session ra xem có giá trị gì ko nhé, vì như đoạn code trên thì có giá trị nó mới chuyển hướng
database của e gồm
tai_khoan(user)
mat_khau(password)
avata(image)
trang_thai
vai_tro
vai_tro gồm thành viên và admin
để đăng nhập được vào trang admin thì vai_tro = admin
để vào được trang quản trị thì em phải làm như nào a
Khi đăng nhập e kiểm tra if($_SESSION[“vai_tro”] == “admin”) thì cho đăng nhập vào admin, ko thì ko được phép.
a ơi cho em hỏi.
giao diện index gồm mục đăng nhập và đăng ký.
sau khi đăng nhập thành công sẽ mất mục đăng nhập và đăng ký đó đồng thời hiện user đã đăng nhập vào
E coi ở bài sau nhé, có hướng dẫn chuyển tới trang index
anh ơi cho em hỏi tại phần đăng nhập với permission có hàm chuyển hướng header header(‘Location: http://localhost/website/dang-nhap.php‘); header(‘Location: index.php’); chạy bị lỗi này sửa sao ạ Warning: Cannot modify header information – headers already sent by (output started at E:xampxampphtdocswebsitedang-nhap.php:6) in E:xampxampphtdocswebsitedang-nhap.php on line 42
e kiểm tra xem trước đó có echo hay khoảng trắng giữa <?php gì ko. Có thể tham khảo ở đây https://stackoverflow.com/questions/8028957/how-to-fix-headers-already-sent-error-in-php
Hi! Làm sao để phân quyền cho admin và user ạ, phần permision của admin=0 thì thiết lập ở đâu ạ?
cái này là mình tự quy ước e nhé, hoặc e có thể tạo 1 bảng riêng, và tự quy ước, chẳng hạn 0 là admin, 1 là moderator, 2 là manager, 3 là user thường chẳng hạn
nhưng ý e là thiết lập cái quy ước ấy ở đâu ạ?
Nhưng ý e là thiết lập cái quy ước ở đâu ạ, với lại , với lại <?php include(“includes/permission.php”);?> phần này thì đặt ở trang dang-nhap.php hay ở đâu ạ
nhưng thiết lập cái quy ước ấy ở đâu ạ
Nhưng thiếp lập cái quy ước ấy ở đâu ạ
hiện tại là trong bài viết a đang ngầm quy ước bằng code, chẳng hạn permission = 1 thì có thể làm những quyền gì, =2 thì có thể làm những quyền gì. Còn e muốn quản lý rõ ràng hơn thì có thể tạo 1 bảng mới là permission, có 2 cột, cột 1 là permission_id, cột 2 là permission_name, ví dụ permission_id = 1 | permission_name = admin, permission_id = 2 | permission_name = super admin chẳng hạn
Thầy ơi không có chức năng Logout ạ ??? thầy chỉ em với ạ ! em cảm ơn thầy nhiều
chức năng đăng xuất thì e chỉ cần dùng lệnh hủy session đi thôi nhé.
Đại loại sẽ như dưới đây :
if(isset($_GET[‘logout’])) {
session_destroy();
unset($_SESSION[‘username’]);
}
Em làm theo như anh, nhưng khi test thử đăng nhập (lấy thông tin ở phần đăng ký điền vào) lại bị tên đăng nhập hoặc mật khẩu không đúng.
khi ấn nút đăng nhập, ở phần xử lý e echo câu query ra xem nó đã truyền các biến đúng hay chưa, có sai cú pháp gì ko nhé, từ đó mà tìm ra nguyên nhân
Anh ơi cho em hỏi. Em muốn khi đăng nhập xong nó redirect về trang trước đó của em thì làm như thế nào ạ
E có thể dùng lệnh này ở cuối nhé : header(“Location: xxx.php”); //xxx là trang e muốn chuyển về
http://localhost/website/dang-nhap.php
thư mục website này thầy để ổ nào ạ, em thử để ổ D và htdocs không được, trang đăng nhập không thấy được thể hiện
để ngay thử mục htdocs đối với xampp hoặc www đối với wamp nhé.