@svilkov87

Как настроить выборку товаров по фильтру?

Добрый день!
Есть фильтр на сайте, который должен должен фильтровать по параметрам: "размер" и "бренд":
64e8e910d8c445249daf1fbbe5e3ef1d.jpg

Табличка в БД, по которой происходит выборка:
a2b323ab66c74d77a10d715d468f05b0.jpg

Сама выборка:
//выбираем товар
$st = $pdo->query('SELECT * FROM `brick`');
$oblBricks = $st->fetchAll();

//рез-т получаем в тегах select, option
<form action="" method="post">
                                <p class="lable">размер</p>
                                <select name="obl_size">
                                    <option value="all">все</option>
                                    <?php foreach ($oblBricks as $item): ?>
                                    <option value="<?php echo $item['sz']; ?>"><?php echo $item['sz']; ?></option>
                                    <?php endforeach; ?>
                                </select>
                                <p class="lable">производитель</p>
                                <select name="obl_brand">
                                    <option value="all">все</option>
                                    <?php foreach ($oblBricks as $item): ?>
                                        <option value="<?php echo $item['brand']; ?>"><?php echo $item['brand']; ?></option>
                                    <?php endforeach; ?>
                                </select>
                        <input type="submit" value="go" name="go_filter">
                    </form>


Далее применяется сам фильтр:

if(isset ($_POST['go_filter'])){
    $size = $_POST['obl_size'];
    $brand = $_POST['obl_brand'];
    $stm = $pdo->prepare('SELECT * FROM `brick` WHERE sz=:sz AND brand=:brand ');
    $stm->bindParam(':sz', $size, PDO::PARAM_INT);
    $stm->bindParam(':brand', $brand, PDO::PARAM_INT);
    $stm->execute();
    $Filter = $stm->fetchAll();

//    echo '<pre>';
//    var_dump($Filter);
//    echo '</pre>';
}


Вопрос заключается в том, что фильтрация происходит, если используются все значения, кроме
<option value="all">все</option>, потому что в БД нет значения "all" или "все".

Как заставить фильтр выбирать, например, указав размер - "все", а производитель - "КЕРМА", то есть конкретный?

Спасибо.
  • Вопрос задан
  • 395 просмотров
Пригласить эксперта
Ответы на вопрос 1
tsklab
@tsklab
Здесь отвечаю на вопросы.
все, потому что в БД нет значения "all" или "все".
Поскольку и :sz может быть all
SELECT * FROM `brick` WHERE ( sz=:sz OR :sz = 'all' ) AND ( brand=:brand OR :brand = 'all' )
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы