【问题标题】:Send values to db when multiple checkboxes are checked选中多个复选框时将值发送到 db
【发布时间】:2016-05-12 08:01:50
【问题描述】:

我正在将一些数据从 db 表加载到复选框。当用户选中复选框并提交时,需要将这些复选框的值添加到不同的表中。使用我现在拥有的代码,我可以发送一个复选框的值。我在发送所有选中复选框的值时遗漏了什么?

<table>
    <?php       
    $q5=mysqli_query($link,"SELECT * FROM brands_offer WHERE Brand_Id='$bid' AND Published='1' ");
    while($row5 = mysqli_fetch_array($q5)){
        $catid= $row5['Catg_Id'];
        $subcatid= $row5['Subcatg_Id'];
        $pid= $row5['Product_Id'];      
    ?><tr><td>
    <form action="store-admin.php?search=<?php echo $stname;?>#stock" method="post">
    <input type="checkbox" name="checkbox" value="<?php echo "$bname,$catid,$subcatid,$pid";?>" >
    <?php
        echo $bname;
        echo " ->  ";
        echo $catid;
        echo ",  ";
        echo $subcatid;
        echo ",  ";
        echo $pid;
        echo "  ";
    }
    ?></td></tr>
    <input type="submit" value="Save Changes" name="add" >
    </form>
    </table>
    <?php
    if(isset($_POST['add']))
    {
    $chk = $_POST['checkbox'];

    $val = explode(",",$chk);
    $bn = $val[0];
    $cid= $val[1];
    $scid= $val[2];
    $prid= $val[3];

    echo "<script type='text/javascript'>alert('brand: ". $bn."')</script>";
    echo "<script type='text/javascript'>alert('cat: ". $cid."')</script>";
    echo "<script type='text/javascript'>alert('sub: ". $scid."')</script>";
    echo "<script type='text/javascript'>alert('pr: ". $prid."')</script>";

    }?>

【问题讨论】:

    标签: php mysql checkbox


    【解决方案1】:

    在您的复选框名称属性 name="checkbox[]" 中使用括号,您的 post 变量将是一个选定值的数组。

    编辑:我注意到您在 while 循环中有表单开始标记。你需要把它放在 while 循环之前,否则它会生成大量的打开表单标签。

    【讨论】:

    • 只需name="checkbox[]" 就足够了吗?无需更改获取值的if(isset
    • @YohanBlake 是的,无需更改,您唯一需要的显然是循环 post 变量以获取所有值。
    • 是的,我尝试在 while 循环中包含 POST 代码,但它不起作用。如何循环 POST 变量?
    • @YohanBlake 查看更新的答案,并展示您如何循环 POST 变量。
    • 好的,我在 while 循环之前添加了打开的表单并做了 name="checkbox[]" ,现在我没有在 POST 中获取任何值。我不确定如何循环 POST 变量
    【解决方案2】:

    所以看起来你只有一个复选框。如果您想将所有复选框的值作为数组发布,我相信您需要将 [] 添加到您的 input 字段的 name 中。所以:

    <input type="checkbox" name="checkbox[]" value="<?php echo "$bname";?>"/>
    <input type="checkbox" name="checkbox[]" value="<?php echo "$catid";?>"/>
    <input type="checkbox" name="checkbox[]" value="<?php echo "$subcatid";?>"/>
    <input type="checkbox" name="checkbox[]" value="<?php echo "$pid";?>"/>
    

    希望我能理解你的问题。

    【讨论】:

    • 只是 name="checkbox[]" 就足够了吗?无需更改 if(isset 我在哪里获取值?
    • @YohanBlake 不是我能看到的。当您对多个输入字段使用相同的名称时,您会覆盖 post 参数,除非您将 [] 附加到名称。这会将 POST 参数加载为“数组”而不是“普通”键:值对。
    • 他有多个通过while循环生成的复选框。
    • 啊,不错,没看到。
    • @YohanBlake,TheDrot 首先发表了评论,他的回答应该足以被标记为正确。
    猜你喜欢
    • 2013-08-09
    • 2020-12-01
    • 2011-02-09
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 2018-04-27
    相关资源
    最近更新 更多