Использование PHP в HTML<select>

176
15 января 2022, 10:40

Моя задача состоит в том , чтобы в раскрывающемся списке показывались те детали, которые лежат в таблице , но на деле получаю пустой список, вот мой код

 <?php
        require("connect.php");
        $query = "SELECT n_det FROM pmib6411.p";
        $details = pg_fetch_all(pg_query( $dbconn, $query));
         foreach($details as $pp):?>
            <option value="<?=$pp['n_det']?>"><?=$pp['n_det']?></option>
      <?php endforeach?>

Если это важно , то Субд - PostgreSQL 9.3.10

Answer 1

Я не работал с БД PostgreSQL, но по документации pg_fetch_all возвращает многомерный массив такого вида

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => Fred
        )
    [1] => Array
        (
            [id] => 2
            [name] => Bob
        )
)

Поэтому вам нужно будет сделать так

<?php
//...
$details = pg_fetch_all(pg_query( $dbconn, $query));
$data = '';
foreach($details as $pp){
    foreach($pp as $value){
        $data .= '<option value="'.$value['n_det'].'">'.$value['n_det'].'</option>';
    }
}
//...
?>
<select><?php echo($data) ?></select>

Либо, если pg_query возвращает такой же объект, как mysqli_query, то можно сделать просто

<?php
//...
$details = pg_query( $dbconn, $query );
$data = '';
foreach ($details as $pp){
    $data .= '<option value="'.$pp['n_det'].'">'.$pp['n_det'].'</option>';
}
//...
?>
<select><?php echo($data) ?></select>

А лучше всего перед и при использовании foreach проверяйте массивы и объекты функцией print_r. Так вы будете знать, сколько вложенностей в вашем массиве и вообще есть ли данные в массиве... Предыдущий ответ пока не удаляю.

Попробуйте так, чтобы увидеть, где у вас ошибка

<?php 
require("connect.php");
$query = "SELECT n_det FROM pmib6411.p";
if (!pg_connection_busy($dbconn)) {
    pg_send_query($dbconn, $query);
}
$result = pg_get_result($dbconn);
if (!pg_result_error || pg_result_error == ''){
    $details = pg_fetch_all($result);
    //тут ваш цикл и все, что нужно
} else {
    echo pg_result_error($result);
    //так вы увидите, где ваша ошибка...
}    
?>

Подробнее о pg_result_error читайте в документации. В вашем случае условие возможно должно быть изменено, т.к. при ошибке не связанной с параметром $result вернется FALSE, а если ошибки нет, то вернется пустая строка (if(pg_result_error == ''){...})

Попробуйте так вывести в option

function getOption($details){
    $data = '';
    foreach ($details as $value){
        $data .= '<option value="'.$value['n_det'].'">'.$value['n_det'].'</option>';
    }
return $data;
}

А в <select><?php echo(getOption($details))?></select>

READ ALSO
Django redirect не работает

Django redirect не работает

У меня есть мини сайтик django+ajax, когда я пытаюсь сделать обычный редирект, он не делается)

157
Обмен данными между двумя разными приложениями [закрыт]

Обмен данными между двумя разными приложениями [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме

105
Включение кнопки при вводе текста

Включение кнопки при вводе текста

Задача собственно такая: Имеется основное поле ввода TextField surnameNamePatronymicID - принимает ФИО, имеется кнопка Button fillButtonAction - именуемая "заполнить"...

114