2013-03-20 2 views
-1

У меня есть форма, где я могу подписаться пользователями информационных бюллетеней, которые выглядят следующим образом:Динамически создана строка не отображается после того, как цикл

enter image description here

И код именно это:

<?php 
$i = 0; 
while($objResult1 = mysql_fetch_array($objQuery1)) 
{ 
$i++; 
?> 
<tr> 
    <td><div align="center"><?=$objResult1["ID"];?><input type="hidden" name="mailid[]" value="<?=$objResult1["ID"];?>"> </div></td> 
    <td><div align="center"><?=$objResult1["Titel"];?> </div></td> 
    <td><div align="center"><input type="checkbox" name="sub[]" value="10"> </div></td> 
    <td><div align="center"><input type="checkbox" name="sub[]" value="90"> </div></td> 
</tr> 
<?php 
} 
?> 

в $ objQuery1:

$strSQL1  = "SELECT ID, Titel FROM Mail"; 
$objQuery1 = mysql_query($strSQL1); 

Эта форма работает просто отлично, как это, т проблема в том, что я хотел изменить вход на радио. Для этого я редактировал его к следующему:

<?php 
$i = 0; 
while($objResult1 = mysql_fetch_array($objQuery1)) 
{ 
$i++; 
?> 
<?php for ($i = 0; $objResult1 = mysql_fetch_array($objQuery1); $i++) : ?> 
<tr> 
    <td><div align="center"><?=$objResult1["ID"];?><input type="hidden" name="mailid[]" value="<?=$objResult1["ID"];?>"> </div></td> 
    <td><div align="center"><?=$objResult1["Titel"];?> </div></td> 
    <td><div align="center"><input type="radio" name="sub[<?php echo $i; ?>]" value="10"> </div></td> 
    <td><div align="center"><input type="radio" name="sub[<?php echo $i; ?>]" value="90"> </div></td> 
</tr> 
<?php endfor; ?> 
    <?php 
} 
?> 

Проблема с этим является то, что в настоящее время первая строка с ID 1 больше не отображается. Кто-нибудь знает, что пошло не так? ^^ Это, вероятно, довольно простое решение, но я не могу найти его. Любая помощь будет замечательной!

ответ

0

Вы вложенные две петли: в то время как и. Оба, похоже, выполняют ту же работу (то есть: выборка строк из набора результатов). Поэтому в основном ваш первый while «потребляет» ваш первый ряд. Вы должны избавиться от него.

+0

Thnx, это действительно сработало ^^ Как я уже сказал, это простое решение, но я просто этого не видел. Я приму свой ответ, когда смогу! – Daanvn

1

Изменить это:

<?php for ($i = 0; $objResult1 = mysql_fetch_array($objQuery1); $i++) : ?> 

в

<?php for ($j = 0; $objResult1 = mysql_fetch_array($objQuery1); $j++) : ?> 

И содержание внутри цикла accrodingly

Вы получаете вперемешку, используя $ я во внешнем и внутреннем цикле

2

Когда вы вызываете $objResult1 = mysql_fetch_array($objQuery1), вы получаете одну строку из результата se т. Так что, когда вы сделаете это, сразу после него:

<?php for ($i = 0; $objResult1 = mysql_fetch_array($objQuery1); $i++): ?> 

Вы забирающий вторую строку результирующего набора, и это то, что вы используете в $objResult1. В вашем коде вы никогда не используете первый набор результатов.

Мое предложение, если вам нужно сохранить этот дизайн, необходимо использовать петлю do{} while();.

0

Вам не нужен цикл for. Просто измените флажки на радиокнопки в вашем цикле while.

EDIT:

<?php 
$i = 1; 

while($objResult1 = mysql_fetch_array($objQuery1)) { 
    $i++; 
?> 
<tr> 
    <td><div align="center"><?=$objResult1["ID"];?><input type="hidden" name="mailid[]" value="<?=$objResult1["ID"];?>"> </div></td> 
    <td><div align="center"><?=$objResult1["Titel"];?> </div></td> 
    <td><div align="center"><input type="radio" name="sub[<?php echo $i; ?>]" value="10"> </div></td> 
    <td><div align="center"><input type="radio" name="sub[<?php echo $i; ?>]" value="90"> </div></td> 
</tr> 
<?php 
} 
?> 
+0

Когда я это сделаю, все переключатели будут иметь одинаковое имя, и я не смогу выбрать 1 в каждой строке. – Daanvn

+0

Посмотрите на мой отредактированный ответ –

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