WEB TIN TỨC PHP CĂN BẢN
Bài 1: PHP trang tin tức - Tạo database và cấu trúc folder admin Bài 2: PHP trang tin tức - Viết thư viện xử lý database admin Bài 3: PHP trang tin tức - Viết thư viện session và functions admin Bài 4: PHP trang tin tức - Kết nối database và cấu trúc index admin Bài 5: PHP trang tin tức - Xây dựng header và footer admin Bài 6: PHP trang tin tức - Tạo chức năng đăng nhập, đăng xuất admin Bài 7: PHP trang tin tức - Xây dựng sidebar, content và phân trang admin Bài 8: PHP trang tin tức - Các chức năng chuyên mục admin Bài 9: PHP trang tin tức - Các chức năng chuyên mục admin (tiếp theo) Bài 10: PHP trang tin tức - Các chức năng của hình ảnh admin Bài 11: PHP trang tin tức - Các chức năng của hình ảnh admin (tiếp theo) Bài 12: PHP trang tin tức - Các chức năng của bài viết admin Bài 13: PHP trang tin tức - Các chức năng của bài viết admin (tiếp theo) Bài 14: PHP trang tin tức - Các chức năng cài đặt admin Bài 15: PHP trang tin tức - Các chức năng của tài khoản admin Bài 16: PHP trang tin tức - Các chức năng của tài khoản admin (tiếp theo) Bài 17: PHP trang tin tức - Các chức năng của profile admin Bài 18: PHP trang tin tức - Các chức năng của profile admin (tiếp theo) Bài 19: PHP trang tin tức - Xây dựng dashboard admin và fix bug Bài 20: PHP trang tin tức - Cấu trúc folder client Bài 21: PHP trang tin tức - Kết nối database và rewrite url Bài 22: PHP trang tin tức - Xây dựng header và footer client Bài 23: PHP trang tin tức - Xây dựng layout client Bài 24: PHP trang tin tức - Hiển thị danh sách bài viết mới nhất Bài 25: PHP trang tin tức - Hiển thị danh sách bài viết chuyên mục Bài 26: PHP trang tin tức - Hiển thị nội dung bài viết Bài 27: PHP trang tin tức - Xây dựng chức năng tìm kiếm Bài 28: PHP trang tin tức - Xây dựng các trang con và clear source (End)
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
Dự án mới của mình là gamehow.net, mời anh em ghé thăm và góp ý ạ.

Bài 6: PHP trang tin tức - Tạo chức năng đăng nhập, đăng xuất admin

Xin chào tất cả các bạn, đây là bài thứ 6 trong loạt bài series hướng dẫn xây dựng trang tin tức PHP. Ở bài trước chúng ta đã xây dựng header và footer admin rồi. Hôm nay, mình sẽ hướng dẫn các bạn viết chức năng đăng nhập, đăng xuất admin của ứng dụng này nhé ! Bây giờ chúng ta bắt đầu thôi !

1. Xây dựng template đăng nhập

Các bạn vào đường dẫn thư mục admin/templates, sau đó tạo file signin.php, file này sẽ chứa template của form đăng nhập. Các bạn copy nội dung này và paste vào :

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

<div class="container">
	<div class="row">
		<div class="col-md-6">
			<p>Vui lòng đăng nhập để tiếp tục.</p>
			<form method="POST" id="formSignin" onsubmit="return false;">
				<div class="form-group">
					<div class="input-group">
			  			<span class="input-group-addon"><span class="glyphicon glyphicon-user"></span></span>
			  			<input type="text" class="form-control" placeholder="Tên đăng nhập" id="user_signin">
					</div><!-- div.input-group -->
				</div><!-- div.form-group -->
				<div class="form-group">
					<div class="input-group">
			  			<span class="input-group-addon"><span class="glyphicon glyphicon-lock"></span></span>
			  			<input type="password" class="form-control" placeholder="Mật khẩu" id="pass_signin">
					</div><!-- div.input-group -->
				</div><!-- div.form-group -->
				<div class="form-group">
					<button type="submit" class="btn btn-primary">Đăng nhập</button>
				</div><!-- div.form-group -->
				<div class="alert alert-danger hidden"></div>
			</form><!-- form#formSignin -->
		</div><!-- dib.col-md-6 -->
	</div><!-- div.row -->
