Nicelogin
@Nicelogin
Привет!

Как правильно сделать выборку данных с помощью раскрывающегося списка?

Привет! Передо мной стоит задача написать некоторый код на php, но я совершенный ноль в этом и только начал свою обучение.
Я пытаюсь сформировать таблицу из sql базы по параметрам из select (раскрывающийся список) т.е я должен выбрать "условие" из раскрывающегося списка и в соответствии с этим условием должна сформироваться таблица. В качестве условий я выбрал просто цифры 1,2,3 и 4. предполагается что цифра соответствует номеру строки (id) в таблице базы данных и результат кода вернет одну строку с этим самым id.
<form method="POST" action="html.php">
  <div class="form-group">
    <label for="search_word">Поиск</label>
    <select class="form-control" name="sch">
      <option>1</option>
      <option>2</option>
      <option>3</option>
      <option>4</option>
    </select>
  </div>
  <button type="submit" class="btn btn-default">Поиск</button>
</form>

<?php
$status = $_POST['sch'];
$sql = "SELECT id, city_name FROM city where id = '$status' ";
$result = mysqli_query($link, $sql);

if (mysqli_num_rows($result) > 0) {
    echo "<table class=\"table table-striped\"><tr><th>ID</th><th>Город</th></tr>";
    // output data of each row
    while($row = mysqli_fetch_assoc($result)) {
        echo "<tr><td>" . $row["id"]. "</td><td>" . $row["city_name"]. "</td></tr>";
    }
    echo "</table>";
} else {
    echo "0 results";
}

mysqli_close($link);
?>

Вот пример моего кода. В результаты я получаю "0 results".
Ничего толкового не нашел в гугле. Поисковик выдает только примеры где условие задано в конструкции "SELECT FROM WHERE", что мне не подходит. Как нужно правильно подставлять условие из раскрывающегося списка в запрос к базе данных?
  • Вопрос задан
  • 191 просмотр
Пригласить эксперта
Ответы на вопрос 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Специально для всех жертв видеокурсов по похапе.
Мастеркласс по решению супер-сложной задачи по извлечению информации из базы данных.

1. Вместо идиотской mysqli используем нормальный PDO. Берем отсюда код соединения с БД и записываем его в файл db.php
2. Убеждаемся, что можем видеть все ошибки, которые возникают в коде
3. Собственно ответ на вопрос "как подставлять словие в запрос" заключается в 3 строчках
$sql = "SELECT id, city_name FROM city where id = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$_GET['sch']]);

4. Переписываем наш многострадальный код

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
include 'db.php';
$data = $pdo->query("SELECT id FROM city LIMIT 10")->fetchAll();
?>
<form>
  <div class="form-group">
    <label for="search_word">Поиск</label>
    <select class="form-control" name="sch">
    <?php foreach ($data as $row): ?>
        <option><?=$row['id']?></option>
    <?php endforeach ?>
    </select>
  </div>
  <input type="submit" class="btn btn-default">Поиск</button>
</form>
<?php
if (!isset($_GET['sch'])) {
    die("Выберите значение");
}
$sql = "SELECT id, city_name FROM city where id = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$_GET['sch']]);
$data = $stmt->fetchAll();
?>
<?php if ($data) : ?>
    <table class="table table-striped"><tr><th>ID</th><th>Город</th></tr>
    <?php foreach ($data as $row): ?>
        <tr><td><?=$row["id"]?></td><td><?=$row["city_name"]?></td></tr>
    <?php endforeach ?>
   </table>
<?php else : ?>
    echo "0 results";
<?php endif ?>


Возникающие на экране сообщения об ошибках пытаемся перевести и нагуглить самостоятельно. Только в самых беднадежных случаях идем на тостер и просим растолковать
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы