Bài 18: Thực hành tạo form login bằng PHP từ database

Bài 18: Thực hành tạo form login bằng PHP từ database

Hầu hết các website đều không thể thiếu form login, hôm nay sonnguyenaz.com sẽ hướng dẫn các bạn làm thử 1 trang đơn giản bằng code PHP nhé.

Như ở bài trước mình đã hướng dẫn các bạn trong bài tạo cơ sở dữ liệu với MySQL trong PHP tạo databaseduan_test, và tableusers rồi.

Ở bài viết này chúng ta sẽ sử dụng cơ sở dữ liệu đã tạo trên vào để làm bài thực hành này.

Tạo giao diện form đăng nhập

Chắc hẳn bạn muốn học PHP thì cũng đã tìm hiểu về html và CSS rồi đúng không ạ, nếu chưa thì cứ bình luận xuống dưới để mình có thể ra chuỗi bài hướng dẫn nhé.

Hoặc các bạn cùng có thể tham khảo trên W3Schools.

Ở đây mình sẽ tạo 1 form đơn giản như sau và lưu lại vào file dangky.php:

<h2>Đăng ký</h2>
<form method="post">
<p>Họ tên:</p><p>
<input type="text" name="full_name">
</p>
<p>Tên đăng nhập:</p><p>
<input type="text" name="user_name">
</p>
<p>Mật khẩu:</p><p>
<input type="password" name="password">
</p>
<p>Nhập lại mật khẩu:</p><p>
<input type="password" name="password">
</p>
<p>Email:</p><p>
<input type="email" name="email">
</p>
<p>Số điện thoại:</p><p>
<input type="text" name="phone_number">
</p>

 <button type="submit" name="btn_dangky">Đăng ký</button>
</form>

Kết quả:

tao-form-dang-ky

Tạo form đăng nhập tại file dangnhap.php:

<h2>Đăng nhập</h2>
<form method="post">
<p>Tên đăng nhập:</p><p>
<input type="text" name="user_name">
</p>
<p>Mật khẩu:</p><p>
<input type="password" name="password">
</p>

<button type="submit" name="btn_dangnhap">Đăng nhập</button>
</form>

Kết quả:

tao-form-dang-nhap

Kết nối với database để login và register trong PHP

Tạo trang để cho người dùng register trong PHP

Như ở bài trước chúng ta cần phải kết nối với cơ sở dữ liệu ở đây là database duan_test, bằng cách import file connect.php:

<?php
require 'connect.php';

Tiếp theo, kiểm tra nếu nút Đăng ký được khởi tạo thì ta mới bắt đầu xử lý đăng ký bằng cách sử dụng hàm isset trong PHP:

if(isset($_POST['btn_dangky'])){
//xử lý đăng ký khi nút đăng ký được bấm	
}

Sau khi kiểm tra nút, bên trong chúng ta bắt đầu lấy các giá trị nhập vào về bằng phương thức POST:

$full_name= isset($_POST['full_name'])? ($_POST['full_name']) : '';
$user_name= isset($_POST['user_name'])? ($_POST['user_name']) : '';
$password= isset($_POST['full_name'])? md5($_POST['password']) : '';
$email= isset($_POST['email'])? ($_POST['email']) : '';
$phone_number= isset($_POST['phone_number'])? ($_POST['phone_number']) : '';

Chúng ta cần phải kiểm tra xem các đầu vào đã thỏa mãn điều kiện không được nhập trống hay chưa, nếu nhập chưa đúng thì hiển thị thông báo, ngược lại tiếp tục xử lý đăng nhập:

if(empty($full_name) || empty($user_name) || empty($password) || empty($email) || empty($phone_number)){
	echo 'Bạn cần nhập đầy đủ các trường!';
}	
else if{
	//tiếp tục kiểm tra xử lý đăng ký
}

Tiếp tục kiểm tra 2 mật khẩu nhập vào có giống nhau hay không:

else if($password!=$password1){
	echo 'Mật khẩu xác nhận không khớp';
}
else{
//xử lý đăng ký
}

Còn cần 1 điều kiện kiểm tra nữa đó là, tên đăng nhập đã tồn tại hay chưa bằng cách chúng ta sẽ truy xuất từ cơ sở dữ liệu ra:

