【问题标题】:Get value from checkbox - 0 when unchecked, 1 when checked从复选框获取值 - 未选中时为 0,选中时为 1
【发布时间】:2021-03-11 17:18:30
【问题描述】:

我需要得到值 1 - 当复选框被选中时,0,当它未被选中时。

    <input type="checkbox" name="data[color][]" class="color" value="1" checked>

数据数组 - 存储从input 类型textselect 检索到的其他数据。它工作正常。当我尝试从checkbox 类型的input 中检索数据时,就会出现问题。 “项目”的简要说明:该脚本是同时向数据库中添加几条记录。首先,一个部分可用于数据输入,单个记录 - 单击相应按钮后使用 JS - 出现下一个部分,依此类推,直到达到一定的最大部分/可能记录数。通常,脚本可以正常工作 - 添加记录。问题在于从上述复选框获取数据的颜色列。提交表格后 - 董事会进行了重组,以某种方式更合理地呈现这一点。 PHP代码:

foreach($data as $columnName => $columnValues){
        foreach($columnValues as $rowIndex => $columnValue){
            $result[$rowIndex][$columnName] = $columnValue;
        }
}

获取价值:

foreach($result as $r => $value){
    if(isset($value['color'])){
        $color = 1;
    } else {
        $color = 0;
    }
}

虽然记录数 2 个值时未正确分配。我究竟做错了什么?如果您需要更多信息 - 请写信。我似乎已经粘贴了与此相关的所有内容。

var_dump 用于具有4 条记录的$value['color'] 时,结果如下:

string(1) "1"
string(1) "1"
NULL
NULL

只有第一个和第四个复选框被选中。

【问题讨论】:

    标签: php html


    【解决方案1】:

    与输入类型 textselect 不同,只有选中的 checkbox 输入才会被提交。所以使用动态数组[],如果你有3个并且只有第一个被选中,那么它将被提交为$_POST['data']['color'][0]。如果你只检查第三个,它也会被提交为$_POST['data']['color'][0],等等......使用当前代码无法跟踪它们。

    可能最好的方法是在默认值为0 的复选框之前使用具有相同名称的隐藏输入,以便提交所有复选框,使用01。您需要为每个指定数字索引:

     <input type="hidden" name="data[color][0]" value="0">
     <input type="checkbox" name="data[color][0]" class="color" value="1" checked>
    
     <input type="hidden" name="data[color][1]" value="0">
     <input type="checkbox" name="data[color][1]" class="color" value="1" checked>
    
     <input type="hidden" name="data[color][2]" value="0">
     <input type="checkbox" name="data[color][2]" class="color" value="1" checked>
    

    现在您将始终获得 3 个 $_POST['data']['color'] 元素,01

    【讨论】:

    • 现在我明白它是如何工作的了。不幸的是,我不能在 HTML 代码中使用数组索引,因为可以添加另一个部分,但也可以删除它,因此索引可以更改甚至重复自身(使用一个简单的变量,在添加部分时递增,在删除时递减一个部分,我在JS中无法解决这个问题。
    • 但是,如果我不使用索引,那么数组的结构会发生变化。并且复选框中的值仍然错误(最初的 2 部分除外)。预览 3 个部分(检查在第一个和最后一个): [0] => [[color] => 1 /* 和其他数据*/]],[1] => [[color] => 0 /* 和other data*/], [2] => [[color] => 0 /* And other data*/], [[颜色] => 1],[4] => [[颜色] => 0],
    • 在这种情况下,我认为最好使用带有 YES/NO 选项的 select。不过,非常感谢您的具体回答。
    猜你喜欢
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    相关资源
    最近更新 更多