2013-12-18 141 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,將其保存爲字符串,然後將其打印到所有選擇框中。他們永遠是相同的,他們不會?