У меня этот нединамический скрипт работает так:
<p>Environment: <select name = "formEnvironment" value = "" >
<option value = "TEST" <?= $_POST['formEnvironment'] == TEST ? 'selected' : '' ?>>Test</option>
<option value = "PROD" <?= $_POST['formEnvironment'] == PROD ? 'selected' : '' ?>>Production</option>
</select></p>
Поскольку я попытался сделать его более динамичным, насколько это возможно внутри переменных. У меня проблемы с кодом внутри while nest, и я думаю, что это связано со смешиванием строк и переменных, что усложняет задачу. Любая помощь в выборе правильного кода в этом отношении. Буду признателен за помощь, так как я всего несколько месяцев в PHP.
function DropDownItems($itemName, $query, $connection)
{
$result = mysqli_query($connection, $query);
while ($row = $result->fetch_assoc()){
$MAS = "$_POST['form"{$itemName}"']";
echo "<option value=\"{$row['DDVALUE']}\" ";
echo "<?= "{$MAS}" == "{$row['DDVALUE']}" ? 'selected' : '' ?>>"{$row['DDTEXT']}"</option>";
}
}
$itemName = "Environment";
$query = "SELECT DDVALUE, DDTEXT FROM DDLISTS WHERE FIELDNAME='".$itemName."' ORDER BY DDTEXT ASC";
echo "<p>$itemName.": <select name='form".$itemName."'>";
echo "<option value=''>Select below:</option>";
DropDownItems($itemName, $query, $connection);
echo "</select>";






Никогда не рекомендуется использовать эхо в функциях, вместо этого просто возвращайте массив, а затем перебирайте его.
Вы также можете выйти из PHP, чтобы вам не нужно было много эхо.
Так много синтаксических ошибок, что я просто переписал его:
<?php
function DropDownItems($itemName, $query, $connection) {
$return = [];
$result = mysqli_query($connection, $query);
while ($row = $result->fetch_assoc()) {
$return[] = [
'value' => $row['DDVALUE'],
'label' => $row['DDTEXT']
];
}
return $return;
}
$itemName = "Environment";
$query = "SELECT DDVALUE, DDTEXT FROM DDLISTS WHERE FIELDNAME='".$itemName."' ORDER BY DDTEXT ASC";
?>
<p><?= $itemName ?>
<select name = "form<?= $itemName ?>">
<option value = "">Select below:</option>
<?php foreach (DropDownItems($itemName, $query, $connection) as $item): ?>
<option value = "<?= $item['value'] ?>"<?= (isset($_POST['form'.$itemName]) && $_POST['form'.$itemName] === $item['value'] ? ' selected' : '') ?>><?= $item['label'] ?></option>
<?php endforeach ?>
</select>
</p>
Помните о SQL-инъекциях, если $itemName = "Environment"; предоставлен пользователем, вы должны изменить код, чтобы использовать подготовленные запросы.
Исправлены синтаксические ошибки. И сделал код более читабельным. Вы можете попробовать приведенный ниже код. Не тестировал, надеюсь, все работает нормально.
<?php
function DropDownItems($itemName, $query, $connection)
{
$result = mysqli_query($connection, $query);
$html = '';
while ($row = $result->fetch_assoc()){
$MAS = $_POST['form'.$itemName];
$html .= "<option value=\"{$row['DDVALUE']}\" ";
$html .= ( $MAS == $row['DDVALUE'] ? 'selected' : '' ).">{$row['DDTEXT']}</option>";
}
return $html;
}
$itemName = "Environment";
$query = "SELECT DDVALUE, DDTEXT FROM DDLISTS WHERE FIELDNAME='".$itemName."' ORDER BY DDTEXT ASC";
echo "<p>$itemName".": <select name='form".$itemName."'>";
echo "<option value=''>Select below:</option>";
echo DropDownItems($itemName, $query, $connection);
echo "</select>";
?>
<?=- это короткий php-синтаксис для echo, ваш php уже находится "внутри", поэтому не следует использовать его в том виде, в каком вы есть. Я также вижу в коде другие базовые синтаксические ошибки