PHP cơ bản : Tạo form đăng ký, đăng nhập (phần 2)
Ở bài trước “hướng dẫn tao form đăng ký” mình đã hướng dẫn các bạn tạo form đăng ký cho website của mình. Hôm nay mình sẽ tiếp tục chia sẽ đến các bạn bài viết về hướng dẫn tạo form đăng nhập. Trong bài viết này, mình sẽ tóm tắt như sau, đó là khi một người dùng điền thông tin đăng nhập, ta sẽ thực thi việc kiểm tra thông tin đăng nhập bao gồm username và password, nếu thông tin trùng khớp với dữ liệu trong database ta sẽ tiến hành lưu , khởi tạo session và tiến hành lưu dữ liệu vào session. Tiếp theo ta sẽ dùng session đã được khởi tạo đó để check một số quyền hạn nhất định trên trang.
1. Tạo form đăng nhập :
Chúng ta sẽ tạo form đăng nhập login.php, đặt trong folder my_website
bao gồm :
- ô input username : tài khoản mà người dùng đã đăng ký
- ô input password : mật khẩu người dùng đã đăng ký
<html> <head> <title>Trang đăng nhập</title> <meta charset="utf-8"> </head> <body> <form method="POST" action="login.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> </body> </html>
Gõ xong, các bạn vào đường dẫn
http://localhost/my_website/login.php
bạn sẽ thấy form như sau
2. Xử lý thông tin đăng nhập
Đây là giai đoạn chúng ta sẽ tiến hành kiểm tra người dùng đã nhập đủ thông tin vào form đăng nhập hay chưa, nếu chưa hiện ra thông báo bắt buộc họ phải nhập đầy đủ thông tin, sau đó tiếp tục kiểm tra thông tin người dùng với dữ liệu họ đã đăng ký trong database xem đã trùng khớp hay chưa? nếu chưa thì tiếp tục hiện thống báo phản hồi, ngược lại tiến hành lưu thông tin đăng nhập vào session để xử lý
Lưu ý : muốn sử dụng session để lưu thông tin , thì bạn phải khởi tạo session bằng function session_start() và thì tốt nhất nên đặt function session_start() đầu trang
<?php session_start(); ?>
Tiếp theo ta sẽ kiểm tra thông tin đăng nhập và lưu vào lại session như code đầy đủ dưới đây
<?php
session_start();
?>
<html>
<head>
<title>Trang đăng nhập</title>
<meta charset="utf-8">
</head>
<body>
<?php
//Gọi file connection.php ở bài trước
require_once("lib/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{
//tiến hành lưu tên đăng nhập vào session để tiện xử lý sau này
$_SESSION['username'] = $username;
// 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="login.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 name="btn_submit" type="submit" value="Đăng nhập"></td>
</tr>
</table>
</fieldset>
</form>
</body>
</html>
3. Xử lý sau hậu đăng nhập
Ở phần 2, sau khi đăng nhập thành công, chúng ta sẽ chuyển hướng trang web tới trang index.php. Vì thế chúng ta tiếp tục tạo trang index.php (đặt trong thư mục my_website) để xử lý thông tin, gọi nôm na là xử lý hậu đăng nhập.
Trong file index.php gõ theo như đoạn code dưới đây:
<?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: login.php');
}
?>
<html>
<head>
<title>trang chủ</title>
<meta charset="utf-8">
</head>
<body>
Chúc mừng bạn có username là <?php echo $_SESSION['username']; ?> đã đăng nhập thành công !
</body>
</html>
Giải thích một tí về đoạn code trên, ở đoạn code
<?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: login.php');
}
?>
chúng ta sẽ tiến hành kiểm tra khi một ai đó chưa đăng nhập nhưng cố tình truy cập vào trang index.php bằng cách điền địa chỉ
http://localhost/my_website/index.php
, thì sẽ bị chuyển hướng ra lại trang đăng nhập, ngược lại thì ta sẽ xuất ra dòng chữ
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é!
"Chúc mừng bạn có username là 'tên đăng nhập được lưu trong session' đã đăng nhập thành công !"
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é. Thân !
➡ Đợi chút, bạn có muốn tự tay tạo thiết kế website bằng HTML, CSS, Bootstrap cho riêng mình ? Nếu có thì xem tại đây nhé




