Hướng dẫn multiple search filter in php - nhiều bộ lọc tìm kiếm trong php

Tôi đang cố gắng triển khai các bộ lọc trong PHP và MySQL để tìm kiếm bản ghi trong cơ sở dữ liệu .... các bộ lọc sẽ giống như nếu trong số 6 bộ lọc chỉ có hai bộ truy vấn được chọn sẽ thực hiện "và" Hoạt động cho hai dữ liệu này và tìm nạp dữ liệu từ cơ sở dữ liệu và nếu ba lần sau đó Nó sẽ thực hiện "và" Hoạt động cho ba bộ lọc này ..... Một cách để thực hiện là kiểm tra từng bộ lọc như thế nào.

if (isset($_GET['name'] && isset($_GET['city'])) { 
    // perform AND for these two
} elseif(isset($_GET['name'] && (isset($_GET['age'])) {
    // perform AND for these three
}

// and so on ...

Nhưng vấn đề là nếu tôi có 6 bộ lọc thì tôi phải tạo 64 kết hợp cho nó ... Tôi nghĩ về điều đó có giải pháp thay thế nào tồn tại cho nó không?

Hướng dẫn multiple search filter in php - nhiều bộ lọc tìm kiếm trong php

miken32

40.6K16 Huy hiệu vàng100 Huy hiệu bạc142 Huy hiệu đồng16 gold badges100 silver badges142 bronze badges

hỏi ngày 9 tháng 2 năm 2019 lúc 13:11Feb 9, 2019 at 13:11

0

Điều này có thể hoạt động, giả sử rằng các khóa

$query = "SELECT * FROM table";

$filtered_get = array_filter($_GET); // removes empty values from $_GET

if (count($filtered_get)) { // not empty
    $query .= " WHERE";

    $keynames = array_keys($filtered_get); // make array of key names from $filtered_get

    foreach($filtered_get as $key => $value)
    {
       $query .= " $keynames[$key] = '$value'";  // $filtered_get keyname = $filtered_get['keyname'] value
       if (count($filtered_get) > 1 && (count($filtered_get) > $key)) { // more than one search filter, and not the last
          $query .= " AND";
       }
    }
}
$query .= ";"
0 của bạn khớp các cột trong bảng của bạn:

$query = "SELECT * FROM table";

$filtered_get = array_filter($_GET); // removes empty values from $_GET

if (count($filtered_get)) { // not empty
    $query .= " WHERE";

    $keynames = array_keys($filtered_get); // make array of key names from $filtered_get

    foreach($filtered_get as $key => $value)
    {
       $query .= " $keynames[$key] = '$value'";  // $filtered_get keyname = $filtered_get['keyname'] value
       if (count($filtered_get) > 1 && (count($filtered_get) > $key)) { // more than one search filter, and not the last
          $query .= " AND";
       }
    }
}
$query .= ";"

$query = "SELECT * FROM table";

$filtered_get = array_filter($_GET); // removes empty values from $_GET

if (count($filtered_get)) { // not empty
    $query .= " WHERE";

    $keynames = array_keys($filtered_get); // make array of key names from $filtered_get

    foreach($filtered_get as $key => $value)
    {
       $query .= " $keynames[$key] = '$value'";  // $filtered_get keyname = $filtered_get['keyname'] value
       if (count($filtered_get) > 1 && (count($filtered_get) > $key)) { // more than one search filter, and not the last
          $query .= " AND";
       }
    }
}
$query .= ";"
1

Tôi nghĩ rằng điều này có thể hoạt động, mặc dù mẫu mã này không bao gồm vệ sinh chống lại SQL, vì vậy có lẽ bạn nên thêm một cái gì đó để chà

Đã cập nhật: Đã thêm

$query = "SELECT * FROM table";

$filtered_get = array_filter($_GET); // removes empty values from $_GET

if (count($filtered_get)) { // not empty
    $query .= " WHERE";

    $keynames = array_keys($filtered_get); // make array of key names from $filtered_get

    foreach($filtered_get as $key => $value)
    {
       $query .= " $keynames[$key] = '$value'";  // $filtered_get keyname = $filtered_get['keyname'] value
       if (count($filtered_get) > 1 && (count($filtered_get) > $key)) { // more than one search filter, and not the last
          $query .= " AND";
       }
    }
}
$query .= ";"
2 để lọc ra bất kỳ trường trống nào từ mảng
$query = "SELECT * FROM table";

$filtered_get = array_filter($_GET); // removes empty values from $_GET

if (count($filtered_get)) { // not empty
    $query .= " WHERE";

    $keynames = array_keys($filtered_get); // make array of key names from $filtered_get

    foreach($filtered_get as $key => $value)
    {
       $query .= " $keynames[$key] = '$value'";  // $filtered_get keyname = $filtered_get['keyname'] value
       if (count($filtered_get) > 1 && (count($filtered_get) > $key)) { // more than one search filter, and not the last
          $query .= " AND";
       }
    }
}
$query .= ";"
0
: added
$query = "SELECT * FROM table";

$filtered_get = array_filter($_GET); // removes empty values from $_GET

if (count($filtered_get)) { // not empty
    $query .= " WHERE";

    $keynames = array_keys($filtered_get); // make array of key names from $filtered_get

    foreach($filtered_get as $key => $value)
    {
       $query .= " $keynames[$key] = '$value'";  // $filtered_get keyname = $filtered_get['keyname'] value
       if (count($filtered_get) > 1 && (count($filtered_get) > $key)) { // more than one search filter, and not the last
          $query .= " AND";
       }
    }
}
$query .= ";"
2 to filter out any empty fields from
$query = "SELECT * FROM table";

$filtered_get = array_filter($_GET); // removes empty values from $_GET

if (count($filtered_get)) { // not empty
    $query .= " WHERE";

    $keynames = array_keys($filtered_get); // make array of key names from $filtered_get

    foreach($filtered_get as $key => $value)
    {
       $query .= " $keynames[$key] = '$value'";  // $filtered_get keyname = $filtered_get['keyname'] value
       if (count($filtered_get) > 1 && (count($filtered_get) > $key)) { // more than one search filter, and not the last
          $query .= " AND";
       }
    }
}
$query .= ";"
0 array

Đã trả lời ngày 9 tháng 2 năm 2019 lúc 13:56Feb 9, 2019 at 13:56

Tshimkustshimkustshimkus

1.2232 huy hiệu vàng17 Huy hiệu bạc23 Huy hiệu đồng2 gold badges17 silver badges23 bronze badges

5

single if condition to check value is empty or not.for non-empty then mysql query is two between 'AND' operation.
$query = 'select * from info';
$where = ' Where';
$and = 'id = 1';
if(!empty($_GET['name'])){
  $and .= ' AND name="test"';
}
if(!empty($_GET['city'])){
  $and .= ' AND city="test"';
}
$q = $query.''.$where.''.$and;
make like this query is 'select & from info where id=1 AND name="test" AND city="test"';

Đã trả lời ngày 9 tháng 2 năm 2019 lúc 13:35Feb 9, 2019 at 13:35

Hướng dẫn multiple search filter in php - nhiều bộ lọc tìm kiếm trong php

0

Bạn có thể sử dụng tiền tố cho các phần tử biểu mẫu, như bộ lọc-, vì vậy các mục sẽ trông giống như tuổi lọc, tên lọc, v.v. Bây giờ, hãy giả sử bạn có một chức năng như

function buildFilters($input, $delimiter) {
    foreach ($input as $key => $value) {
        $filters = array();
        $filters[]="1=1";//default filter
        if (strpos($key, $prefix) === 0) {
            //add the filter to $filters via $filters[]=yourvalue
        }
    }
    return implode($delimiter, $filters);
}

Và sau đó bạn có thể gọi nó như

$myFilters = buildFilters($_POST, " AND ");

Đã trả lời ngày 9 tháng 2 năm 2019 lúc 16:27Feb 9, 2019 at 16:27

Hướng dẫn multiple search filter in php - nhiều bộ lọc tìm kiếm trong php

Lajos Arpadlajos ArpadLajos Arpad

57.8K32 Huy hiệu vàng95 Huy hiệu bạc166 Huy hiệu Đồng32 gold badges95 silver badges166 bronze badges

3

Tôi đã thử sử dụng câu trả lời từ @tshimkus. Có thể đó là cách tôi có các mảng được thiết lập hoặc một cái gì đó nhưng có một vài vấn đề tôi gặp phải trước khi làm cho nó hoạt động.

đường thẳng này:

$query .= " $keynames[$key] = '$value'";

Đối với tôi cần phải là:

$query .= " $key = '$value'";

Tôi cũng không nhận được séc (hiển thị bên dưới) cho mục cuối cùng hoạt động.

if (count($filtered_get) > 1 && (count($filtered_get) > $key)) { // more than one search filter, and not the last

Thay vào đó, kết thúc bằng cách sử dụng đếm cùng với điều này:

if($i!==$len){

Đã trả lời ngày 13 tháng 3 năm 2019 lúc 21:04Mar 13, 2019 at 21:04

0

$whereClause = '  ';
  
    if ( !empty($_POST['gender']) || !empty($_POST['hobby']) || !empty($_POST['search_filter']) ) {
    
    $whereClause .= ' WHERE ';
    if ( !empty($_POST['gender']) && !empty($_POST['hobby']) && !empty($_POST['search_filter']) ) {
        $whereClause .= ' gender = "'.$_POST['gender'].'" AND gender = "'.$_POST['gender'].'" AND search_filter LIKE "%'.$_POST['search_filter'].'%" ';

    } else {

        if ( !empty($_POST['gender']) && $_POST['gender'] != "" && empty($_POST['hobby']) && empty($_POST['search_filter']) ) {
            $whereClause .= ' gender = "'.$_POST['gender'].'"  ';          
        }
        else if ( (!empty($_POST['gender']) && $_POST['gender'] != "") &&  (!empty($_POST['hobby']) || !empty($_POST['search_filter']))) {
            $whereClause .= ' gender = "'.$_POST['gender'].'"  '; 
            $whereClause .= ' AND ';
        }
        
        if ( !empty($_POST['hobby']) && $_POST['hobby'] != "" && empty($_POST['gender']) && empty($_POST['name'])){
            $whereClause .= ' hobby = "'.$_POST['hobby'].'"  ';           
        }
        else if ( (!empty($_POST['hobby']) && $_POST['hobby'] != "") &&  (!empty($_POST['gender']) || !empty($_POST['search_filter']))) {
            $whereClause .= ' hobby = "'.$_POST['hobby'].'"  '; 
            $whereClause .= ' AND ';
        } 
        
        if ( !empty($_POST['search_filter'])) {
            $whereClause .= ' search_filter LIKE "%'.$_POST['search_filter'].'%"  ';       
        }    
    }

}

Đã trả lời ngày 6 tháng 10 lúc 8:06Oct 6 at 8:06

Hướng dẫn multiple search filter in php - nhiều bộ lọc tìm kiếm trong php

Làm cách nào để tạo tìm kiếm cho nhiều tùy chọn tìm kiếm trong PHP?

Biểu mẫu tìm kiếm nhiều tùy chọn.Bạn có thể nhấp vào đây https://www.makesenseproperies.com/ để truy cập trang để xem biểu mẫu tiêu chí tìm kiếm nhiều như thế nào và cũng kiểm tra cách thức hoạt động ..
Nhiều tùy chọn tìm kiếm xử lý mẫu.....
Nhận bài đăng mẫu.....
Tuyên bố MySQL chính.....
Mổ xẻ câu lệnh MySQL.....
Conclusion..

Làm thế nào nhận được giá trị từ thả xuống trong cơ sở dữ liệu trong PHP?

PHP $ select = mảng ('php', 'asp');echo 'Vui lòng chọn tùy chọn';foreach ($ lựa chọn là $ selection) {$ chọn = ($ tùy chọn == $ lựa chọn)?"đã chọn" : "";echo '

Làm thế nào tìm nạp dữ liệu từ cơ sở dữ liệu trong PHP và hiển thị trong tùy chọn Chọn?

Lấy hoặc tìm nạp dữ liệu từ cơ sở dữ liệu trong PHP..
Chọn Cột_Name (S) từ Table_Name ..
$ query = mysql_query ("Chọn * từ TableName", $ Connection) ;.
$ Kết nối = mysql_connect ("localhost", "root", "") ;.
$ db = mysql_select_db ("công ty", $ kết nối) ;.
$ query = mysql_query ("Chọn * từ nhân viên", $ Connection) ;.