【问题标题】:Passing selected checkbox from array data into database with Codeigniter使用 Codeigniter 将选定的复选框从数组数据传递到数据库
【发布时间】:2024-01-03 18:36:01
【问题描述】:

我是 codeigniter 的新手。我试图将数据出勤率传递到数据库中。

这是我的视图代码

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

当我检查 1 名员工出勤时(例如 4630 是工作),数据可以传递到数据库,但结果是这样的(见图 2)

所有数据视图输入到数据库,而不是之前检查 1 时的数据,并备注 WORK 插入到第 1 行。

这是我的控制器

function add_attend()
{
    $employee   = $this->input->post('employee');
    $location   = $this->input->post('location');
    $detail     = $this->input->post('detail');
    $note       = $this->input->post('note');
    $total      = count($employee);
    if (empty($detail) === true) { $errors['detail'] = 'please select one';}

    if (!empty($errors)){
        $info['success'] = false;
        $info['errors']  = $errors;
    }

    else {
        for ($x=0; $x<$total; $x++){
        $data = array(
            'sn'    => $employee[$x],
            'lab'   => $location[$x],
            'stat'  => $detail[$x],
            'note'  => $note[$x]
            );          
        $this->m_human_capital->insert_attend($data);
        }

        $info['success'] = true;
    }
    $this->output->set_content_type('application/json')->set_output(json_encode($info));
}

这是我的模特

function insert_attend($data)
{
    $this->db->insert('tb_attend_tes',$data);
}

我只想插入我检查过的员工出勤率。请帮忙

感谢任何人的帮助。

对不起我的英语不好

【问题讨论】:

  • 您的note 字段在哪里?因为如果它与您的出勤列表在同一行 - 您的数据库结构没有任何意义......您的出勤需要一个 m:n 关系,但您的笔记只需要 1:1 关系 - 或者应该为每次出勤重复记录?
  • 很抱歉缺少部分图片,图片右侧的NOTE字段,如果为空也没有问题。我已经尝试填写注释,但问题仍然存在。
  • 没人能帮我吗?
  • @MardinoIsmail 你可以在插入数据库之前打印数组添加到答案中
  • @saurabhkamble 查看图片编号。 1. 像那样?

标签: php mysql codeigniter


【解决方案1】:

在您的员工考勤输入名称上添加一个标识符,以便每个员工都有自己独特的考勤数据集。

查看:

    ...
    <td><input type="checkbox" name="detail[<?php echo $no-1 ?>][]" value="<?php echo $list['details']"></td>
    ...

由于考勤输入是一个多维数组,对于empty验证,您可以使用array_filter来检查整个考勤数组。

由于您将数组数据类型插入到单个列中,您需要将其连接起来,您可以使用implode() 函数。

控制器:

function add_attend()
{
    $employee   = $this->input->post('employee');
    $location   = $this->input->post('location');
    $detail     = $this->input->post('detail');
    $note       = $this->input->post('note');
    $total      = count($employee);
    $filtered_detail = array_filter($detail);
    if (empty($filtered_detail) === true) {
        $errors['detail'] = 'please select one';
    }

    if (!empty($errors)){
        $info['success'] = false;
        $info['errors']  = $errors;
    }

    else {
        for ($x=0; $x<$total; $x++){
            $data = array(
                'sn'    => $employee[$x],
                'lab'   => $location[$x],
                'stat'  => (isset($detail[$x]) && !empty($detail[$x])) ? implode(",",$detail[$x]) : '',
                'note'  => $note[$x]
                );          
            $this->m_human_capital->insert_attend($data);
        }

        $info['success'] = true;
    }
    $this->output->set_content_type('application/json')->set_output(json_encode($info));
}

【讨论】:

  • 像这样 ?我试过你的代码,但我有错误消息。
  • NO.. 仅用于detail 输入
  • 哦。好的。忘记了我的第一条评论。我试过像你的代码一样。但现在数据没有插入数据库,我在'stat'行收到错误消息未定义的偏移量。如果我回到办公室,我会告诉你错误细节。
最近更新 更多