Как выбрать данные из всего столбца и представить их как отдельные варианты выбора в теге select.

#php #sql #html

#php #sql #HTML

Вопрос:

Я думаю, что этот вопрос будет довольно интересным. Итак, как следует из названия, я пытаюсь создать динамическое select поле. В принципе, когда придет время, мое веб-приложение подключится к моей базе данных и извлечет всю строку, соответствующую моему запросу. Мой вопрос заключается в следующем: Как я могу представить данные из ОДНОГО из столбцов в строке как ОТДЕЛЬНЫЕ параметры в select теге? Это то, что я пытаюсь прямо сейчас:

 <select>
    <?php
        $servername = "127.0.0.1";
        $username = "root";
        $password = "";
        $dbname = "people";
        $conn = new mysqli($servername, $username, $password, $dbname);
        if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
        }else{
            $search_query = "SELECT * FROM people_list WHERE person_id = $_SESSION[person_id]";
            $result = $conn->query($search_query);
            while($person_result_list = mysqli_fetch_assoc($result)){
            echo "

            <option value='$result[person_result_list]'>'$result[person_name]', '$result[person_result_list]'</option>

            ";



            }

        }

    ?>
    </select>
 

Это возвращает ошибку:
Cannot use object of type mysqli_result as array
Это должно быть довольно просто исправить, но я просто не могу найти обходной путь для этого. Есть идеи?

Спасибо всем!

Ответ №1:

Невозможно использовать объект типа mysqli_result в качестве массива

Это из-за этого утверждения,

 <option value='$result[person_result_list]'>'$result[person_name]', '$result[person_result_list]'</option>
               ^^^^^^^                       ^^^^^^^                 ^^^^^^^
 

$result это MySQLi результирующий объект, а не массив.

Мой вопрос заключается в следующем: Как я могу представить данные из ОДНОГО из столбцов в строке в виде ОТДЕЛЬНЫХ параметров в теге выбора?

Просто извлеките строку из результирующего набора и используйте foreach цикл для отображения каждого отдельного значения столбца внутри <option> элемента, например:

 // your code

$search_query = "SELECT * FROM people_list WHERE person_id = $_SESSION[person_id]";
$result = $conn->query($search_query);
$person_result_list = mysqli_fetch_assoc($result)
foreach($person_result_list as $value){
    echo '<option value="' . $value . '">' . $value . '</option>'
}

// your code
 

Ответ №2:

вы можете использовать GROUP_CONCAT в запросе. Он вернет вам разделенную запятыми строку значений только вашего целевого столбца. Затем вы можете разделить эту строку, чтобы сделать ее массивом для использования в раскрывающемся списке select.