POST数组不显示未选中复选框 [英] POST arrays not showing unchecked Checkboxes

查看:109
本文介绍了POST数组不显示未选中复选框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

无法获取我的POST数组以显示表单中的所有复选框值。

Having trouble getting my POST arrays to show all checkbox values from my form.

我有一个表单设置如下:

I have a form set up as follows:

<form name='foo' method='post' action=''>
    <table>
       <tr>
          <td class='bla'>Checkbox: <input type='checkbox' name='cBox[]'/></td>
      </tr>
       <tr>
          <td class='bla'>Checkbox: <input type='checkbox' name='cBox[]'/></td>
      </tr>
       <tr>
          <td class='bla'>Checkbox: <input type='checkbox' name='cBox[]'/></td>
      </tr>
   </table>
</form>

我有一个按钮在底部绑定到一个jquery函数,添加5多个空行(因此输入名为cBox []的数组)。

I have a button at the bottom bound to a jquery function that adds 5 more empty rows to the form (hence the arrays for the input name cBox[]).

现在,问题。假设第一个复选框未选中,最后2个复选框被选中。当我输出值(使用PHP print_r调试),我会得到:

Now, the problem. Lets say the first checkbox is unchecked, and the last 2 are checked. When I output the values (using PHP print_r for debugging), I will get:

Array ( [0] => on [1] => on)

由于某种原因,数组不包含任何未检查的值复选框。

For some reason, the array does not contain any value for unchecked checkboxes.

我看到一些解决方案,其中一个隐藏的变量传递每个复选框,但是这个解决方案可以实现在我的情况下(使用数组)?

I have seen some solutions where a hidden variable is passed with each checkbox, but can this solution be implemented in my situation (using arrays)?

推荐答案

这种行为并不奇怪,因为浏览器不会为未选中的复选框提交任何值。

That behavior is not surprising, as the browser doesn't submit any value for checkboxes that are unchecked.

如果你需要提交一个数组的确切数量的元素,为什么你不做同样的事情,当有一个 id 某种类型与每个复选框相关联?只需将PHP数组键名称作为< input> 元素名称的一部分:

If you are in a situation where you need to submit an exact number of elements as an array, why don't you do the same thing you do when there's an id of some sort associated with each checkbox? Just include the PHP array key name as part of the <input> element's name:

  <tr>
                                                       <!-- NOTE [0] --->
      <td class='bla'>Checkbox: <input type='checkbox' name='cBox[0]'/></td>
  </tr>
   <tr>
      <td class='bla'>Checkbox: <input type='checkbox' name='cBox[1]'/></td>
  </tr>
   <tr>
      <td class='bla'>Checkbox: <input type='checkbox' name='cBox[2]'/></td>
  </tr>

这仍然会留下一个问题,即取消选中的框仍然不会出现在数组中。这可能是也可能不是一个问题。一个,你可能真的不在乎:

That still leaves you with the problem that unchecked boxes will still not be present in the array. That may or may not be a problem. For one, you may really not care:

foreach($incoming as $key => $value) {
    // if the first $key is 1, do you care that you will never see 0?
}

即使你很小心,你也可以很容易地纠正这个问题。这里有两个直接的方法。一,只是做隐藏的输入元素技巧:

Even if you do care, you can easily correct the problem. Two straightforward approaches here. One, just do the hidden input element trick:

  <tr>
      <td class='bla'>
        <input type="hidden" name="cBox[0]" value="" />
        Checkbox: <input type='checkbox' name='cBox[0]'/>
      </td>
  </tr>
   <tr>
      <td class='bla'>
        <input type="hidden" name="cBox[1]" value="" />
        Checkbox: <input type='checkbox' name='cBox[1]'/>
      </td>
  </tr>

还有两个,我觉得更好,从PHP填写空白:

And two, which I find preferable, fill in the blanks from PHP instead:

// assume this is what comes in:
$input = array(
    '1' => 'foo',
    '3' => 'bar',
);

// set defaults: array with keys 0-4 all set to empty string
$defaults = array_fill(0, 5, '');

$input = $input + $defaults;
print_r($input);

// If you also want order, sort:

ksort($input);
print_r($input);

查看在操作

See it in action.

这篇关于POST数组不显示未选中复选框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