2013-12-18 97 views
1

我需要在表格中使用相同下拉菜单的多个房间。这是我到目前为止的代码:PHP“Do”在“For”循环中循环

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

你在哪里做查询? for循环之前? – Nick

+0

嗨,尼克。是的,我在HTML之上有一个PHP代码块,尽可能多地执行PHP工作。 – TrapezeArtist

+0

为什么,是的,结果集将是“空的”;这就是'while'循环首先停止的原因。 – deceze

回答

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

1

我建议你刚才MySQL的结果保存到一个数组,然后再通过循环反复。或者,或者为选项生成一次HTML,将其保存为字符串,然后将其打印到所有选择框中。他们永远是相同的,他们不会?