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
và$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, ...).
- Nếu
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 !