-1

我有一个表单,可以让用户订阅时事通讯,如下所示:

在此处输入图像描述

它的代码是这样的:

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

4 回答 4

2

当您调用 时$objResult1 = mysql_fetch_array($objQuery1),您会从结果集中获取一行。因此,当您执行此操作时,紧随其后:

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

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

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

于 2013-03-20T14:01:57.307 回答
1

改变这个:

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

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

以及循环内的内容

您在外部和内部循环中使用 $i 混淆了

于 2013-03-20T14:01:31.400 回答
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  
}  
?>
于 2013-03-20T14:02:33.837 回答
0

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

于 2013-03-20T14:04:12.587 回答