Bài 17: Xử lý truy vấn nhiều điều kiện với PHP - Học lập trình PHP nâng cao
Mình đã từng teamviewer với rất nhiều bạn và sửa code cho họ và mình cũng hơi chán khi nhìn những dòng code đó, tuy nhiên trước đây mình cũng từng như vậy cho nên mình thông cảm được. Chính vì vậy trong bài này mình sẽ trình bày một cách code giúp bạn quản lý tốt hơn bằng cách kết hợp mảng và câu ...
Mình đã từng teamviewer với rất nhiều bạn và sửa code cho họ và mình cũng hơi chán khi nhìn những dòng code đó, tuy nhiên trước đây mình cũng từng như vậy cho nên mình thông cảm được. Chính vì vậy trong bài này mình sẽ trình bày một cách code giúp bạn quản lý tốt hơn bằng cách kết hợp mảng và câu lệnh if else trong php.
1. Đặt vấn đề truy vấn nhiều điện kiện
Giả sử mình có một table customer với cách thông số email | fullname | phone | address
, lúc này hệ thống quản lý của mình cần có chức năng lọc những field đó để tìm khách hàng của họ. Như vậy ta phải viết câu truy vấn với điều kiện where là 10 trường hợp.
- fullname
- phone
- address
- email | fullname
- email | phone
- email | address
- fullname | phone
- fullname | address
- phone | address
- email | fullname | phone
- email | fullname | address
- fullname | phone | address
- email | fullname | phone | address
Rất phiền phức phải không nào, thông thường ta sẽ viết kiểm tra điều kiện người dùng có nhập hay không rồi thêm điều kiện where vào, bây giờ ta cũng làm như vậy thôi nhưng sử dụng mảng để nhìn đẹp hơn.
2. Xử lý truy vấn nhiều điều kiện với php
Mình sẽ thực hiện các bước như sau:
Bước 1: Lấy các tham số cần lọc
// Lấy thông tin lọc $filter = array( 'email' => isset($_GET['email']) ? mysql_escape_string($_GET['email']) : false, 'phone' => isset($_GET['email']) ? mysql_escape_string($_GET['phone']) : false, 'address' => isset($_GET['email']) ? mysql_escape_string($_GET['address']) : false, 'fullname' => isset($_GET['email']) ? mysql_escape_string($_GET['fullname']) : false );
// Biến lưu trữ lọc $where = array(); // Nếu có chọn lọc thì thêm điều kiện vào mảng if ($filter['email']){ $where[] = "email = '{$filter['email']}'"; } if ($filter['phone']){ $where[] = "phone = '{$filter['phone']}'"; } if ($filter['address']){ $where[] = "address = '{$filter['address']}'"; } if ($filter['fullname']){ $where[] = "fullname = '{$filter['fullname']}'"; }
// Câu truy vấn cuối cùng $sql = 'SELECT * FROM customer'; if ($where){ $sql .= ' WHERE '.implode(' AND ', $where); }
3. Lời kết
Bài này mình làm tiền đề để các bài sau mình hướng dẫn các bạn viết thư viện xử lý database nâng cao và chỉ gọi, truyền tham số lọc vào là có kết quả tương ứng thôi, giống như Wordpress vậy đó.