PHP“Do”循环在“For”循环中

时间:2013-12-18 10:05:52

标签: php mysql for-loop

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

<?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查询,所以我该怎么办呢?

提前致谢...

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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

的文章中找到