Hướng dẫn này là phần tiếp theo của loạt bài hướng dẫn phân trang OOP, tôi khuyên bạn nên làm theo hướng dẫn trước để thực hiện tốt hướng dẫn này. Chúng tôi cũng sẽ tạo một trang giữa cho số trang trông đẹp hơn
Tạo hệ thống tìm kiếm động
trong hướng dẫn trước, Chúng tôi đã tạo một hệ thống tìm kiếm phân trang, nhưng hệ thống tìm kiếm mà chúng tôi tạo không động vì chúng tôi đang xem trực tiếp bảng 'tên người dùng'. nhưng trong cơ sở dữ liệu chúng tôi có một số cột
TênLoạiĐộ dài/giá trịIndeksidINT11Tên người dùng chínhVarchar100--cityVarchar100--emailVarchar100--Vì vậy, ý tưởng chúng tôi sẽ làm cho tham số truy vấn tìm kiếm ?search
trở nên động, tất nhiên, chúng tôi sẽ thực hiện các thay đổi đối với các chức năng mà chúng tôi đã tạo trước đó
- Tạo một biến mới để lưu tên cột
Bởi vì chúng tôi sẽ làm cho tên cột trở nên động, chúng tôi phải lưu trữ nó trong một biến. chúng ta sẽ tạo một biến có tên là$col
Thí dụprivate $db, $table, $total_records, $limit = 5, $col;
- Tạo chức năng
0public function __construct[$table]{ $this->table = $table; $this->db = new PDO["mysql:host=localhost; dbname=faker", "root", "root"]; if[$this->is_search[]] $this->set_search_col[]; $this->set_total_records[]; }
Trong hàm này, chúng ta sẽ đặt giá trị của biến$col
. Giá trị được lấy từ tham số truy vấn
2 trong URL của trình duyệtpublic function __construct[$table]{ $this->table = $table; $this->db = new PDO["mysql:host=localhost; dbname=faker", "root", "root"]; if[$this->is_search[]] $this->set_search_col[]; $this->set_total_records[]; }
Thí dụ
public function set_search_col[]{
$this->col = $_GET['col'];
}
- để truy xuất giá trị tham số truy vấn
2 chúng ta có thể sử dụngpublic function __construct[$table]{ $this->table = $table; $this->db = new PDO["mysql:host=localhost; dbname=faker", "root", "root"]; if[$this->is_search[]] $this->set_search_col[]; $this->set_total_records[]; }
4. Chìa khóa là col và Chúng ta có thể truy cập các biến bên trong hàm bằngpublic function __construct[$table]{ $this->table = $table; $this->db = new PDO["mysql:host=localhost; dbname=faker", "root", "root"]; if[$this->is_search[]] $this->set_search_col[]; $this->set_total_records[]; }
5public function __construct[$table]{ $this->table = $table; $this->db = new PDO["mysql:host=localhost; dbname=faker", "root", "root"]; if[$this->is_search[]] $this->set_search_col[]; $this->set_total_records[]; }
- Chạy hàm
0 trong __construct[]public function __construct[$table]{ $this->table = $table; $this->db = new PDO["mysql:host=localhost; dbname=faker", "root", "root"]; if[$this->is_search[]] $this->set_search_col[]; $this->set_total_records[]; }
Chúng ta cần chạy hàm
7 trong lần đầu tiên lớp được gọi, do đó chúng ta sẽ thực hiện hàm trong_______0_______8public function __construct[$table]{ $this->table = $table; $this->db = new PDO["mysql:host=localhost; dbname=faker", "root", "root"]; if[$this->is_search[]] $this->set_search_col[]; $this->set_total_records[]; }
Thí dụ
public function __construct[$table]{
$this->table = $table;
$this->db = new PDO["mysql:host=localhost; dbname=faker", "root", "root"];
if[$this->is_search[]] $this->set_search_col[];
$this->set_total_records[];
}
- Trước khi chạy hàm set_search_col[] chúng ta sẽ kiểm tra với
9 xem tham số truy vấnpublic function __construct[$table]{ $this->table = $table; $this->db = new PDO["mysql:host=localhost; dbname=faker", "root", "root"]; if[$this->is_search[]] $this->set_search_col[]; $this->set_total_records[]; }
?search
có tồn tại không. Chúng ta có thể biết nó thông qua hàm
1 mà chúng ta đã tạo trong hướng dẫn trướcpublic function set_total_records[]{ $query = "SELECT id FROM $this->table"; if[$this->is_search[]]{ $val = $this->is_search[]; // $query = "SELECT id FROM $this->table WHERE username LIKE '%$val%'"; $query = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%'"; } $stmt = $this->db->prepare[$query]; $stmt->execute[]; $this->total_records = $stmt->rowCount[]; }
- Nếu kết quả của tham số truy vấn
?search
tồn tại, thì kết quả là đúng và tự động chúng tôi sẽ chạy
0public function __construct[$table]{ $this->table = $table; $this->db = new PDO["mysql:host=localhost; dbname=faker", "root", "root"]; if[$this->is_search[]] $this->set_search_col[]; $this->set_total_records[]; }
lưu ý. Chúng ta phải chạy hàm
public function set_total_records[]{
$query = "SELECT id FROM $this->table";
if[$this->is_search[]]{
$val = $this->is_search[];
// $query = "SELECT id FROM $this->table WHERE username LIKE '%$val%'";
$query = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%'";
}
$stmt = $this->db->prepare[$query];
$stmt->execute[];
$this->total_records = $stmt->rowCount[];
}
4 trước khi chạy hàm public function set_total_records[]{
$query = "SELECT id FROM $this->table";
if[$this->is_search[]]{
$val = $this->is_search[];
// $query = "SELECT id FROM $this->table WHERE username LIKE '%$val%'";
$query = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%'";
}
$stmt = $this->db->prepare[$query];
$stmt->execute[];
$this->total_records = $stmt->rowCount[];
}
5, vì điều này ảnh hưởng đến số trang sẽ được hiển thị- Thay đổi truy vấn trong chức năng
Chúng ta đã tạo một hàm để gán giá trị cho biến $col, bây giờ chúng ta có thể sử dụng nó trong hàm để thay đổi động truy vấn dựa trên truy vấn tham số
6public function set_total_records[]{ $query = "SELECT id FROM $this->table"; if[$this->is_search[]]{ $val = $this->is_search[]; // $query = "SELECT id FROM $this->table WHERE username LIKE '%$val%'"; $query = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%'"; } $stmt = $this->db->prepare[$query]; $stmt->execute[]; $this->total_records = $stmt->rowCount[]; }
1. Thay đổi truy vấn trong chức năng
public function set_total_records[]{
$query = "SELECT id FROM $this->table";
if[$this->is_search[]]{
$val = $this->is_search[];
// $query = "SELECT id FROM $this->table WHERE username LIKE '%$val%'";
$query = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%'";
}
$stmt = $this->db->prepare[$query];
$stmt->execute[];
$this->total_records = $stmt->rowCount[];
}
7Thí dụ
public function set_total_records[]{
$query = "SELECT id FROM $this->table";
if[$this->is_search[]]{
$val = $this->is_search[];
// $query = "SELECT id FROM $this->table WHERE username LIKE '%$val%'";
$query = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%'";
}
$stmt = $this->db->prepare[$query];
$stmt->execute[];
$this->total_records = $stmt->rowCount[];
}
Tôi đã đưa ra cú pháp nhận xét
public function set_total_records[]{
$query = "SELECT id FROM $this->table";
if[$this->is_search[]]{
$val = $this->is_search[];
// $query = "SELECT id FROM $this->table WHERE username LIKE '%$val%'";
$query = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%'";
}
$stmt = $this->db->prepare[$query];
$stmt->execute[];
$this->total_records = $stmt->rowCount[];
}
8cho truy vấn mà chúng tôi đã thay đổi. Bây giờ chúng ta có thể sử dụng biến public function set_total_records[]{
$query = "SELECT id FROM $this->table";
if[$this->is_search[]]{
$val = $this->is_search[];
// $query = "SELECT id FROM $this->table WHERE username LIKE '%$val%'";
$query = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%'";
}
$stmt = $this->db->prepare[$query];
$stmt->execute[];
$this->total_records = $stmt->rowCount[];
}
9 để thay thế cột tên người dùng mà chúng ta mã hóa cứng trước đó2. Thay đổi truy vấn trong chức năng
public function get_data[]{
$start = 0;
if[$this->current_page[] > 1]{
$start = [$this->current_page[] * $this->limit] - $this->limit;
}
$query = "SELECT * FROM $this->table LIMIT $start, $this->limit";
if[$this->is_search[]]{
$val = $this->is_search[];
// $query = "SELECT id FROM $this->table WHERE username LIKE '%$val%' $start, $this->limit";
$query = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%' $start, $this->limit";
}
$stmt = $this->db->prepare[$query];
$stmt->execute[];
return $stmt->fetchAll[PDO::FETCH_OBJ];
}
0Thí dụ
public function get_data[]{
$start = 0;
if[$this->current_page[] > 1]{
$start = [$this->current_page[] * $this->limit] - $this->limit;
}
$query = "SELECT * FROM $this->table LIMIT $start, $this->limit";
if[$this->is_search[]]{
$val = $this->is_search[];
// $query = "SELECT id FROM $this->table WHERE username LIKE '%$val%' $start, $this->limit";
$query = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%' $start, $this->limit";
}
$stmt = $this->db->prepare[$query];
$stmt->execute[];
return $stmt->fetchAll[PDO::FETCH_OBJ];
}
Tôi đã đưa ra cú pháp nhận xét
public function set_total_records[]{
$query = "SELECT id FROM $this->table";
if[$this->is_search[]]{
$val = $this->is_search[];
// $query = "SELECT id FROM $this->table WHERE username LIKE '%$val%'";
$query = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%'";
}
$stmt = $this->db->prepare[$query];
$stmt->execute[];
$this->total_records = $stmt->rowCount[];
}
8cho truy vấn mà chúng tôi đã thay đổi. Bây giờ chúng ta có thể sử dụng biến public function set_total_records[]{
$query = "SELECT id FROM $this->table";
if[$this->is_search[]]{
$val = $this->is_search[];
// $query = "SELECT id FROM $this->table WHERE username LIKE '%$val%'";
$query = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%'";
}
$stmt = $this->db->prepare[$query];
$stmt->execute[];
$this->total_records = $stmt->rowCount[];
}
9 để thay thế cột tên người dùng mà chúng ta mã hóa cứng trước đó3. Thêm một truy vấn tham số trong hàm
public function get_data[]{
$start = 0;
if[$this->current_page[] > 1]{
$start = [$this->current_page[] * $this->limit] - $this->limit;
}
$query = "SELECT * FROM $this->table LIMIT $start, $this->limit";
if[$this->is_search[]]{
$val = $this->is_search[];
// $query = "SELECT id FROM $this->table WHERE username LIKE '%$val%' $start, $this->limit";
$query = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%' $start, $this->limit";
}
$stmt = $this->db->prepare[$query];
$stmt->execute[];
return $stmt->fetchAll[PDO::FETCH_OBJ];
}
3Chúng ta sẽ thêm một truy vấn tham số mới là
public function __construct[$table]{
$this->table = $table;
$this->db = new PDO["mysql:host=localhost; dbname=faker", "root", "root"];
if[$this->is_search[]] $this->set_search_col[];
$this->set_total_records[];
}
2, chúng ta cần thêm giá trị trả về trên hàm public function get_data[]{
$start = 0;
if[$this->current_page[] > 1]{
$start = [$this->current_page[] * $this->limit] - $this->limit;
}
$query = "SELECT * FROM $this->table LIMIT $start, $this->limit";
if[$this->is_search[]]{
$val = $this->is_search[];
// $query = "SELECT id FROM $this->table WHERE username LIKE '%$val%' $start, $this->limit";
$query = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%' $start, $this->limit";
}
$stmt = $this->db->prepare[$query];
$stmt->execute[];
return $stmt->fetchAll[PDO::FETCH_OBJ];
}
3 để số trang, liên kết next và prev tương ứng với tham số truy vấn mớiThí dụ
public function check_search[]{
if[$this->is_search[]]{
return '&search='.$this->is_search[].'&col='.$this->col;
}
return '';
}
Chúng ta có thể thêm một tham số truy vấn mới bằng cách kết hợp chuỗi
public function get_data[]{
$start = 0;
if[$this->current_page[] > 1]{
$start = [$this->current_page[] * $this->limit] - $this->limit;
}
$query = "SELECT * FROM $this->table LIMIT $start, $this->limit";
if[$this->is_search[]]{
$val = $this->is_search[];
// $query = "SELECT id FROM $this->table WHERE username LIKE '%$val%' $start, $this->limit";
$query = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%' $start, $this->limit";
}
$stmt = $this->db->prepare[$query];
$stmt->execute[];
return $stmt->fetchAll[PDO::FETCH_OBJ];
}
6 và giá trị của biến public function set_total_records[]{
$query = "SELECT id FROM $this->table";
if[$this->is_search[]]{
$val = $this->is_search[];
// $query = "SELECT id FROM $this->table WHERE username LIKE '%$val%'";
$query = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%'";
}
$stmt = $this->db->prepare[$query];
$stmt->execute[];
$this->total_records = $stmt->rowCount[];
}
9 như thế này. public function get_data[]{
$start = 0;
if[$this->current_page[] > 1]{
$start = [$this->current_page[] * $this->limit] - $this->limit;
}
$query = "SELECT * FROM $this->table LIMIT $start, $this->limit";
if[$this->is_search[]]{
$val = $this->is_search[];
// $query = "SELECT id FROM $this->table WHERE username LIKE '%$val%' $start, $this->limit";
$query = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%' $start, $this->limit";
}
$stmt = $this->db->prepare[$query];
$stmt->execute[];
return $stmt->fetchAll[PDO::FETCH_OBJ];
}
8- Kết quả
Nếu không có lỗi, chúng ta có thể thấy kết quả như thế này
Tìm kiếm qua email
Tìm kiếm dữ liệu có ký tự g trong trường email trong cơ sở dữ liệu
9public function get_data[]{ $start = 0; if[$this->current_page[] > 1]{ $start = [$this->current_page[] * $this->limit] - $this->limit; } $query = "SELECT * FROM $this->table LIMIT $start, $this->limit"; if[$this->is_search[]]{ $val = $this->is_search[]; // $query = "SELECT id FROM $this->table WHERE username LIKE '%$val%' $start, $this->limit"; $query = "SELECT id FROM $this->table WHERE $this->col LIKE '%$val%' $start, $this->limit"; } $stmt = $this->db->prepare[$query]; $stmt->execute[]; return $stmt->fetchAll[PDO::FETCH_OBJ]; }
Tìm kiếm theo thành phố
Tìm kiếm dữ liệu có ký tự g trong trường thành phố trong cơ sở dữ liệu
public function check_search[]{
if[$this->is_search[]]{
return '&search='.$this->is_search[].'&col='.$this->col;
}
return '';
}
0Tạo trang giữa
Cho đến nay hệ thống phân trang của chúng tôi hoạt động tốt. nhưng có một số trường hợp nếu dữ liệu của chúng tôi đã đạt đến 1000, chúng tôi sẽ thấy rất nhiều số trang sẽ xuất hiện tất nhiên là không tốt. vì điều đó, chúng tôi sẽ tạo trang giữa. Vì vậy, ý tưởng chúng tôi sẽ ẩn một số trang. Tôi sẽ chỉ hiển thị 2 trang tiếp theo và 2 trang trước đó từ trang hiện tại. để xử lý vấn đề đó, tôi sẽ tạo một hàm
public function check_search[]{
if[$this->is_search[]]{
return '&search='.$this->is_search[].'&col='.$this->col;
}
return '';
}
1- Tạo chức năng
2public function check_search[]{ if[$this->is_search[]]{ return '&search='.$this->is_search[].'&col='.$this->col; } return ''; }
Trong chức năng này sẽ chấp nhận các thông số trang hiện tại
3 và trong chức năng này, sẽ có hai câu lệnh mà chúng tôi sẽ kiểm trapublic function check_search[]{ if[$this->is_search[]]{ return '&search='.$this->is_search[].'&col='.$this->col; } return ''; }
Thí dụ
public function is_showable[$num]{
// The first statements
if[$this->get_pagination_number[] < 4 || $this->current_page[] == $num]
return true
// The second statements
if[
[$this->current_page[]-2] current_page[]+2] >= $num
]
return true
}
- Những tuyên bố đầu tiên
1. $this->get_pagination_number[] < 4. Bởi vì chúng tôi sẽ hiển thị 2 trang tiếp theo và 2 trang trước đó nên số lượng tối thiểu chúng tôi sẽ ẩn là 4 trang từ [2 tiếp theo + 2 trước = 4]. Chúng ta có thể lấy tổng số trang thông qua hàm
public function check_search[]{
if[$this->is_search[]]{
return '&search='.$this->is_search[].'&col='.$this->col;
}
return '';
}
42. $this->current_page[] == $num. sau đó chúng ta tạo một toán tử logic
public function check_search[]{
if[$this->is_search[]]{
return '&search='.$this->is_search[].'&col='.$this->col;
}
return '';
}
5 [hoặc] cho điều kiện thứ hai của câu lệnh này. Điều kiện này hữu ích cho trang hiện tại giống như giá trị public function check_search[]{
if[$this->is_search[]]{
return '&search='.$this->is_search[].'&col='.$this->col;
}
return '';
}
3 sẽ cho kết quả đúng. Chúng ta có thể lấy trang hiện tại thông qua hàm public function check_search[]{
if[$this->is_search[]]{
return '&search='.$this->is_search[].'&col='.$this->col;
}
return '';
}
7Ghi chú. Câu lệnh này sử dụng logic
public function check_search[]{
if[$this->is_search[]]{
return '&search='.$this->is_search[].'&col='.$this->col;
}
return '';
}
5 [hoặc], vì vậy nếu một câu đủ điều kiện thì chúng tôi sẽ trả về true. Giá trị thực chúng ta sẽ sử dụng trong một phần của giao diện người dùng để kiểm tra điều kiện nhất định- Các tuyên bố thứ hai
1. [$this->current_page[]-2] is_search[].'&col='.$this->col; } return ''; } 3
2. [$this->current_page[]+2] >= $num. Điều kiện này sẽ kiểm tra xem trang hiện tại cộng 2 kết quả có lớn hơn trang được truyền vào tham số
public function check_search[]{
if[$this->is_search[]]{
return '&search='.$this->is_search[].'&col='.$this->col;
}
return '';
}
3Ghi chú. Câu lệnh này sử dụng logic
public function is_showable[$num]{
// The first statements
if[$this->get_pagination_number[] < 4 || $this->current_page[] == $num]
return true
// The second statements
if[
[$this->current_page[]-2] current_page[]+2] >= $num
]
return true
}
1 [và], vì vậy cả hai điều kiện trong câu lệnh này phải đúng, thì kết quả của câu lệnh này là đúng. nếu một người không đủ điều kiện thì nó sẽ là sai- Sử dụng chức năng
1public function check_search[]{ if[$this->is_search[]]{ return '&search='.$this->is_search[].'&col='.$this->col; } return ''; }
Chúng ta đã hoàn thành logic của chức năng này. bây giờ chúng ta có thể sử dụng trong biến lặp $pages.
public function is_showable[$num]{
// The first statements
if[$this->get_pagination_number[] < 4 || $this->current_page[] == $num]
return true
// The second statements
if[
[$this->current_page[]-2] current_page[]+2] >= $num
]
return true
}
3Thí dụ