【问题标题】:PHP "Do" Loop Within a "For" Loop“For”循环内的 PHP“Do”循环
【发布时间】:2013-12-18 10:05:52
【问题描述】:

我需要一个表单中的多个房间,每行都有相同的下拉菜单。到目前为止,这是我的代码:

<?php for ($i=1; $i<=$No_of_rooms; $i++) {?>
    <tr class="formspace">
        <td class="formleft">Room <?php echo $i ?></td>
        <td>
            <select name="roomtype[<?php echo $i ?>]">
                <?php  do { ?>
                    <option value="<?php echo $row_room['roomtype'] ?>"><?php echo $row_room['room type'] ?></option>
                <?php } while ($row_room = mysql_fetch_assoc($room)) ;?>
            </select>
        </td>
    </tr>
<?php }?>

第一行显示正确,但以下下拉菜单为空。看起来 mysql_fetch_assoc 在第一次运行后已经“过期”并且不再工作。显然我不想对每一行重复mySQL查询,那我该怎么做呢?

提前谢谢...

【问题讨论】:

  • 你在哪里做查询?在 for 循环之前?
  • 嗨尼克。是的,我在 HTML 上方有一个 PHP 代码块,它尽可能多地完成 PHP 工作。
  • 为什么,是的,结果集将是“空的”;这就是 while 循环首先停止的原因。
  • 我建议使用 while 而不是 do-while;没有理由在这里保证一个循环。

标签: php mysql for-loop


【解决方案1】:

一旦你循环一次,mysql 指针就会在末尾,所以你要么需要重置指针,要么(更好的方法)是在 for 循环之前将内容设置为数组,然后循环每次该数组,例如:

<?php
    $allrooms = array();
    while ($row = mysql_fetch_assoc($room)) {
        $allrooms[] = $row;
    }
    for ($i=1; $i<=$No_of_rooms; $i++) {?>
    <tr class="formspace">
        <td class="formleft">Room <?php echo $i ?></td>
        <td>
            <select name="roomtype[<?php echo $i ?>]">
                <?php foreach ($allrows as $row_room) { ?>
                    <option value="<?php echo $row_room['roomtype'] ?>"><?php echo $row_room['room type'] ?></option>
                <?php } ?>
            </select>
        </td>
    </tr>
<?php } ?>

另外,作为旁注。从 PHP 5.5 起,mysql_* 函数已被正式弃用,建议继续使用 mysqli 或 PDO。我不确定将代码转换成这个对你来说有多容易,但绝对应该考虑一下。更多信息可以在 php.net 上他们关于choosing a MYSQL API的文章中找到

【讨论】:

    【解决方案2】:

    我建议您先将 MySQL 结果保存到一个数组中,然后重复循环。要么,要么为选项生成一次 HTML,将其保存为字符串,然后将其打印到所有选择框中。它们总是相同的,不是吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-20
      相关资源
      最近更新 更多