【问题标题】:Dynamically created row not showing after for loop动态创建的行在 for 循环后不显示
【发布时间】:2013-03-09 16:08:40
【问题描述】:

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

它的代码是这样的:

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

【问题讨论】:

    标签: php html for-loop html-table


    【解决方案1】:

    当您调用$objResult1 = mysql_fetch_array($objQuery1) 时,您会从结果集中获取一行。所以当你这样做时,紧随其后:

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

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

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

    【讨论】:

      【解决方案2】:

      改变这个:

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

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

      和循环内的内容相应

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • Thnx,这确实有效^^ 正如我所说,这是一个简单的解决方案,但我只是没有看到它。我会在有能力的时候接受你的回答!
        【解决方案4】:

        您不需要 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  
        }  
        ?>
        

        【讨论】:

        • 当我这样做时,所有单选按钮都将具有相同的名称,我将无法在每一行上选择 1。
        猜你喜欢
        • 2018-09-09
        • 1970-01-01
        • 2020-05-24
        • 2021-05-06
        • 1970-01-01
        • 2019-06-14
        • 1970-01-01
        • 1970-01-01
        • 2020-09-06
        相关资源
        最近更新 更多