$ _POST и переменная в строке - не знаю, почему не работает

У меня этот нединамический скрипт работает так:

<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-синтаксис для echo, ваш php уже находится "внутри", поэтому не следует использовать его в том виде, в каком вы есть. Я также вижу в коде другие базовые синтаксические ошибки
user9487972 25.03.2018 04:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
45
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Никогда не рекомендуется использовать эхо в функциях, вместо этого просто возвращайте массив, а затем перебирайте его.

Вы также можете выйти из 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>";
?>

Другие вопросы по теме