使用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">×</span> </button> </div>'); redirect($_SERVER['HTTP_REFERER']); }
修正点:添加数组转字符串逻辑,确保存入数据库的是合法文本格式
额外注意事项
- 确保数据库中
igd_inim_airborne表的DESKRIPSI字段类型为VARCHAR或TEXT,长度足够存储选中项的组合内容。 - 后续读取数据时,可使用
explode(', ', $deskripsi)将字符串转回数组。
内容的提问来源于stack exchange,提问作者IMAM IHSANI
相关产品推荐
相关产品推荐

