Я новичок в 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'];?>
<?php echo $row['name'];?>
<?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>
Хотя в данном случае было довольно очевидно, в чем была проблема, указание фактического сообщения об ошибке, а не «это не работает» всегда полезно!






Флажок не отправляется, если он не установлен. Таким образом, вы проверяете его отправку, прежде чем добавлять его в запрос. Добавление [] в конец имени ввода формы отправляет его как массив, что вам не нужно.
<?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] $row[name] $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>
Почему все ваши чекбоксы массивы? И ваш SQL проверяет только одно условие.