我需要在每个行中使用相同下拉菜单的多个房间。到目前为止,这是我的代码:
<?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查询,所以我该怎么办呢?
提前致谢...
答案 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