Mysql Фильтр по на нажатию на чекбокс.

Macan

Новичок
Приветствую всех! Не могу понять логику работы фильтра по нажатию на чекбокс, на пример, есть сайт по подбору шин ,помимо фильтра по размеру и т.д. , есть фильтр по сезону "лето" и "зима", то есть при включенном чекбоксе "лето", что бы не выбрал пользователь( какие-бы остальные фильтры не применялись) в итоге выводится будут только летние шины?
 

AnrDaemon

Продвинутый новичок
Просто забудьте слова "чекбокс", "кнопка", "форма", когда задаёте вопрос про PHP. Или SQL.
Ни в PHP, ни в SQL форм, чекбоксов, кнопок просто не существует.
Существуют параметры запроса. С ними вы работаете.
 

Macan

Новичок
Хорошо, пусть будут параметры запроса. Как работают параметры запроса в таком случае ? Пока фильтр работает так :

PHP:
if(isset($_POST['brend'])) {
            $brend_filter = implode("','", $_POST['brend']);
            $query = "SELECT * FROM shiny WHERE brend = '".$brend_filter."' ORDER BY weight";
        }
        if(isset($_POST['width'])) {
            $width_filter = implode("','", $_POST['width']);
            $query = "SELECT * FROM shiny WHERE width = '".$width_filter."' AND brend = '".$brend_filter."' ORDER BY weight";
        }
        if(isset($_POST['height'])) {
            $height_filter = implode("','", $_POST['height']);
            $query = "SELECT * FROM shiny WHERE height = '".$height_filter."' AND width = '".$width_filter."' AND brend = '".$brend_filter."' ORDER BY weight";
        }
        if(isset($_POST['diametr'])) {
            $diametr_filter = implode("','", $_POST['diametr']);
            $query = "SELECT * FROM shiny WHERE diametr = '".$diametr_filter."' AND height = '".$height_filter."' AND width = '".$width_filter."' AND brend = '".$brend_filter."' ORDER BY weight";
        }
   

        $statement = $db->prepare($query);
        $statement->execute();
        $result = $statement->fetchAll();
        $total_row = $statement->rowCount();
        $out = '';
        if($total_row > 0){
            foreach($result as $row) {
                $out .='
                <div class="cart ' . $row['season'] . ' ' . $row['ship'] . '">
                <img src="' . $row['image'] . '">
                <p class="brend"><b>' . $row['brend'] . '</b></p>
                <p class="name"><b>' . $row['name'] . '</b></p>
                <p class="width"><b>Ширина:  ' . $row['width'] . '</b></p>
                <p class="height"><b>Высота:  ' . $row['height'] . '</b></p>
                <p class="diametr"><b>Диаметр:  ' . $row['diametr'] . '</b></p>
                <p class="season"><b>Сезон:  ' . $row['season'] . '</b></p>
                <p class="weight"><b>Вес:  ' . $row['weight'] . '</b></p>
                </div>
                ';
            }
        }
        else {
        $out = '<h3>No Data Found</h3>';
        }
        echo $out;
 

nllabs

Новичок
1) Привет, по какому источнику изучал PHP ? (книга, курс, прочее). Предлагаю выбросить этот источник.
Там, в коде, куча SQL-инъекций, сайт будут ломать как нефиг делать.
2) Для простоты желательно разделить код получения данных от вывода HTML.
3) По поводу вопроса: есть несколько критерий фильтрации, вычисляешь те, которые заданы и применяешь к запросу примерно так:
PHP:
$where = '';
if($param1) {
   if ($where != '') $where .= " AND ";
   $where .= $param1;
}
if($param2) {
.......
}
if($param3) {
.......
}
$query = "SELECT * FROM shiny " . $where . " ORDER BY ...";
Или используешь QueryBuilder, он есть в большинстве фреймворков.
Не забывай об SQL-инъекциях. Точнее говоря - об этом нужно думать в первую очередь.

P.S. Код не проверял, хотел показать идею.
 
Сверху