-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)、結果セットから1行をフェッチします。したがって、これを行うときは、その直後に:

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

結果セットの2番目の行をフェッチしており、それがで使用しているものです$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 の 2 つのループをネストしました。どちらも同じ作業を行っているようです (つまり、結果セットから行をフェッチします)。したがって、基本的にwhile最初の行は最初の「消費」です。あなたはそれを取り除くべきです。

于 2013-03-20T14:04:12.587 に答える