//truy vấn cơ sở dữ liệu để kiểm tra user_name đã có hay chưa
$sql = "SELECT * FROM users where user_name='$user_name'";   
	$stmt = $con->prepare($sql); 
	$stmt->execute();
	$result = $stmt->setFetchMode(PDO::FETCH_ASSOC); 
	$result = $stmt->fetchAll();
	//Nếu chưa có
	if(empty($result)){

                //thực hiện ghi dữ liệu
	}
	else{
		echo 'Tên đăng nhập đã tồn tại';
	}

Nếu đã thỏa mãn các bước kiểm tra, bây giờ ta sẽ tạo truy vấn để insert vào cơ sở dữ liệu duan_test, với table users:

$sql = 'INSERT INTO users(full_name, user_name, password, email, phone_number) VALUES(?,?,?,?,?)';
		$statement = $con->prepare($sql);
		$statement->execute([$full_name,$user_name,$password,$email,$phone_number]);

Sau đây là đoạn code mẫu hoàn chỉnh:

<h2>Đăng ký</h2>
<form method="post">
<p>Họ tên:</p><p>
<input type="text" name="full_name">
</p>
<p>Tên đăng nhập:</p><p>
<input type="text" name="user_name">
</p>
<p>Mật khẩu:</p><p>
<input type="password" name="password">
</p>
<p>Nhập lại mật khẩu:</p><p>
<input type="password" name="password1">
</p>
<p>Email:</p><p>
<input type="email" name="email">
</p>
<p>Số điện thoại:</p><p>
<input type="text" name="phone_number">
</p>
<button type="submit" name="btn_dangky">Đăng ký</button>
</form>
<?php
require 'connect.php';
if(isset($_POST['btn_dangky'])){
	//---sử dụng phương thức POST để lấy dữ liệu nhập vào
	$full_name= isset($_POST['full_name'])? ($_POST['full_name']) : '';
	$user_name= isset($_POST['user_name'])? ($_POST['user_name']) : '';
	$password= isset($_POST['full_name'])? md5($_POST['password']) : '';
	$password1= isset($_POST['full_name'])? md5($_POST['password']) : '';
	$email= isset($_POST['email'])? ($_POST['email']) : '';
	$phone_number= isset($_POST['phone_number'])? ($_POST['phone_number']) : '';	
if(empty($full_name) || empty($user_name) || empty($password) || empty($email) || empty($phone_number)){
	echo 'Bạn cần nhập đầy đủ các trường!';
}	
//kiểm tra mật khẩu xác nhận
else if($password!=$password1){
	echo 'Mật khẩu xác nhận không khớp';
}
else{
	//Lấy dữ liệu bảng users để kiểm tra tên đăng nhập đã tồn tại chưa
	$sql = "SELECT * FROM users where user_name='$user_name'";   
	$stmt = $con->prepare($sql); 
	$stmt->execute();
	$result = $stmt->setFetchMode(PDO::FETCH_ASSOC); 
	$result = $stmt->fetchAll();
	//insert các trường trên vào cơ sở dữ liệu
	if(empty($result)){
		$sql = 'INSERT INTO users(full_name, user_name, password, email, phone_number) VALUES(?,?,?,?,?)';
		$statement = $con->prepare($sql);
		$statement->execute([$full_name,$user_name,$password,$email,$phone_number]);
	}
	else{
		echo 'Tên đăng nhập đã tồn tại';
	}
}	
}
?>

Tạo trang để cho người dùng login trong PHP

Trang login cũng tương tự như trang register trong PHP, chỉ khác nhau ở chỗ trang login chỉ cần truy xuất vào cơ sở dữ liệu để kiểm tra tên tài khoản và mật khẩu có khớp hay không.

Ở đây mình chỉ làm đơn giản là nếu đăng nhập thành công thì hiện thông tin tài khoản ra thôi nhé.

Đầu tiên chúng ta gọi kết nối cơ sở dữ liệu và lấy 2 trường dữ liệu từ submit formuser_namepassword:

