PHP - заполнить выпадающий список из БД MySQL и автоматически заполнить это поле в форме

0

Я пытаюсь выполнить две вещи с помощью кода ниже. Во-первых, я хочу, чтобы мои параметры выбора были заполнены из моей базы данных. Во-вторых, я хочу, чтобы в поле в форме было сохраненное значение, выбранное при загрузке страницы (например, в профиле для члена). То, как я выполнил ниже, работает, вроде, но у меня две проблемы. Во-первых, если вы откроете раскрывающийся список, выбранный параметр появится дважды (один раз вверху и один раз в нормальном положении). Во-вторых, если это обязательное поле, пользователь должен открыть раскрывающийся список и снова выбрать его, даже если он появляется в поле (ужасный ux). Если это не обязательное поле, форма действует так, как будто ничего не выбрано, и я получаю неопределенную ошибку индекса дальше по строке. Я очень уверен, что есть лучший способ реализовать то, что я пытаюсь достичь, что не даст мне этих проблем... все они очень помогают.

<?php

$query6 = "SELECT catname FROM travisor_catagory";
$result6 = mysqli_query($conn, $query6) or die(mysqli_error($conn));

$queryread3 = "SELECT * FROM travisor_catagory WHERE id = $catagory";
$result3 = mysqli_query($conn, $queryread3) or die(mysqli_error($conn));

if (mysqli_num_rows($result3) > 0) {

    while ($row = mysqli_fetch_assoc($result3)) {

        $cat = $row["catname"];

    }
}

echo   "<div class='form-group'>
        <label>Catagory *</label>
        <select class='form-control' name='catagory' required>
        <option disabled selected value> $cat </option>";

            if (mysqli_num_rows($result6) > 0) {
                while ($row2 = mysqli_fetch_assoc($result6)) {
                    $catagory2 = $row2["catname"];
                    echo "<option>$catagory2</option>"; 
                }
            }

echo    "</select>"

?>
  • 0
    Примечание. Объектно-ориентированный интерфейс к mysqli значительно менее многословен, что облегчает чтение и аудит кода, и его нелегко спутать с устаревшим интерфейсом mysql_query . Прежде, чем вы слишком инвестируете в процедурный стиль, стоит переключиться. Пример: $db = new mysqli(…) и $db->prepare("…") Процедурный интерфейс является артефактом эпохи PHP 4, когда был представлен mysqli API, и его не следует использовать в новом коде.
  • 0
    ВНИМАНИЕ : При использовании mysqli вы должны использовать параметризованные запросы и bind_param для добавления пользовательских данных в ваш запрос. НЕ используйте интерполяцию или конкатенацию строк для достижения этой цели, поскольку вы создали серьезную ошибку внедрения SQL . НИКОГДА не помещайте $_POST , $_GET или любые пользовательские данные непосредственно в запрос, это может быть очень вредно, если кто-то попытается использовать вашу ошибку.
Показать ещё 3 комментария
Теги:

1 ответ

1
Лучший ответ

Не смешивайте вещи так много...

Когда вы попадаете в более крупные программы, вы быстро потеряетесь, поэтому KISS !!!

Вы можете "прыгать" в/из HTML и вернуться к PHP, чтобы отобразить переменную $ options, а затем вернуться в HTML, чтобы завершить выбор. (это мое описание этого, когда я учу новичков - эта концепция "прыгать в/из" работает для PHP, HTML, JS - хорошо, любые языки, которые вы можете объединить на одной странице... - это заслуживает понимания концепции! )

Во-первых, получите параметры, которые вам понадобятся с ONE-запросом (посмотрите, как мы позаботимся о выбранном), - это сделает "пакет" данных в переменной $ options.

<?php
    // declare some values that we'll use later
    $options = '';
    // gather the data for the options
    $sql = "SELECT id, catname FROM travisor_catagory";
    $result = mysqli_query($conn, $sql);
    if (mysqli_num_rows($result) > 0) {
        while ($row = mysqli_fetch_assoc($result)) {
            $selected = '';
            if($category == $row['id']){
                $selected = "selected";
            }
            $options .=  '<option ' . $selected . ' value="' . $row["id"] . '">" . $row["catname"] . "</option>"; 
        }
    }
// now we will 'jump' out of PHP and back to HTML
?>
<!-- we are in HTML, so comments and language changed... -->
<div class='form-group'>
    <label>Catagory *</label>
    <select class='form-control' name='catagory' required>
        <!-- here we 'jump' out of HTML and into PHP to use the $options variable -->
        <?php echo $options; // and back out of PHP to HTML... ?>
        <!-- where we finish up our select and whatever other HTML things -->
    </select>
</div>

Это должно позаботиться обо всех ваших проблемах с тем, что у вас было.....

Кстати, похоже, что вы используете Bootstrap - если да, я настоятельно рекомендую вам проверить это (изменил мою жизнь о борьбе с выборами! :) Bootstrap Select

Ещё вопросы

Сообщество Overcoder
Наверх
Меню