You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CodeIgniter无法将复选框数据存入数据库的问题求助

问题分析与解决

你的代码存在三个核心问题,导致复选框数据无法正常存入数据库:

1. 复选框未设置有效value值

当前所有复选框的value=""为空,即使选中也无法传递有效内容到后端。

2. 多选框未使用数组命名

多个同类型复选框的name必须设为数组形式name="DESKRIPSI[]",否则后端只能获取到最后一个选中项(甚至无法获取多个选项)。

3. 后端未处理数组格式的提交数据

直接将数组存入数据库文本类型字段会导致存储失败,需要先把数组转换为字符串格式(比如逗号分隔)。


修复后的视图代码

<form method="post" action="<?php echo base_url().'igd/igd/input_airborne'?>">
    <?php echo $this->session->flashdata('message_airborne');?>
    <input type="text" class="form-control" name="KUNJUNGAN" value="<?php echo $igd->NOMOR ?>" readonly>
    <input type="datetime-local" class="form-control" name="TANGGAL" value="<?php echo date("Y-m-d H:i:s") ?>">
    <input type="text" class="form-control" name="OLEH" value="<?php echo $session_user->nip?>" readonly>
    <input type="text" class="form-control" name="STATUS" value="1" readonly>

    <div class="form-check">
        <input class="form-check-input" type="checkbox" value="TBC AKtif" name="DESKRIPSI[]" id="defaultCheck1">
        <label class="form-check-label" for="defaultCheck1">
            TBC AKtif
        </label>
    </div>
    <div class="form-check">
        <input class="form-check-input" type="checkbox" value="Campak" name="DESKRIPSI[]" id="defaultCheck2">
        <label class="form-check-label" for="defaultCheck2">
            Campak
        </label>
    </div>
    <div class="form-check">
        <input class="form-check-input" type="checkbox" value="MDR TB" name="DESKRIPSI[]" id="defaultCheck3">
        <label class="form-check-label" for="defaultCheck3">
            MDR TB
        </label>
    </div> 
    <button class="btn btn-sm btn-success mt-1 mb-1"> Masukkan</button>
</form>

修正点:给每个复选框设置对应value、name改为数组形式DESKRIPSI[]、修复重复的id值

修复后的控制器代码

public function input_airborne(){
    // 获取复选框数组,未选中则设为空数组
    $deskripsi_array = $this->input->post('DESKRIPSI') ?? [];
    // 将数组转为逗号分隔的字符串,适配数据库文本字段存储
    $DESKRIPSI = implode(', ', $deskripsi_array);
    
    $TANGGAL = $this->input->post('TANGGAL');
    $OLEH = $this->input->post('OLEH');
    $STATUS = $this->input->post('STATUS');
    $KUNJUNGAN = $this->input->post('KUNJUNGAN');

    $data = array(
        'DESKRIPSI' => $DESKRIPSI,
        'TANGGAL' => $TANGGAL,
        'OLEH' => $OLEH,
        'STATUS' => $STATUS,
        'KUNJUNGAN' => $KUNJUNGAN
    );
    $this->M_Igd->input_airborne($data, 'igd_inim_airborne');
    $this->session->set_flashdata('message_airborne','<div class="alert alert-success alert-dismissible mt-1 fade show" role="alert">
                                            Airborne berhasil dimasukkan
                                            <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                                            <span aria-hidden="true">&times;</span>
                                            </button>
                                            </div>');
    redirect($_SERVER['HTTP_REFERER']);
}

修正点:添加数组转字符串逻辑,确保存入数据库的是合法文本格式


额外注意事项

  • 确保数据库中igd_inim_airborne表的DESKRIPSI字段类型为VARCHAR或TEXT,长度足够存储选中项的组合内容。
  • 后续读取数据时,可使用explode(', ', $deskripsi)将字符串转回数组。

内容的提问来源于stack exchange,提问作者IMAM IHSANI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 04:35:47