</div><!-- div.container -->
Tiếp theo các bạn mở file admin/index.php và chèn đoạn code này dưới dòng require_once 'includes/header.php'; :

// Nếu đăng nhập
if ($user)
{

}
// Nếu không đăng nhập
else
{
	// Hiển thị form đăng nhập
	require_once 'templates/signin.php';
}
Bây giờ các bạn chạy thử, nếu kết quả như thế này thì ok rồi.

php trang tin tuc tao chuc nang dang nhap admin ket qua template dang nhap jpg

2. Viết chức năng đăng nhập

Tạo table 

Mình sẽ tạo table accounts để chứa các thông tin của tài khoản quản trị viên, tác giả. 

php trang tin tuc tao chuc nang dang nhap admin table accounts 1 jpg

Các bạn copy dòng lệnh SQL dưới đây rồi chạy :

CREATE TABLE `accounts` (
  `id_acc` int(11) NOT NULL,
  `username` varchar(32) CHARACTER SET utf8 NOT NULL,
  `password` varchar(32) CHARACTER SET utf8 NOT NULL,
  `display_name` varchar(50) CHARACTER SET utf8 NOT NULL,
  `email` text CHARACTER SET utf8 NOT NULL,
  `position` int(11) NOT NULL,
  `status` int(11) NOT NULL,
  `date_created` datetime NOT NULL,
  `facebook` text CHARACTER SET utf8 NOT NULL,
  `google` text CHARACTER SET utf8 NOT NULL,
  `twitter` text CHARACTER SET utf8 NOT NULL,
  `phone` int(11) NOT NULL,
  `description` longtext CHARACTER SET utf8 NOT NULL,
  `url_avatar` text CHARACTER SET utf8 NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
ALTER TABLE `accounts`
  ADD PRIMARY KEY (`id_acc`);
ALTER TABLE `accounts`
  MODIFY `id_acc` int(11) NOT NULL AUTO_INCREMENT;
Mình sẽ nói về 2 field positionstatus :

  • postion : cấp bậc của tài khoản
    • 0 = Tác giả
    • 1 = Quản trị viên
  • status : trạng thái của tài khoản
    • 0 = Hoạt động
    • 1 = Khoá

Viết Ajax gửi dữ liệu

Đầu tiên các bạn vào đường dẫn thư mục admin/js, tạo cho mình file form.js. File này sẽ chứa các hàm gửi dữ liệu form thông qua Ajax đến các file PHP để xử lý. Các bạn copy đoạn code sau và paste vào file :

$_DOMAIN = 'http://localhost/newspage/admin/';

// Đăng nhập
$('#formSignin button').on('click', function() {
	$this = $('#formSignin button');
	$this.html('Đang tải ...');

	// Gán các giá trị trong các biến
	$user_signin = $('#formSignin #user_signin').val();
	$pass_signin = $('#formSignin #pass_signin').val();

	// Nếu các giá trị rỗng
	if ($user_signin == '' || $pass_signin == '')
	{
		$('#formSignin .alert').removeClass('hidden');
		$('#formSignin .alert').html('Vui lòng điền đầy đủ thông tin.');
		$this.html('Đăng nhập');
	}
	// Ngược lại
	else
	{
		$.ajax({
			url : $_DOMAIN + 'signin.php',
			type : 'POST',
			data : {
				user_signin : $user_signin,
				pass_signin : $pass_signin
			}, success : function(data) {
				$('#formSignin .alert').removeClass('hidden');
				$('#formSignin .alert').html(data);
				$this.html('Đăng nhập');
			}, error : function() {
				$('#formSignin .alert').removeClass('hidden');
				$('#formSignin .alert').html('Không thể đăng nhập vào lúc này, hãy thử lại sau.');
				$this.html('Đăng nhập');
			}
		});
	}
});	
Sau đó, các bạn mở lại file admin/includes/footer.php lên và thêm dòng code này dưới dòng <script src="<?php echo $_DOMAIN; ?>js/jquery.form.min.js"></script> :

<!-- Liên kết thư viện hàm xử lý form -->
<script src="<?php echo $_DOMAIN; ?>js/form.js"></script>

Viết PHP xử lý

Các bạn tạo file signin.php cùng cấp với file admin/index.php và copy nội dung này vào :

<?php

// Kết nối database và thông tin chung
require_once 'core/init.php';

// Nếu có tồn tại phương thức post
if (isset($_POST['user_signin']) && isset($_POST['pass_signin']))
{
	// Xử lý các giá trị 
	$user_signin = trim(htmlspecialchars(addslashes($_POST['user_signin'])));
	$pass_signin = trim(htmlspecialchars(addslashes($_POST['pass_signin'])));

	// Các biến xử lý thông báo
	$show_alert = '<script>$("#formSignin .alert").removeClass("hidden");</script>';
	$hide_alert = '<script>$("#formSignin .alert").addClass("hidden");</script>';
	$success = '<script>$("#formSignin .alert").attr("class", "alert alert-success");</script>';

	// Nếu giá trị rỗng
	if ($user_signin == '' || $pass_signin == '')
	{
		echo $show_alert.'Vui lòng điền đầy đủ thông tin.';
	}
	// Ngược lại
	else
	{
		$sql_check_user_exist = "SELECT username FROM accounts WHERE username = '$user_signin'";
		// Nếu tồn tại username
		if ($db->num_rows($sql_check_user_exist))
		{
			$pass_signin = md5($pass_signin);
			$sql_check_signin = "SELECT username, password FROM accounts WHERE username = '$user_signin' AND password = '$pass_signin'";
			if ($db->num_rows($sql_check_signin))
			{
				$sql_check_stt = "SELECT username, password, status FROM accounts WHERE username = '$user_signin' AND password = '$pass_signin' AND status = '0'";
				// Nếu username và password khớp và tài khoản không bị khoá (status = 0)
				if ($db->num_rows($sql_check_stt))
				{
					// Lưu session
					$session->send($user_signin);
					$db->close(); // Giải phóng
					
					echo $show_alert.$success.'Đăng nhập thành công.';
					new Redirect($_DOMAIN); // Trở về trang index
				}
				else
				{
					echo $show_alert.'Tài khoản của bạn đã bị khoá, vui lòng liên hệ quản trị viện để biết thêm thông tin chi tiết.';
				}
			}
			else
			{
				echo $show_alert.'Mật khẩu không chính xác.';
			}
		}
		// Ngược lại không tồn tại username
		else
		{
			echo $show_alert.'Tên đăng nhập không tồn tại.';
		}
	}
}
// Ngược lại không tồn tại phương thức post
else
{
	new Redirect($_DOMAIN); // Trở về trang index
}

?>

Ok thế là xong rồi đấy, giờ chỉ cần insert dữ liệu vào table accounts là có thể test đăng nhập. Nhưng mình lưu ý khi insert password, bạn phải chuyển về dạng md5 nhé (các bạn có thể mã hoá tại đây) và position là 1, status là 0.

Sau khi đăng nhập xong, nếu ra kết quả như hình là thành công :

php trang tin tuc tao chuc nang dang nhap admin ket qua dang nhap jpg

3. Lấy dữ liệu tài khoản

Sau khi đã đăng nhập, chúng ta sẽ lấy tất cả dữ liệu của tài khoản thông qua username. Các bạn mở file admin/core/init.php và chèn tiếp tục đoạn code này :

// Nếu đăng nhập
if ($user)
{
	// Lấy dữ liệu tài khoản
	$sql_get_data_user = "SELECT * FROM accounts WHERE username = '$user'";
	if ($db->num_rows($sql_get_data_user))
	{
		$data_user = $db->fetch_assoc($sql_get_data_user, 1);
	}
}

4. Chức năng đăng xuất

Tạo file tên signout.php cùng cấp với file admin/index.php và dán nội dung này vào :

<?php

// Require database & thông tin chung
require_once 'core/init.php';

// Xoá session
$session->destroy();
new Redirect($_DOMAIN); // Trở về trang index

?>

5. Lời kết

Qua bài này chúng ta đã tạo được table accounts và xây dựng chức năng đăng nhập rồi. Trong bài tiếp theo, mình sẽ hướng dẫn các bạn xây dựng sidebar, content và phân trang admin. Cảm ơn các bạn đã theo dõi và chúc các bạn thành công !

Cùng chuyên mục:

Hàm key_exists() trong PHP

Hàm key_exists() trong PHP

Cách sử dụng key_exists() trong PHP

Hàm mysqli_fetch_row() trong PHP

Hàm mysqli_fetch_row() trong PHP

Cách sử dụng mysqli_fetch_row() trong PHP

Hàm end() trong PHP

Hàm end() trong PHP

Cách sử dụng end() trong PHP

Hàm mysqli_field_count() trong PHP

Hàm mysqli_field_count() trong PHP

Cách sử dụng mysqli_field_count() trong PHP

Hàm count() trong PHP

Hàm count() trong PHP

Cách sử dụng count() trong PHP

Hàm mysqli_field_seek() trong PHP

Hàm mysqli_field_seek() trong PHP

Cách sử dụng mysqli_field_seek() trong PHP

Hàm compact() trong PHP

Hàm compact() trong PHP

Cách sử dụng compact() trong PHP

Hàm mysqli_field_tell() trong PHP

Hàm mysqli_field_tell() trong PHP

Cách sử dụng mysqli_field_tell() trong PHP

Hàm array_values() trong PHP

Hàm array_values() trong PHP

Cách sử dụng array_values() trong PHP

Hàm mysqli_free_result() trong PHP

Hàm mysqli_free_result() trong PHP

Cách sử dụng mysqli_free_result() trong PHP

Hàm array_unshift() trong PHP

Hàm array_unshift() trong PHP

Cách sử dụng array_unshift() trong PHP

Hàm mysqli_get_charset() trong PHP

Hàm mysqli_get_charset() trong PHP

Cách sử dụng mysqli_get_charset() trong PHP

Hàm array_shift() trong PHP

Hàm array_shift() trong PHP

Cách sử dụng array_shift() trong PHP

Hàm mysqli_get_client_stats() trong PHP

Hàm mysqli_get_client_stats() trong PHP

Cách sử dụng mysqli_get_client_stats() trong PHP

Hàm array_unique() trong PHP

Hàm array_unique() trong PHP

Cách sử dụng array_unique() trong PHP

Hàm mysqli_get_client_version() trong PHP

Hàm mysqli_get_client_version() trong PHP

Cách sử dụng mysqli_get_client_version() trong PHP

Hàm array_uintesect() trong PHP

Hàm array_uintesect() trong PHP

Cách sử dụng array_uintesect() trong PHP

Hàm mysqli_get_connection_stats() trong PHP

Hàm mysqli_get_connection_stats() trong PHP

Cách sử dụng mysqli_get_connection_stats() trong PHP

Hàm array_sum() trong PHP

Hàm array_sum() trong PHP

Cách sử dụng array_sum() trong PHP

Hàm mysqli_get_host_info() trong PHP

Hàm mysqli_get_host_info() trong PHP

Cách sử dụng mysqli_get_host_info() trong PHP

Top