具有已检查和未检查值的多个Checkboxes数组

时间:2013-12-26 09:40:48

标签: php

所以我有这行代码会在表单中重复不同的时间。

<input type="checkbox" name="checkbox[]" /> !checked
<input type="checkbox" name="checkbox[]" /> !unchecked
<input type="checkbox" name="checkbox[]" /> !checked
<input type="checkbox" name="checkbox[]" /> !unchecked

!勾选显示复选框已选中且未选中!表示未选中该复选框。

我如何创建一个php数组来按顺序获取已选中和未选中复选框的值:

array( 0 => checked, 1 => unchecked, 2 => checked, 3 => unchecked );

我暂时可以使用$ _POST [“复选框”]获得已检查的值,但我无法获得未经检查的值。

6 个答案:

答案 0 :(得分:1)

首先,您需要为复选框添加一个值:

<input type="checkbox" name="checkbox[]" value="checkboxNchecked" /> !checked

否则你无法真正区分你的复选框。

然后:如果选中它们,您的复选框将返回一个值,或者在取消选中时将忽略它们。您不会获得NULLFALSE或其他值。它不会通过POST / GET转移到您的PHP脚本,就好像它不是您的HTML代码。这包括以下主题:Does <input type="checkbox" /> only post data if it's checked?

如果你知道有多少复选框和它们被称为什么 - 没有问题 - 但如果你没有,你需要找到解决方法。如果您告诉我们您的复选框的性质,我们可以帮助您找到量身定制的解决方案。

答案 1 :(得分:0)

这将仅打印选中的字段,因为未选中的字段不会发送到服务器。 你将不得不做一些javascript和隐藏的字段技巧 看看这里
Post the checkboxes that are unchecked

<input type="checkbox" name="checkbox[n1]" /> !checked
<input type="checkbox" name="checkbox[n2]" /> !unchecked
<input type="checkbox" name="checkbox[n3]" /> !checked
<input type="checkbox" name="checkbox[n4]" /> !sdsk

 foreach($_POST['checkbox'] as $key => $value){
    $checkbox[$key] = 'checked';
 }
 print_r($checkbox); // your new array

答案 2 :(得分:0)

你可以使用jquery和ajax。在您的提交事件中,从表单中获取所有值并通过ajax提交。你可以像这样在jquery中得到未经检查的值:

$("input:checkbox:not(:checked)") 

if ($('#idOfYourCheckBox:checked').length > 0) {

     //its checked
} 
else {
//not checked
}

答案 3 :(得分:0)

解决:

表格声明......

<form id="form1" name="form1" method="post" action="xx.php" onSubmit="set_hidden_value()">
<input name="arrayofchecks" type="hidden" value="toset" />
...

的OnSubmit:

function set_hidden_value()
{
var checkstring = "";
for (var i=0; i < $('#checkbox').length; i++)
{
    if ($('#checkbox')[i].checked)
    {
     checkstring = checkstring + "1";
    }
    else
    {
     checkstring = checkstring + "0";
    }
}
$('#arrayofchecks').val(checkstring);

结果是一个字符串,其值已选中且未选中(1和0)...

在我的情况下,我使用ajax拦截提交并在这里做set_hidden_​​value ......

答案 4 :(得分:0)

如果您使用的是像PHP这样的服务器端语言,那么使用隐藏字段提供默认或编写javascript的方法比较简单(如果用户的设备/浏览器不支持该方法,则两者都可能失败)。

    <input type="checkbox" value="choice1" name="checkbox[]" />
    <input type="checkbox" value="choice2" name="checkbox[]" />
    <input type="checkbox" value="choice3" name="checkbox[]" />

此方法不会返回未选中的项目,但会明确标识已检查的项目。否则,如果复选框都具有相同的值,则只需重复一个,两个或三个值,不知道检查了哪个项目。但是,假设使用上述方法检查了choice2,那么很容易弄清楚项目1和3因此未被检查。

答案 5 :(得分:0)

请检查以下代码。

     $("button").click(function () {
     var i=0;
     var cbox=[]; 
        $("input[name='cbox']").each(function () {
            if($(this).is(':checked')) {
                cbox[i++] = $(this).val();
           }else{
                cbox[i++] = "unchecked";
           }
         });
         console.log(cbox);
          i = 0;
               
     });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<input type="checkbox" value="checked" name="cbox">
<input type="checkbox" value="checked" name="cbox">
<input type="checkbox" value="checked" name="cbox">
<input type="checkbox" value="checked" name="cbox">
<button>Click</button>

相关问题