06/04/2021, 14:45

PHP Note Online - Thư viện xử lý database và session - Ứng dụng Note và Chat với PHP

Xin chào tất cả các bạn, chào mừng các bạn đã quay trở lại với series hướng dẫn xây dựng ứng dụng ghi chú online bằng PHP OOP và Ajax. Ở trong bài trước, chúng ta đã xây dựng xong database và cấu trúc folder của ứng dụng rồi. Trong bài này, mình sẽ hướng dẫn các bạn viết class xử lý database và ...

Xin chào tất cả các bạn, chào mừng các bạn đã quay trở lại với series hướng dẫn xây dựng ứng dụng ghi chú online bằng PHP OOP và Ajax. Ở trong bài trước, chúng ta đã xây dựng xong database và cấu trúc folder của ứng dụng rồi. Trong bài này, mình sẽ hướng dẫn các bạn viết class xử lý database và session cho ứng dụng này. Nếu đã học qua lập trình PHP hướng đối tượng thì các bạn đã nắm rõ class là gì, cách sử dụng nó, ... nên cái này sẽ không còn mới mẻ nữa. OK, chúng ta bắt tay vào làm nhé !

1. Class xử lý database

Đầu tiên các bạn mở file classes/DB.php và copy đoạn code này vào :

 

<?php

class DB
{
	// Khai báo các biến dưới dạng private
	private $hostname = 'localhost',
			$username = 'root',
			$password = '',
			$dbname = 'inote';

	// Khai báo các biến kết nối toàn cục
	public $cn = NULL;
	public $rs = NULL;

	// Hàm kết nối
	public function connect()
	{
		// Kết nối
		$this->cn = mysqli_connect($this->hostname, $this->username, $this->password, $this->dbname);
	}

	// Hàm ngắt kết nối
	public function close(){
		// Nếu đã kết nối
	    if ($this->cn){
	    	// Ngắt kết nối
	        mysqli_close($this->cn);
	    }
	}

	// Hàm truy vấn
	public function query($sql = null) 
	{		
		// Nếu đã kết nối
	    if ($this->cn){
	    	// Truy vấn
			mysqli_query($this->cn, $sql);
	    }
	}

	// Hàm đếm hàng
	public function num_rows($sql = null) 
	{
		// Nếu đã kết nối
		if ($this->cn)
		{
			$query = mysqli_query($this->cn, $sql);
			$row = mysqli_num_rows($query);
			return $row;
		}
	}

	// Hàm lấy dữ liệu
	public function fetch_assoc($sql = null, $type)
	{
		// Nếu đã kết nối
		if ($this->cn)
		{
			// Thực thi truy vấn
			$query = mysqli_query($this->cn, $sql);
			// Nếu tham số type = 0
			if ($type == 0)
			{
				while ($row = mysqli_fetch_assoc($query))
				{
					$data[] = $row;
				}
				return $data;
			}
			// Nếu tham số type = 1
			else if ($type == 1)
			{
				$data = mysqli_fetch_assoc($query);
				return $data;
			}		
		}
	}

	// Hàm xử lý chuỗi dữ liệu truy vấn
	public function real_escape_string($string) {
		// Nếu đã kết nối
		if ($this->cn)
		{
			// Xử lý chuỗi dữ liệu truy vấn
			$string = mysqli_real_escape_string($this->cn, $string);
		}
		// Ngược lại chưa kết nối
		else
		{
			$string = $string;
		}
		return $string;
	}

	// Hàm lấy ID vừa insert
	public function insert_id() {
		// Nếu đã kết nối
		if ($this->cn)
		{
			// Lấy ID vừa insert
			return mysqli_insert_id($this->cn);
		}
	}
}

?>

