Неверное заполнение выпадающих списков в цикле PHP foreach - PullRequest
0 голосов
/ 24 сентября 2018

В настоящее время я заполняю таблицу строками из базы данных.Один из столбцов - это раскрывающийся список, в который необходимо ввести несколько значений.

В каждом раскрывающемся списке по умолчанию автоматически указывается значение Bowling Green, даже если в этом ряду не указано значение Bowling Green.Большинство строк расположены либо в юго-восточной, либо в Мичиганской области, но независимо от того, какими они должны быть, по умолчанию используется Bowling Green.

Как сделать так, чтобы в раскрывающихся списках оставались все значения в качестве параметров в раскрывающемся списке (Bowling Green, Michigan, юго-восток), но по умолчанию в раскрывающемся списке указано значение в базе данных?

<?php
$sql = "SELECT TOP 100 *
        FROM Table_OS_List
        ORDER BY [CURRENT_SKU] ASC";


$drops = "SELECT [Purchasing_Group]
        FROM Table_OS_List
        GROUP BY [Purchasing_Group]";
$drop = $dbh->query($drops);
$allDrops = $drop->fetchAll();
?>

<?php
/* Foreach loop that brings in information to populate table */
foreach ($dbh->query($sql) as $rows) {
?>
<tr class="row">    
    <td class="old_sku" id="old_sku"><?php echo intval ($rows['OLD_SKU'])?></td>
    <td class="current_sku" id="current_sku"><?php echo intval ($rows['CURRENT_SKU'])?></td>
    <td class="id" id="id" style="display: none;"><?php echo intval ($rows['ID'])?></td>


    <td class="dropdown-select" id="purchgroup">
        <select id="selected_group" class="selected_group" disabled>
            <?php 
            foreach($allDrops as $dropdown) { ?>

              <option class="choice" 
                      value="<?php echo $dropdown['Purchasing_Group'];?>">
                <?php echo $dropdown['Purchasing_Group'];?>
              </option>

            <?php } ?>

        </select>
    </td>


    <td><input type="button" class="edit" name="edit" value="Edit"></td>
    <td><input type="button" class="delete" name="delete" id="<?php echo intval ($rows['ID'])?>" value="Delete"></td>
</tr>

<?php } ?>

Пример того, как это выглядит сейчас.Вы можете видеть, что у него есть несколько вариантов, что мне нужно, но, независимо от его значения в базе данных, по умолчанию используется Bowling Green:

enter image description here

enter image description here

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Вы можете добавить атрибут selected со встроенным троичным оператором, например, так:

<option class="choice" <?php echo $dropdown['Purchasing_Group'] ? ' selected' : null ?>   value="<?php echo $dropdown['Purchasing_Group'];?>">
                <?php echo $dropdown['Purchasing_Group'];?>
              </option>

и после того, как вы извлекаете все данные из БД, всегда полезно проверить, существует ли результат или результаты.

0 голосов
/ 24 сентября 2018

Вам необходимо добавить атрибут selected к правильной опции.

Примерно так:

<option class="choice" 
      <?php echo $row['Purchasing_Group'] == $dropdown['Purchasing_Group'] ? "selected" : ""; ?>
      value="<?php echo $dropdown['Purchasing_Group'];?>">
<?php echo $dropdown['Purchasing_Group'];?>
</option>

Где $row['Purchasing_Group'] - столбец в таблице Table_OS_List.

Важный код здесь <?php echo $row['Purchasing_Group'] == $dropdown['Purchasing_Group'] ? "selected" : ""; ?> - он известен как Ternary, его также можно записать в развернутом виде, например:

<?php
    if($row['Purchasing_Group'] == $dropdown['Purchasing_Group']) {
        echo "selected";
    }
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...