2013-12-18 5 views
1

Мне нужно несколько комнат в форме с тем же выпадающим меню в каждой строке. Это мой код:PHP «Do» Loop внутри цикла «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

Привет, Ник. Да, у меня есть блок кода PHP над HTML, который делает как можно больше работы 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 } ?> 

Кроме того, в качестве прохода. Функции mysql_* официально устарели с PHP 5.5, и рекомендуется использовать mysqli или PDO для продвижения вперед. Я не уверен, насколько легко было бы вам преобразовать ваш код в это, но это определенно следует учитывать. Более подробную информацию об этом можно найти на php.net в своей статье о choosing a MYSQL API

1

Я бы предположить, что вы просто сохранить результат MySQL в массив, а затем цикл через это неоднократно. Либо это, либо сгенерируйте HTML для параметров один раз, сохраните его как строку, а затем распечатайте во всех выбранных. Они всегда будут одинаковыми, не так ли?

Смежные вопросы