PHP, MYSQL, AJAX - фильтровать множественные выборки - PullRequest
1 голос
/ 24 апреля 2020

Есть множество вопросов по этому поводу, но ни один из них не имеет отношения к опциям выбора.

Мой вопрос: у меня есть 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?

Я ценю всю помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...