Ở 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.
Mục lục
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é.
Gợi ý : Bạn là người mới và muốn tìm hiểu về Bitcoin nhưng không biết bắt đầu từ đâu? Click xem ngay Hướng Dẫn Đầu Tư Bitcoin Cho Người Mới 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.
<?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 !
Mình là Hiếu.
Người sáng lập ra blog Kungfu PHP chia sẻ mọi thứ về tiền điện tử, mmo, lập trình,…
Một câu nói mà mình rất thích đó là “Cuộc đời chỉ có một, vì thế hãy làm những gì khiến bạn hạnh phúc và ở bên người khiến bạn luôn mỉm cười”.
Hy vọng nơi đây là góc cafe nhỏ để chúng ta có thể trao đổi, cùng nhau phát triển.
►Nếu bạn thấy bài viết bạn đang đọc hữu ích, hãy mời mình một ly cafe nhé : https://kungfuphp.com/donate
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é.
mình theo dõi hết bài và sao chép code thực hành nhưng không thấy có chỗ đăng nhập cho admin và database cũng không có tài khoản admin thì phải làm sao ạ? mong hồi đáp
phần đăng nhập này mình làm chung cho cả admin và member nhé, nếu quyền admin thì xử lý khác, mà quyền member thì xử lý khác. Bạn muốn tách ra phần đăng nhập riêng cho admin thì có thể tự suy luận dựa theo logic của trang đăng nhập có sẵn
sao mình dựa vào đó nhưng nó không có phần nhúng các công cụ khi soạn bài?