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

CodeIgniter新手求助:仅插入选中的考勤复选框数据到数据库

解决CodeIgniter考勤数据仅插入勾选员工的问题

我明白你遇到的问题了——现在不管有没有勾选考勤,所有员工的数据都会被插入数据库,这是因为你的代码在遍历所有员工,而不是只处理被勾选的那些。下面是具体的解决步骤:

1. 调整视图:让表单字段与员工SN关联

首先要修改视图代码,让每个考勤复选框、备注和位置字段都绑定到对应的员工SN,这样提交后我们能区分哪些员工被勾选了。修改后的视图片段如下:

<?php $no=1; foreach($employee AS $list_emp) { 
    $sn = $list_emp->sn;
?> 
<tr> 
<td><?= $no ?></td> 
<td><input type="hidden" name="employee[<?= $sn ?>]" value="<?= $sn ?>"><?= $list_emp->name; ?></td> 
<td><?= $list_emp->position; ?></td> 
<?php foreach ($attend_detail AS $list) {?> 
<td><input type="checkbox" name="detail[<?= $sn ?>]" value="<?= $list['details'] ?>"></td> 
<?php } ?> 
<td><input type="text" name="note[<?= $sn ?>]"></td> 
<input type="hidden" name="location[<?= $sn ?>]" value="<?= $list_emp->branch; ?>"> 
</tr> 
<?php $no++;} ?>

这里的核心改动是把表单字段的name属性从普通数组(比如detail[])改成以员工SN为键的关联数组(比如detail[<?= $sn ?>]),这样提交后,只有被勾选的员工会出现在detail数组里,且键就是员工的SN。

2. 修改控制器:只处理被勾选的员工数据

接下来调整控制器的add_attend()函数,不再遍历所有员工,而是直接遍历被勾选的detail数组,这样就能只插入选中的考勤记录:

function add_attend() { 
    $employee = $this->input->post('employee'); 
    $location = $this->input->post('location'); 
    $detail = $this->input->post('detail'); 
    $note = $this->input->post('note'); 
    $errors = [];

    if (empty($detail)) { 
        $errors['detail'] = 'Please select at least one attendance record';
    } 

    if (!empty($errors)){ 
        $info['success'] = false; 
        $info['errors'] = $errors; 
    } else { 
        // 遍历所有被勾选的员工($sn是员工编号,$stat是考勤状态)
        foreach ($detail as $sn => $stat) { 
            $data = array( 
                'sn' => $sn, 
                'lab' => $location[$sn], 
                'stat' => $stat, 
                'note' => !empty($note[$sn]) ? $note[$sn] : '' // 处理空备注的情况
            ); 
            $this->m_human_capital->insert_attend($data); 
        } 
        $info['success'] = true; 
    } 
    $this->output->set_content_type('application/json')->set_output(json_encode($info)); 
}

关键说明:

  • $detail数组现在是关联数组,键是员工SN,值是选中的考勤状态,所以遍历它就能精准获取所有需要插入的员工。
  • 我们通过SN直接从location和note数组中获取对应员工的信息,确保数据匹配。

3. 模型无需修改

你的insert_attend()模型函数已经能正常插入单条数据,不需要做任何改动。

这样调整后,只有被勾选考勤的员工数据会被插入数据库,完美解决你的问题!

内容的提问来源于stack exchange,提问作者Mardino Ismail

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:54:00