Добрый день, такая проблема с фильтрами, есть форма фильтрации:
<form method="POST" action="/catalog">
<p class="filter_name">Город</p>
<ul class="filter_box">
<li class="" style="width: 85%;"><input name="sity[]" type="checkbox" value="Минск" style="display:none" >Минск</li>
<li class="" style="width: 85%;"><input name="sity[]" type="checkbox" value="Гродно" style="display:none" >Гродно</li>
<li class="" style="width: 85%;"><input name="sity[]" type="checkbox" value="Брест" style="display:none" >Брест</li>
<li class="" style="width: 85%;"><input name="sity[]" type="checkbox" value="Витебск" style="display:none" >Витебск</li>
<li class="" style="width: 85%;"><input name="sity[]" type="checkbox" value="Гомель" style="display:none" >Гомель</li>
<li class="" style="width: 85%;"><input name="sity[]" type="checkbox" value="Могилев" style="display:none" >Могилев</li>
<div class="clearfix"></div>
</ul>
<p class="filter_name">Параметр2</p>
<ul class="filter_box">
<li class="" ><input name="param2[]" type="checkbox" value="Значение1" style="display:none" >Значение1</li>
<li class="" ><input name="param2[]" type="checkbox" value="Значение2" style="display:none" >Значение2</li>
<li class="" ><input name="param2[]" type="checkbox" value="Значение3" style="display:none" >Значение3</li>
<li class="" ><input name="param2[]" type="checkbox" value="Значение4" style="display:none" >Значение4</li>
<div class="clearfix"></div>
</ul>
<p class="filter_name">Параметр3</p>
<ul class="filter_box">
<li class="" ><input name="param3[]" type="checkbox" value="Значение1" style="display:none" >Значение1</li>
<li class="" ><input name="param3[]" type="checkbox" value="Значение2" style="display:none" >Значение2</li>
<li class="" ><input name="param3[]" type="checkbox" value="Значение3" style="display:none" >Значение3</li>
<li class="" ><input name="param3[]" type="checkbox" value="Значение4" style="display:none" >Значение4</li>
<div class="clearfix"></div>
</ul>
<p class="filter_name">Параметр4</p>
<ul class="filter_box">
<li class="" ><input name="status[]" type="checkbox" value="1" style="display:none" >Да</li>
<li class="" ><input name="status[]" type="checkbox" value="0" style="display:none" >Нет</li>
<div class="clearfix"></div>
</ul>
<div class="more_filter_btn">
<input type="submit" class="btn" name="filter" id="moreFilterBtn" value="Фильтровать">
</div>
</form>
Обработчик:
<?php
function addWhere($where, $add, $and = true) {
if ($where) {
if ($and) $where .= " AND $add";
else $where .= " OR $add";
}
else $where = $add;
return $where;
}
if (!empty($_POST["filter"])) {
$where = "";
if ($_POST["city"]) {
$ids=$_POST["city"];
$incity = str_repeat('?,', count($ids) - 1) . '?';
$where = addWhere($where, 'city IN ('. $incity .')');
}
if ($_POST["param2"]) {
$ids = $_POST["param2"];
$inparam2 = str_repeat('?,', count($ids) - 1) . '?';
$where = addWhere($where, 'param2 IN ('. $inparam2 .')');
}
if ($_POST["param3"]) {
$ids = $_POST["param3"];
$inparam3 = str_repeat('?,', count($ids) - 1) . '?';
$where = addWhere($where, 'param3 IN ('. $inparam3 .')');
}
if ($_POST["status"]) $where = addWhere($where, "`status` IN (".htmlspecialchars(implode(",", $_POST["status"])).")");
$sql = "SELECT * FROM `trfilters`";
if ($where) $sql .= " WHERE $where";
$stmt = $db->prepare($sql);
$stmt->execute($ids);
$filters = $stmt->fetchAll();
foreach ($filters as $filter) { ?>
<?php }
}
?>
При выборе param2 и param3 выдаёт ошибку
Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in
Подскажите как в $stmt->execute($ids); передать все параметры $ids.
Возможно, я тут все не правильно написал, первый раз фильтр делаю, заранее спасибо за помощь.