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

CodeIgniter多行插入实现:问卷视图多行数据(no_soal与jawaban)提交

在CodeIgniter中实现问卷多行题目与答案的批量插入

嘿,我来帮你搞定这个问卷多行数据插入的问题!下面一步步给你拆解实现方案:

第一步:完善你的视图代码

先把你给出的视图片段补全,确保每个题目对应的no_soal和jawaban能正确关联。这里分两种情况处理:

情况1:单选问卷(推荐)

如果是单选类型,把checkbox改成radio,并给每个题目对应的答案组设置统一的命名jawaban[题目编号],避免提交时数据混乱:

<form method="post" action="<?= base_url('survey/submit') ?>">
<table>
    <!-- 题目1 -->
    <tr>
        <td>1</td>
        <td>
            <input type="hidden" value="1" name="no_soal[]">
            apakah anda sehat
        </td>
        <td><input type="radio" value="-5" name="jawaban[1]" required></td>
        <td><input type="radio" value="-3" name="jawaban[1]" required></td>
        <td><input type="radio" value="-1" name="jawaban[1]" required></td>
        <td><input type="radio" value="1" name="jawaban[1]" required></td>
        <td><input type="radio" value="3" name="jawaban[1]" required></td>
        <td><input type="radio" value="5" name="jawaban[1]" required></td>
    </tr>
    <!-- 题目2 -->
    <tr>
        <td>2</td>
        <td>
            <input type="hidden" value="2" name="no_soal[]">
            apakah anda tidur nyenyak
        </td>
        <td><input type="radio" value="-5" name="jawaban[2]" required></td>
        <td><input type="radio" value="-3" name="jawaban[2]" required></td>
        <td><input type="radio" value="-1" name="jawaban[2]" required></td>
        <td><input type="radio" value="1" name="jawaban[2]" required></td>
        <td><input type="radio" value="3" name="jawaban[2]" required></td>
        <td><input type="radio" value="5" name="jawaban[2]" required></td>
    </tr>
    <!-- 更多题目以此类推 -->
    <tr>
        <td colspan="8">
            <button type="submit" name="submit">Kirim Jawaban</button>
        </td>
    </tr>
</table>
</form>

情况2:多选问卷

如果是多选,把答案命名改成jawaban[题目编号][],这样每个题目会提交一个答案数组:

<input type="checkbox" value="-5" name="jawaban[1][]">
<input type="checkbox" value="-3" name="jawaban[1][]">
<!-- 其他选项同理 -->

第二步:控制器处理提交数据

在你的控制器(比如Survey.php)里创建提交处理方法,整理表单数据后传给模型:

public function submit()
{
    if ($this->input->post('submit')) {
        // 获取提交的题目编号和答案
        $no_soal_list = $this->input->post('no_soal');
        $jawaban_list = $this->input->post('jawaban');

        // 整理批量插入的数据
        $insert_data = [];
        foreach ($no_soal_list as $no_soal) {
            // 单选情况:直接取对应答案
            $jawaban = isset($jawaban_list[$no_soal]) ? $jawaban_list[$no_soal] : null;
            
            // 多选情况:把答案数组转成逗号分隔的字符串存储
            // $jawaban = isset($jawaban_list[$no_soal]) ? implode(',', $jawaban_list[$no_soal]) : null;

            if ($jawaban !== null) {
                $insert_data[] = [
                    'no_soal' => $no_soal,
                    'jawaban' => $jawaban,
                    'created_at' => date('Y-m-d H:i:s') // 可选:添加提交时间
                ];
            }
        }

        // 调用模型插入数据
        if (!empty($insert_data)) {
            $this->load->model('Survey_model');
            $is_success = $this->Survey_model->save_batch_answers($insert_data);
            
            if ($is_success) {
                $this->session->set_flashdata('success', 'Jawaban berhasil disimpan!');
                redirect('survey/thankyou');
            } else {
                $this->session->set_flashdata('error', 'Terjadi kesalahan saat menyimpan data');
                redirect('survey');
            }
        } else {
            $this->session->set_flashdata('error', 'Silakan isi jawaban terlebih dahulu');
            redirect('survey');
        }
    } else {
        redirect('survey');
    }
}

第三步:模型实现批量插入

创建Survey_model.php模型,利用CodeIgniter的insert_batch方法高效批量插入:

class Survey_model extends CI_Model
{
    public function __construct()
    {
        parent::__construct();
        $this->load->database();
    }

    // 批量插入问卷答案
    public function save_batch_answers($data)
    {
        // 假设你的数据库表名为survey_jawaban
        return $this->db->insert_batch('survey_jawaban', $data);
    }
}

关键注意事项

  • 数据库表survey_jawaban需要包含no_soal(题目编号)、jawaban(答案)字段,建议添加自增主键id和时间字段created_at。
  • 多选场景下,未选中的checkbox不会被提交,你可以在控制器里给未作答的题目设置默认值(比如0),或者跳过插入。
  • 可以结合CodeIgniter的表单验证类,添加必填项校验,让逻辑更严谨。

内容的提问来源于stack exchange,提问作者Mukhammad Arifin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:23:38