【问题标题】:Get checkbox value as zero if not selected [duplicate]如果未选中,则将复选框值设为零 [重复]
【发布时间】:2018-05-25 15:41:56
【问题描述】:

我有 3 个复选框,我将这些复选框的值存储到数据库中。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<ul>
  <li><input type="checkbox" value="1" name="estate-checkbox[]"></li>
  <li><input type="checkbox" value="2" name="estate-checkbox[]"></li>
  <li><input type="checkbox" value="3" name="estate-checkbox[]"></li>
</ul>

服务器端:

if(isset($_POST['estate-checkbox'])){
    $safeestatecheckbox = implode(",",$_POST["estate-checkbox"]);
} else {
    $safeestatecheckbox = '';
}

如果用户选中所有复选框,它将像这样存储在数据库中:

1, 2, 3

如果选择一个,或者只选择两个,它会像这样存储:

1, 3

如果用户没有选择一个复选框,我希望它作为零存储到数据库中,像这样

1, 0, 3

所以问题是,如果未在 $_POST['estate-checkbox'] 中选中,我如何才能将复选框值设为 0?

【问题讨论】:

  • 如果没有给出值,为什么不在服务器端检查,在这种情况下使用 0?无论如何,您都需要验证服务器上的输入。
  • @Taplar 在其他页面上,我从数据库中获取它作为包含 3 个项目的数组,我根据这些值显示图标。所以我需要在数据库中始终有 3 个值,另一方面,数组中有 3 个项目
  • 当用户提交时,您仍然需要在服务器上验证您的输入。没有什么可以阻止用户右键单击您的页面,检查和元素,并将其中一个值更改为 504 或他们想要的任何值。
  • 无法自动获取,您需要在 PHP 代码中进行。
  • 为什么需要0?难道你不能检测到2 不在数组中吗?

标签: php jquery


【解决方案1】:

只有选中的框被发送到服务器,没有办法让它为未选中的框发送另一个值。

您可以在PHP中填写缺失值:

$estates = [];
$estate_checkboxes = array_flip($_POST['estate-checkbox']);
for ($i = 1; $i <= $max_estates; $i++) {
    if (isset($estate_checkboxes[$i])) {
        $estates[] = $i;
    } else {
        $estates[] = 0;
    }
}

$safeestatecheckbox = implode(', ', $estates);

【讨论】:

  • 还有$max_estates ? 3?
  • 将其设置为复选框的最大数量。如果复选框是在客户端动态创建的,则需要将计数作为隐藏输入发送。
  • 两件事,一个未闭合的括号。但它在数据库中存储空(无),知道吗?
  • 不知道为什么。顺便说一句,在数据库中存储逗号分隔的列表是糟糕的设计,你应该规范你的表。
  • 好的,让我自己检查一下。我不知道 normalize your tables 是什么意思,如果我想存储复选框值,除了逗号分隔,我该怎么做?
【解决方案2】:

一种选择是有一个hidden 字段来更新复选框的每次点击

$('[name="estate-checkbox[]"]').click(function() {
  var arr = [];
  $('[name="estate-checkbox[]"]').each(function() {
    if ($(this).prop('checked')) arr.push($(this).val());
    else arr.push(0);
  })

  $('[name="estate-checkbox-values"]').val(arr);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
  <li><input type="checkbox" value="1" name="estate-checkbox[]"></li>
  <li><input type="checkbox" value="2" name="estate-checkbox[]"></li>
  <li><input type="checkbox" value="3" name="estate-checkbox[]"></li>
</ul>

<!----- Change into type hidden ----->
<input type="text" name="estate-checkbox-values"> 

在你的 PHP 上:

if(isset($_POST['estate-checkbox-values'])){
    $safeestatecheckbox = $_POST['estate-checkbox-values'];
} else {
    $safeestatecheckbox = '';
}

【讨论】:

    【解决方案3】:
    if(isset($_POST['estate-checkbox'])){
        $temp = [1, 2, 3];
        foreach($temp as $key => $val){
            if(array_search($val, $_POST['estate-checkbox']) === false){
                $temp[$key] = 0;
            }
        }
        $safeestatecheckbox = implode(',', $temp);
    } else {
        $safeestatecheckbox = '';
    }
    

    【讨论】:

      猜你喜欢
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-17
      • 1970-01-01
      • 2016-03-04
      相关资源
      最近更新 更多