【问题标题】:array only storing checkboxes with value 1 (not 0) [duplicate]数组仅存储值为 1(非 0)的复选框 [重复]
【发布时间】:2017-07-19 22:03:32
【问题描述】:

我有使用 JavaScript 更改值的复选框,我想将所有复选框的值存储在 PHP 数组中。但是如果用户将一个复选框的值更改为“0”,则创建的数组只有 2 个值 (1,1) 而不是 (1,0,1)。

HTML

<input type="checkbox" name="cbox1[]" checked="checked" value="1" class="chbo">
<input type="checkbox" name="cbox1[]" checked="checked" value="1" class="chbo">
<input type="checkbox" name="cbox1[]" checked="checked" value="1" class="chbo">

PHP

$wer=$_POST['cbox1'];
echo implode(",",$wer);

jQuery

$(document).on('click', '.chbo', function() {
this.value ^= 1;
console.log(this.value);
});

【问题讨论】:

  • 只发送选中的值。未检查的值不会出现在 POST 数组中。
  • 那么我如何发布值为“0”的未选中复选框?
  • 不,您的代码运行良好。谢谢。
  • 你应该接受一个答案。
  • 我该怎么做?我是新来的。

标签: php jquery arrays checkbox


【解决方案1】:

仅提交成功(检查)的控件。您需要在复选框之前添加一个具有默认值的隐藏输入。请注意,您需要对索引进行硬编码,以便隐藏的默认值与复选框值匹配:

<input type="hidden"   name="cbox1[0]" value="0" class="chbo">
<input type="checkbox" name="cbox1[0]" value="1" class="chbo" checked="checked">
<input type="hidden"   name="cbox1[1]" value="0" class="chbo">
<input type="checkbox" name="cbox1[1]" value="1" class="chbo" checked="checked">

所以如果不勾选,只会提交值为0的隐藏cbox1[0]。如果选中,则值为 1cbox1[0] 将覆盖隐藏的输入。

您现在不需要 JavaScript,因为您可以将复选框更改为值 0,但如果未选中,则不会提交。

【讨论】:

    【解决方案2】:

    提交表单后,POST 或 GET 数组中不存在未选中的复选框。要检查未选中的复选框表单元素,请使用简单的 isset() 调用。

    $wer[0]=isset($_POST['cbox1'][0]) ? $_POST['cbox1'][0]:0;
    $wer[1]=isset($_POST['cbox1'][1]) ? $_POST['cbox1'][1]:0;
    ...
    

    【讨论】:

      猜你喜欢
      • 2017-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多