【问题标题】:Using a PHP foreach loop within another foreach loop在另一个 foreach 循环中使用 PHP foreach 循环
【发布时间】:2018-09-21 14:32:56
【问题描述】:

我正在尝试使用数据库中的行填充表。但是,其中一列是需要填充多个值的下拉列表,因此需要使用 fetchAll。但是,我遇到了麻烦,因为我在另一个 foreach 构造中使用了一个 foreach 构造。

我猜这是不可能的,还是我做错了什么?如何找到一种解决方法,以便我可以填充整个表格,同时使用多个值填充下拉列表,但仍将其默认为数据库中的值?

<?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);
?>

<?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($drop->fetchAll() as $dropdown) { ?>

                  <option class="choice" value="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
  }
 ?>

注意 此代码正确填充整个表格,但下拉列表仅包含每行中的值,如果我需要选择不同的值,则不会填充其他值选项:

<?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>

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

            </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,即使该行不应该是 Bowling Green。大多数行都在东南或密歇根,但不管它应该是什么,出于某种原因它默认为鲍林格林

【问题讨论】:

  • 我的第一个猜测,你只是做错了,让我们仔细看看
  • 这个也需要改一下&lt;option class="choice" value="&lt;?php echo $rows['Purchasing_Group'];?&gt;"&gt;&lt;?php echo $rows['Purchasing_Group'];?&gt;&lt;/option&gt;
  • 为下拉列表创建一个新查询,而不是使用初始查询的第一行结果。

标签: php sql-server foreach


【解决方案1】:

是的,做错了,您在外部 foreach 的第一次迭代完成时消耗了第二个结果集,因此将下拉内容检索到一个数组中,以便您可以多次重复使用它

<?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) { 
        //--------------^^^^^^^^^
        // Also changed the way you fill the option tag below
                ?>

                  <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
  }
 ?>

【讨论】:

  • 我很确定真正的问题是 value="Purchasing Group" 是硬编码的,所以无论选择什么选项,实际上只有一个选项可用。
  • @MonkeyZeus Ooo 让我检查一下
  • 是的,OP 的问题很分散,有点不连贯,所以很容易错过。
  • @MonkeyZeus 除非您完成了 FetchAll,否则结果集已被完全消耗,OP 将不得不重新发出查询以重新填充结果集
  • 我在代码的其他地方有另一个 foreach,它在您更改之前使用了之前的 fetchAll。我继续并修复了它,现在它可以工作了,所以从你的角度来看一切都很好。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-26
  • 2012-07-19
  • 2015-07-04
  • 1970-01-01
  • 2014-10-19
相关资源
最近更新 更多