【问题标题】:Dynamically created radio button issue动态创建的单选按钮问题
【发布时间】:2013-03-09 09:24:55
【问题描述】:

我有一个表单,可以让用户订阅和取消订阅时事通讯,“表单”本身如下所示:

复选框是使用以下代码动态创建的:

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

我在另一个脚本中使用这些值,并将它们插入到这样的数据库中:

foreach($_POST['sub'] as $i=>$s){
$sql = mysql_query("INSERT INTO Subscriptions (Klant_ID, Mail_ID, Status, Datum) VALUES   ('".$Klant_ID."', '".$_POST['mailid'][$i]."', '".$s."', '".$Datum."')") or die(mysql_error());
}

但是问题是可以在每一行中同时选择两个复选框(基本上我可以选择所有复选框)。当我将输入类型设置为“单选”时,我只能选择 6 个单选按钮中的 1 个。有什么办法可以让它工作,所以我可以在每一行上选择 1 个单选按钮?如果您有任何问题或需要更多信息,请在 cmets 中提问。提前谢谢!

注意: 并不总是 3 行,这些行是根据数据库中的行数动态创建的。

编辑: 感谢Jueecy's answer

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

我现在只有 1 个其他问题,ID 为 1 的行不再显示。有人知道如何解决这个问题吗?^^

【问题讨论】:

  • 相反,您可以implode 发布数组并插入数据库并在显示时使用explode 显示它。
  • @DipeshParmar,也许你的意思是implode
  • @Jueecy yes..gosh 现在连打字都不会了..
  • iarc,同一个名字只能选择一个电台选项。所以你可以为每一行放置不同的名称属性?

标签: php radio-button


【解决方案1】:

有什么办法可以让它工作,这样我就可以在每一行上选择 1 个单选按钮?

当然有。您应该选择具有单选按钮并按名称对它们进行分组。只有同名的单选按钮将被限制为只有一个值:

<input type="radio" name="row1" value="x">X</input>
<input type="radio" name="row1" value="y">Y</input>

<input type="radio" name="row2" value="x">X</input>
<input type="radio" name="row2" value="y">Y</input>

我认为您可以轻松地为此设计一个适当的循环。大致如下:

<?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="checkbox" name="sub<?php echo $i; ?>" value="10"> </div></td>  
   <td><div align="center"><input type="checkbox" name="sub<?php echo $i; ?>" value="90"> </div></td>
<tr>
<?php endfor; ?>

【讨论】:

  • 嘿,我用你的循环进行了小修改(name="sub[]"),单选按钮现在可以工作了!但是,我现在遇到的问题是 ID 为 1 的第一行不再显示。知道如何解决这个问题吗?
  • @Daanvn,您能否将整个脚本粘贴到 Pastebin 并在评论中将其链接到此处?
  • 我已经解决了这个问题^^我不小心把while循环保留了,这样它就自动抓取了第二行。只需删除while循环,问题就解决了!顺便说一句!
【解决方案2】:

为此,单选按钮的名称只能按行共享,因为名称定义了一组单选,其中只能检查一个。

解决此问题显然会对您的解决方案的其余部分产生影响,但我相信您可以解决这些问题。

【讨论】:

    【解决方案3】:

    我举一个单选按钮的例子:

        <html>
        <head>
        <title>My Page</title>
        </head>
        <body>
        <form name="myform" action="http://www.mydomain.com/myformhandler.cgi" method="POST">
        <div align="center"><br>
        <input type="radio" name="group1" value="Milk" /> Milk<br />
        <input type="radio" name="group1" value="Butter" checked /> Butter<br />
        <input type="radio" name="group1" value="Cheese" /> Cheese
        <hr />
        <input type="radio" name="group2" value="Water"/> Water<br />
        <input type="radio" name="group2" value="Beer" /> Beer<br />
        <input type="radio" name="group2" value="Wine" checked /> Wine<br />
        </div>
        </form>
        </body>
        </html>
    

    要对单选框进行分组,请使用“名称”属性。 我只是将您的示例更改如下:

        <?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="sub1" value="10"> </div></td>  
           <td><div align="center"><input type="checkbox" name="sub1" value="90"> </div></td>
    
           <td><div align="center"><input type="checkbox" name="sub2" value="10"> </div></td>  
           <td><div align="center"><input type="checkbox" name="sub2" value="90"> </div></td>
        </tr>  
        <?php  
         }  
        ?>  
    

    【讨论】:

      【解决方案4】:

      每行使用一个单选按钮组或在选择订阅时使用 javascript 取消选择取消订阅,反之亦然。

      【讨论】:

        【解决方案5】:

        您可以使用此代码:它 100% 有效

        <tr>  
                    <td><div align="center">1</div></td>
                    <td><div align="center">2</div></td>  
                    <td><div align="center"><input type="radio" name="sub[1]" value="10"> </div></td>  
                    <td><div align="center"><input type="radio" name="sub[1]" value="90"> </div></td>
                </tr>  
                <tr>  
                    <td><div align="center">1</div></td>
                    <td><div align="center">2</div></td>  
                    <td><div align="center"><input type="radio" name="sub[2]" value="10"> </div></td>  
                    <td><div align="center"><input type="radio" name="sub[2]" value="90"> </div></td>
                </tr>  
                <tr>  
                    <td><div align="center">1</div></td>
                    <td><div align="center">2</div></td>  
                    <td><div align="center"><input type="radio" name="sub[3]" value="10"> </div></td>  
                    <td><div align="center"><input type="radio" name="sub[3]" value="90"> </div></td>
                </tr> 
        

        【讨论】:

        • 并不总是3行,这些行是根据数据库中有多少动态创建的。
        • 把它放在你的 for 循环中:它确实有效。
        • 还将 $i++ 放在循环的末尾。不在循环开始
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-13
        • 1970-01-01
        • 1970-01-01
        • 2011-08-24
        • 2011-07-28
        相关资源
        最近更新 更多