首页 > 解决方案 > PHP、MYSQL、AJAX - 过滤多选

问题描述

有很多关于此的问题,但没有一个真正涉及选择选项。

我的问题:我有 4 个从数据库中提取多个值的全选。我想显示数据库信息,当用户选择每个项目时,它只显示用户选择的内容。

例如:框 1 - A(显示所有 A)框 2 - 年份(显示所有带有年份的 A,如果没有,则显示“没有与您的搜索匹配”框 3 等...

我的代码:

if(isset($_POST["action"]))
{
 $query = "
  SELECT * FROM DB";

 if(isset($_POST["producer"]))
 {
  $producer_filter = implode("','", $_POST["producer"]);
  $query .= "
   WHERE producer=('".$producer_filter."')
  ";
 }
 if(isset($_POST["size"]))
 {
  $size_filter = implode("','", $_POST["size"]);
  $query .= " OR size=('".$size_filter."')
  ";
 }
 if(isset($_POST["model"]))
 {
  $model_filter = implode("','", $_POST["model"]);
  $query .= "OR model=('".$model_filter."')";
 }
 if(isset($_POST["year"]))
 {
  $year_filter = implode("','", $_POST["year"]);
  $query .= "OR year=('".$year_filter."')";
 }

 $statement = $conn->prepare($query);
 $statement->execute();
 $result = $statement->fetchAll();
 $total_row = $statement->rowCount();
 $output = '';
 if($total_row > 0)
 {
  foreach($result as $row)
  {
   $output .= '
   <tr><td>'.$row['producer'].'</td>
   <td>'.$row['size'].'</td>
   <td>'.$row['model'].'</td>
   <td>'.$row['year'].'</td>
   <td>'.$row['salesman'].'</td>
   <td>'.$row['country'].'</td></tr>

   ';
  }
 }
 else
 {
  $output = 'Please User Filters to Search for Parts';
 }
 echo $output;
}

然后是我的 Jquery:

$(document).ready(function() {

        filter_data();


        function filter_data() {

            const action = 'fetch_data';
            let producer = get_filter('producer');
            let size = get_filter('size')
            let model = get_filter('model')
            let year = get_filter('year')

            $.ajax({
                url: "search.php",
                method: "POST",
                data: {
                    action: action,
                    producer: producer,
                    size: size,
                    model: model,
                    year: year
                },

                success: function(data) {
                    $('.prod').html(data);
                },
            });
        }

        function get_filter(class_name) {
            var filter = [];
            $('.' + class_name).each(function() {
                filterData = $(this).val();
                filter.push(filterData)

            });
            console.log(filter)
            return filter;
        }

        $('.form-control').change(function() {
            filter_data();
        });

    });

这可行,但是,无论它是否与我的过滤器匹配,它都会显示所有内容。有什么我可以在 Jquery 中添加的吗?

我感谢所有的帮助。

标签: phpjquery

解决方案


推荐阅读