Создание SQL-запроса с флажками

Я новичок в SQL и PHP и пытаюсь выполнить запрос.

Я изо всех сил пытаюсь ввести правильные операторы и не могу понять, почему это не работает! Я использовал ANDORCASE

У меня есть 4 флажка: бары, клубы, рестораны, пабы.

В моей базе данных есть столбец имени и столбец для каждого из 4 слов на моих переключателях. Если заведение представляет собой Бар, то в соответствующем столбце Бар стоит 1. Если заведение - паб, то в соответствующем столбце паба стоит 1. Если это оба, то у него будет 1 в обоих и т. д. И т. Д.

Вот как это выглядит:

Name  | Bar   | Club | Restaurant | Pub
———————————————————————————————————————
McD   |  0    |  0   |      1     |  0
KFC   |  1    |  0   |      1     |  0
SPN   |  1    |  1   |      1     |  1
GRG   |  0    |  1   |      1     |  0

Когда ничего не проверено, я бы хотел, чтобы в результате отображались все названия параметров. Если флажок установлен, то только столбцы Когда отмечен пункт «Клубы», то отображаются только клубы и т. д. И т. Д.

Когда отмечены бары и клубы, я хочу видеть все бары, клубы и т. д. И т. Д.

Как мне получить желаемый результат? Большое спасибо за вашу помощь!

Это код, с которым я работаю сейчас (я оставил переменную Bar):

<?php

error_reporting(E_ALL);

$servername = "**";
$username = "**";
$password = "**";
$dbname = "**";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

if (isset($_POST['submit'])) {

    $getselectClub = implode(",",$_POST['selectClub']);
    $getselectResturant = implode(",",$_POST['selectResturant']);
    $getselectBar = implode(",",$_POST['selectBar']);

$sql = "SELECT id, name, locale FROM theList WHERE bar='$getselectBar' ";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {


?>

<?php echo $row['id'];?> &nbsp;
<?php echo $row['name'];?> &nbsp;
<?php echo $row['locale'];?><br>

<?php }}} ?>

<form method = "post">
    Club: <input type='checkbox' name = "selectClub[]" value = "1" />
    Resturant: <input type='checkbox' name = "selectResturant[]" value = "1" />
    Bar: <input type='checkbox' name = "selectBar[]" value = "1"/>
    <input type = "submit" name = "submit" value = "submit" />
</form> 

Почему все ваши чекбоксы массивы? И ваш SQL проверяет только одно условие.

miken32 19.09.2018 00:56

Хотя в данном случае было довольно очевидно, в чем была проблема, указание фактического сообщения об ошибке, а не «это не работает» всегда полезно!

miken32 19.09.2018 01:09
Стоит ли изучать 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
2
3 733
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Флажок не отправляется, если он не установлен. Таким образом, вы проверяете его отправку, прежде чем добавлять его в запрос. Добавление [] в конец имени ввода формы отправляет его как массив, что вам не нужно.

<?php

error_reporting(E_ALL);

$servername = "**";
$username   = "**";
$password   = "**";
$dbname     = "**";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

if (isset($_POST["submit"])) {
    $where = [];
    $query = "";
    if (!empty($_POST['selectClub'])) $where[] = "club=1";
    if (!empty($_POST['selectRestaurant'])) $where[] = "restaurant=1";
    if (!empty($_POST['selectBar'])) $where[] = "bar=1";

    // check in case no boxes were checked
    if (!empty($where)) {
        $query = "WHERE " . implode(" OR ", $where);
    }

    $sql = "SELECT id, name, locale FROM theList $query";
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
        // output data of each row
        while($row = $result->fetch_assoc()) {
            echo "$row[id] &nbsp; $row[name] &nbsp; $row[locale]<br/>";
        }
    }
}
?>

<form method = "post">
    Club: <input type='checkbox' name = "selectClub" value = "1" />
    Restaurant: <input type='checkbox' name = "selectRestaurant" value = "1" />
    Bar: <input type='checkbox' name = "selectBar" value = "1"/>
    <button type = "submit" name = "submit" value = "1">Submit</button>
</form> 

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