У меня есть 2 нескольких флажка, и у меня проблемы с правильным отображением, если установлено несколько флажков. Только последний флажок используется для фильтра в запросе Select.
Я много искал в сети, но не нашел никого, у кого бы тоже с этим проблемы.
Вопрос: Как использовать SELECT (sql) с несколькими флажками?
HTML-код:
<aside><h3>Filter:</h3>
<details open = "open">
<summary><label>Categorie</label></summary>
<div>
<label>
<input type = "checkbox" name = "filter_categorie[]" value = "dog">
Dogs
</label>
</div>
<div>
<label>
<input type = "checkbox" name = "filter_categorie[]" value = "fish">
Fishes
</label>
</div>
<div>
<label>
<input type = "checkbox" name = "filter_categorie[]" value = "other">
Other
</label>
</div>
</details>
<details>
<summary><label>Land</label></summary>
<div>
<label>
<input type = "checkbox" name = "filter_country[]" value = "germany">
Germany
</label>
</div>
<div>
<label>
<input type = "checkbox" name = "filter_country[]" value = "austria">
Austria
</label>
</div>
</details>
<br><input type='submit' name ='update' value='Update'>
Код PHP:
include("server.inc");
$cxn = mysqli_connect($host,$user,$password,$database) or die ("No connection to Server");
if (isset($_POST['update']) ){
foreach ($_POST['filter_categorie[]'] as $item){
$query = "
SELECT *
FROM artikel
WHERE Categorie=\"{$_POST['filter_categorie']}\"
";}
$resultat = mysqli_query($cxn,$query) or die ("No results.");
@mplungjan, ТБХ Я думаю они хотят что-то вроде Categorie in ( ).
@NigelRen Я уверен, что было доступно лучшее предложение. Версия OPs работать не будет.






Попробуйте что-то вроде этого (не тестировалось, это просто идея):
include("server.inc");
$cxn = mysqli_connect($host,$user,$password,$database) or die ("No connection to Server");
if (isset($_POST['update']) ){
$query = 'SELECT * FROM artikel WHERE Categorie IN ('.implode(',', $_POST['filter_categorie']).')';
$resultat = mysqli_query($cxn,$query) or die ("No results.");
}
Поэтому в основном используйте $_POST['filter_categorie'], а не $_POST['filter_categorie[]'], и используйте implode, чтобы предоставить все категории в виде строки в вашем запросе.
Нет необходимости использовать foreach, вы не хотите запускать столько запросов, сколько выборок категорий во внешнем интерфейсе.
Я тоже :) хоть причину назови
@ivanivan Спасибо!
Не голосовал против, но заявление должно быть Categorie IN (x,y,z) вместо Categorie IN "x,y,z".
Если кто-то использует это решение, вам все равно нужно избегать ввода пользователем.
Вы не использовали
as $item. Вместо этого вы передаете массив POST.