Các hàm trên đã quá quen thuộc rồi nên mình chỉ giải thích về 2 vấn đề :

 

  • Hàm lấy ID vừa insert : Thông thường khi thiết kế CSDL cho các hệ thống website thì khóa chính ta hay sử dụng tăng tự động (auto_increment), vì vậy lúc thêm dữ liệu ta không cần phải giá trị ID khóa chính. Như vậy ta không thể biết được khóa chính của record vừa insert là bao nhiêu nên chúng ta sẽ dùng hàm này để trả ID mình vừa insert. Nếu còn chưa hiển rõ các bạn có thể tham khảo bài viết Lấy ID vừa insert bằng PHP nhé !
  • Hàm lấy dữ liệu : Tuỳ vào theo các code của mỗi người mà có từng thư viện xử lý database khác nhau. Trong hàm lấy dữ liệu của mình sẽ truyền vào 2 tham số là $sql$type. Về $sql thì mình không bàn nữa, còn cái $type nó sẽ xử lý nhánh.
    • Nếu $type = 0 thì nó dùng vòng lặp while để in dữ liệu (thường dành cho dữ liệu có 2 row trở lên như danh sách ghi chú, ...).
    • Nếu $type = 1 thì nó in dữ liệu bình thường (thường dành cho dữ liệu có 1 row như thông tin tài khoản, ...).

2. Class xử lý session

Tiếp tục chúng ta sẽ viết class xử lý session, các bạn mở file classes/Session.php lên và paste đoạn code sau :

 

<?php

class Session {
	// Hàm gửi dữ liệu
	public function send($user) {
		$_SESSION['user'] = $user;
	}

	// Hàm bắt đầu lưu session
	public function start() {
		session_start();
	}

	// Hàm lấy dữ liệu
	public function get() {
		// Nếu có tồn tại session đang lưu
		if (isset($_SESSION['user']))
		{
			// Gán $user với session
			$user = $_SESSION['user'];
		}
		// Ngược lại không tồn tại session
		else
		{
			$user = '';
		}
		return $user;
	}

	// Hàm xoá session
	public function destroy() {
		session_destroy();
	}
}

?>

Trong đó mình đã giải thích rất kỹ rồi và nó đã quá quen thuộc nên mình sẽ không nói gì thêm nữa nhé !

 

Thế là chúng ta đã viết xong các thư viện để xử lý database và session rồi đấy :)

3. Include và sử dụng các class

Các bạn mở file core/init.php lên rồi copy đoạn code này vào :

 

<?php

// Include các thư viện
require_once 'classes/DB.php';
require_once 'classes/Session.php';

// Khởi tạo object DB
$db = new DB();
// Kết nối database
$db->connect();

// Khởi tạo object Session
$session = new Session();
// Bắt đầu session
$session->start();
// Lấy dữ liệu session
$user = $session->get();
// Múi giờ chung
date_default_timezone_set('Asia/Ho_Chi_Minh'); 
$date_current = '';
$date_current = date("Y-m-d H:i:sa");

// Nếu tồn tại $user
if ($user)
{
	// Lệnh truy vấn thông tin user
	$sql_get_data_user = "SELECT * FROM users WHERE username = '$user'";

	// Lấy thông tin user
	$data_user = $db->fetch_assoc($sql_get_data_user, 1);
}

?>

Mình đã chú thích ở trong code rồi nên mình sẽ không giải thích thêm nhé vì nó quá quen thuộc đối với những bạn nắm được cơ bản PHP OOP rồi. Mình giải thích thêm về cái kiểm tra sự tồn tại của $user :

 

  • Nếu tồn tại $user => tồn tại session => đã đăng nhập hoặc vừa đăng ký xong.
  • Ngược lại không tồn tại $user => không tồn tại session => chưa đăng nhập.

OK, thế là chúng ta đã include và sử dụng được các class.

4. Lời kết

Bài này cũng khá đơn giản, chủ yếu là bạn phải nắm được PHP OOP cơ bản mới có thể hiểu được. Qua bài sau chúng ta sẽ xây dựng layout cho ứng dụng. Hẹn gặp lại và chúc các bạn thành công !

Trịnh Tiến Mạnh

27 chủ đề

6824 bài viết

0