Как использовать SELECT (sql) с несколькими флажками?

У меня есть 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.");

Вы не использовали as $item. Вместо этого вы передаете массив POST.

Funk Forty Niner 12.12.2018 15:34
Этот вопрос был вызван проблемой, которую невозможно воспроизвести, или простой опечаткой. Хотя подобные вопросы могут быть здесь по теме, этот был решен таким образом, который вряд ли поможет будущим читателям.
mplungjan 12.12.2018 15:35

@mplungjan, ТБХ Я думаю они хотят что-то вроде Categorie in ( ).

Nigel Ren 12.12.2018 15:43

@NigelRen Я уверен, что было доступно лучшее предложение. Версия OPs работать не будет.

mplungjan 12.12.2018 15:44
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
241
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте что-то вроде этого (не тестировалось, это просто идея):

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, вы не хотите запускать столько запросов, сколько выборок категорий во внешнем интерфейсе.

Я тоже :) хоть причину назови

Abhay Maurya 12.12.2018 15:52

@ivanivan Спасибо!

Abhay Maurya 12.12.2018 15:54

Не голосовал против, но заявление должно быть Categorie IN (x,y,z) вместо Categorie IN "x,y,z".

slaakso 12.12.2018 16:58

Если кто-то использует это решение, вам все равно нужно избегать ввода пользователем.

klediooo 07.08.2020 16:31

Другие вопросы по теме