CodeIgniter 3 保存动态HTML表格数据到数据库报错求助
CodeIgniter 3 保存动态HTML表格数据到数据库报错求助
嘿,我帮你排查了代码里的问题,这几个点应该是导致报错的核心原因,咱们逐个修正:
1. 数据库插入语句的语法错误
你模型里的这行代码有明显问题:
$this->db->insert('event_ticket_prices',$data[]);
insert()方法需要传入一维数组作为单条记录的数据,而$data[]会把原本的一维数组包装成二维数组,框架根本无法正确解析。应该改成:
$this->db->insert('event_ticket_prices',$data);
2. 循环内数组初始化的小细节
虽然你每次循环都给$data的键赋值,但最好在循环内每次都重新初始化$data数组——避免后续扩展字段时,意外残留上一次循环的键值,修改后循环部分如下:
foreach ($price_description as $key => $value) { // 每次循环重新初始化数组,避免数据残留 $data = []; $data['event_id'] = $event_insert_id; $data['price_description'] = $value; $data['price'] = $price[$key]; $this->db->insert('event_ticket_prices',$data); }
3. 替换直接使用$_POST的写法
CodeIgniter提供了更安全的输入处理类,建议把直接调用$_POST的写法换成框架方法,避免潜在的安全风险:
$price_description = $this->input->post('description'); $price = $this->input->post('price');
4. 规范事务的使用流程
当前代码只调用了trans_complete(),但缺少事务开启的步骤,完整的事务流程能保证所有插入操作的原子性,避免部分插入成功部分失败的情况:
$this->db->trans_start(); // 开启事务 // 静态数据插入(你的原有代码) $query_status = $this->db->insert('events', $register_data_array); $event_insert_id = $this->db->insert_id(); // 动态票价数据插入 $price_description = $this->input->post('description'); $price = $this->input->post('price'); if (!empty($price_description) && !empty($price)) { foreach ($price_description as $key => $value) { $data = []; $data['event_id'] = $event_insert_id; $data['price_description'] = $value; $data['price'] = $price[$key]; $this->db->insert('event_ticket_prices', $data); } } $this->db->trans_complete(); // 完成事务 // 检查事务执行状态 if ($this->db->trans_status() === FALSE) { // 事务失败时的处理逻辑,比如返回错误 return false; } else { return true; }
额外提醒
你的HTML部分逻辑没问题,但要确保前端点击「Add More」按钮的JS代码,能正确克隆输入框并保持name="description[]"和name="price[]"的命名格式,这样后端才能正确接收到数组形式的参数。
备注:内容来源于stack exchange,提问作者dinesh
相关产品推荐
相关产品推荐

