动态创建的行在for循环后不显示

时间:2013-03-20 13:59:35

标签: php html for-loop html-table

我有一个表单,我可以在其中订阅新闻稿,如下所示:

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的第一行。有谁知道出了什么问题?^^它可能是一个非常简单的解决方案,但我似乎无法找到它。任何帮助都会很棒!

4 个答案:

答案 0 :(得分:2)

当您致电$objResult1 = mysql_fetch_array($objQuery1)时,您会从结果集中获取一行。所以当你这样做时,就在它之后:

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

您正在获取结果集的第二行,这就是您在$objResult1中使用的内容。在您的代码中,您永远不会使用第一个结果集。

我的建议是,如果必须保留此设计,则使用do{} while();循环。

答案 1 :(得分:1)

改变这个:

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

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

循环中的内容累积

在外圈和内圈

中使用$ i让你变得混乱

答案 2 :(得分:0)

您不需要for循环。只需将复选框更改为while循环中的单选按钮。

编辑:

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

答案 3 :(得分:0)

你嵌套了两个循环:while和for。两者似乎都做同样的工作(即:从结果集中获取行)。所以基本上你的第一行while“消耗”你的第一行。你应该摆脱它。