cho em hỏi fix lỗi này thế nào ạ:
Parse error: syntax error, unexpected ‘if’ (T_IF) in /htdocs/login.php on line 25
code này đã fix đc lỗi XSS (‘or’1’=’1,..) chưa ạ
hello world! welcome to PHP. Mình tiếc 1 điều là: tiếp cận PHP hơi muộn, nếu được quay lại 10 năm về trước mình sẽ học PHP. I love website, html, css, java sript, PHP.
admin ơi chỉ e lỗi này với ạ
Warning: require_once(lib/connection.php): failed to open stream: No such file or directory in C:xampphtdocstienlogin.php on line 12
Fatal error: require_once(): Failed opening required ‘lib/connection.php’ (include_path=’.;C:xamppphpPEAR’) in C:xampphtdocstienlogin.php on line 12
E kiểm tra dòng 12 trong file login.php, e kiểm tra xem đường dẫn tới thư mục connection.php đã đúng chưa, hình như là e đang sai đường dẫn
a ơi. cho em hỏi những lỗi này là lỗi gì ạ:
Notice: Undefined variable: connect in C:\xampp\htdocs\test1\xuly1.php on line 15
Warning: mysqli_query() expects parameter 1 to be mysqli, null given in C:\xampp\htdocs\test1\xuly1.php on line 15
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in C:\xampp\htdocs\test1\xuly1.php on line 16
Notice: Undefined variable: num_rows in C:\xampp\htdocs\test1\xuly1.php on line 17
Tên đăng nhập hoac mat khau sai.
Xài include thử xem
anh cho em hỏi chút ạ
ở chỗ đoạn làm sạch thông tin thì thay vì như này
$username = strip_tags($username);
$username = addslashes($username);
thì em để lại là
$username = strip_tags(addslashes($username));
thì có được không ạ
được e nhé, cách của e là viết gộp lại cũng được
Ad ơi cho mình hỏi , khi đã đăng nhập xong , bây h mình muốn lưu những thông tin ( chẳng hạn như thông tin đặt vé ) của người dùng đã đăng nhập lên database của họ thì làm như thế nào ạ
khi họ đăng nhập e có thông tin họ rồi thì cứ tạo bảng mới chẳng hạn thong_tin_nguoi_dung, rồi lưu vào database các thông tin với khóa tham chiếu là user_id của người dùng là được mà
Vâng e cảm ơn nhiều ạ
Em muốn giới hạn số lần đăng nhập sai thi làm sao hả anh
mỗi lần đăng nhập e có thể lưu lại vào trong database, cứ mỗi lần đăng nhập thì e tăng lên 1 giá trị, khi đạt tới giới hạn nào đó rồi thì e có thể chặn ko cho đăng nhập nữa
Anh ơi cho e hỏi lỗi này là như thế nào vậy ạ
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\my_website\dangnhap.php on line 104
Dạ e cám ơn a nhiều!!!
Lỗi này là do câu query bị sai. E echo câu query ra và kiểm tra xem bị lỗi gì nhé
Anh ơi cho e hỏi sao khi đăng nhập xong chuyển sang trang index.php thì xuất hiện lỗi này: Fatal error: Call to undefined function sesstion_start() in C:\xampp\htdocs\my_website\index.php on line 2. Anh giúp e sữa lỗi này được không anh, dạ e cám ơn a !!!
Em mở file php.ini trong thư mục xampp của e và tìm đến dòng “extension=session.so” xem đã được mở chưa nhé
Anh ơi làm sao mình tìm dược dòng “extension=session.so” và được mở thì trông code sẽ như thế nào ạ? Dạ e cám ơn a !!!
Em thử tìm trong thư mục cài đặt xampp của e, ví dụ “C:\xampp\php\php.ini”, mỏ nó lên và tìm đến dòng “extension=session.so” rồi bỏ dấu # ở trước đi
;;;;;;;;;;;;;;;;;;;;;; ; Dynamic Extensions ; ;;;;;;;;;;;;;;;;;;;;;; ; If you wish to have an extension loaded automatically, use the following ; syntax: ; ; extension=modulename.extension ; ; For example, on Windows: ; ; extension=msql.dll ; ; … or under UNIX: ; ; extension=msql.so ; ; … or with a path: ; ; extension=/path/to/extension/msql.so ; ; If you only provide the name of the extension, PHP will look for it in its ; default extension directory. ; ; Windows Extensions ; Note that ODBC support is built in, so no dll is needed for it. ; Note that many DLL files are… Read more »
anh ơi hướng dẫn giúp em tạo trang đăng ký đăng nhập trong wordpress ạ..em cảm ơn anh..nhiều
WordPress nó có sẵn hết rồi mà e