if(isset($_POST['btn_dangnhap'])){

        //kết nối cơ sở dữ liệu
        require 'connect.php';
	//---sử dụng phương thức POST để lấy dữ liệu nhập vào
	$user_name= isset($_POST['user_name'])? ($_POST['user_name']) : '';
	$password= isset($_POST['password'])? md5($_POST['password']) : '';

Sau đó thực hiện lệnh truy vấn cơ sở dữ liệu để kiểm lấy ra thông tin đăng nhập:

//Lấy dữ liệu bảng users để kiểm tra tên đăng nhập và mật khẩu có đúng không
	$sql = "SELECT * FROM users where user_name='$user_name' and password='$password'";   
	$stmt = $con->prepare($sql); 
	$stmt->execute();
	$result = $stmt->setFetchMode(PDO::FETCH_ASSOC); 
	$result = $stmt->fetch();

Kết quả sẽ trả về một mảng array chứa thông tin truy vấn như sau:

Array
(
    [id] => 6
    [full_name] => Nguyễn Ngọc Sơn
    [user_name] => sonnguyenaz
    [password] => 202cb962ac59075b964b07152d234b70
    [email] => sonnguyenaz@gmail.com
    [phone_number] => 0943432827
)

Ở bài số 14 mình đã giới thiệu về mảng array trong PHP rồi bạn có thể xem lại nếu chưa hiểu

Tiếp theo, ta sẽ kiểm tra tên đăng nhập và mật khẩu có đúng không. Nếu đúng thì hiển thị đăng nhập thành công và thông tin cá nhân, nếu sai hiển thị thông báo đăng nhập không thành công.

//Nếu không đúng mảng array trả về rỗng
	if(empty($result)){
		echo 'Tên tài khoản hoặc mật khâu không đúng!';
	}
	//Còn lại đăng nhập thành công hiển thị thông tin
	else{
		echo 'Chào mừng bạn đến với blog sonnguyenaz.com<br>';
		echo 'Chào bạn: '.$result['full_name'].'<br>';
		echo 'Email: '.$result['email'].'<br>';
		echo 'Số điện thoại: '.$result['phone_number'].'<br>';	
	}	

Vậy là xong bây giờ là đoạn code đầy đủ:

<h2>Đăng nhập</h2>
<form method="post">
<p>Tên đăng nhập:</p><p>
<input type="text" name="user_name">
</p>
<p>Mật khẩu:</p><p>
<input type="password" name="password">
</p>
<button type="submit" name="btn_dangnhap">Đăng nhập</button>
</form>
<?php
require 'connect.php';
if(isset($_POST['btn_dangnhap'])){
	//---sử dụng phương thức POST để lấy dữ liệu nhập vào
	$user_name= isset($_POST['user_name'])? ($_POST['user_name']) : '';
	$password= isset($_POST['password'])? md5($_POST['password']) : '';

	//Lấy dữ liệu bảng users để kiểm tra tên đăng nhập và mật khẩu có đúng không
	$sql = "SELECT * FROM users where user_name='$user_name' and password='$password'";   
	$stmt = $con->prepare($sql); 
	$stmt->execute();
	$result = $stmt->setFetchMode(PDO::FETCH_ASSOC); 
	$result = $stmt->fetch();
	//Nếu không đúng mảng array trả về rỗng
	if(empty($result)){
		echo 'Tên tài khoản hoặc mật khâu không đúng!';
	}
	//Còn lại đăng nhập thành công hiển thị thông tin
	else{
		echo 'Chào mừng bạn đến với blog sonnguyenaz.com<br>';
		echo 'Chào bạn: '.$result['full_name'].'<br>';
		echo 'Email: '.$result['email'].'<br>';
		echo 'Số điện thoại: '.$result['phone_number'].'<br>';	
	}	
}
?>

Kết quả khi đăng nhập thành công:

Chào mừng bạn đến với blog sonnguyenaz.com
Chào bạn: Nguyễn Ngọc Sơn
Email: sonnguyenaz@gmail.com
Số điện thoại: 0943432827

Lời kết

Vậy là mình đã hướng dẫn các bạn tạo 1 trang register và login đơn giản nhất trong PHP rồi. Các bạn thử áp dụng thử xem sao nhé.

Nếu có gì chưa hiểu hoặc thắc mắc xin vui lòng bình luận xuống bên dưới để được giải đáp.

Cảm ơn các bạn đã theo dõi bài viết.

Rate this post

sonnguyen

Là một nhân viên IT thích chia sẻ những gì mình biết đến tất cả mọi người. Hi vọng được mọi người ủng hộ, nếu có gì sai sót mong các bạn comment xuống dưới để mình khắc phục. Cảm ơn mọi người!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *