Codeigniter if else分支不生效 右侧图书表单插入报1452外键错误
错误原因
你收到的1452错误是外键约束校验失败导致:tbl_borrowed_books表的book_id字段关联了tbl_books表的book_id字段,插入时传了空的book_id,不满足外键规则,因此插入失败。
代码逻辑问题
- 你用了两个独立的
if判断,没有用if...else if的分支结构,场景覆盖不全:如果两个表单都填写,$isbn1和$isbn2都不为空,两个if条件都不满足,不会执行任何插入操作;如果表单提交的空值带前后空格,empty()判断会失效,也会导致分支不触发。 - 你没有校验
book_id的有效性就直接插入,只要对应表单字段没传对值,就会出现空book_id的报错。
修正方案
1. 替换为以下代码
public function borrowers() { $sum = date('Y-m-d', strtotime("+3 days")); // 加trim清除前后空格,避免空值判断失效 $isbn1 = trim($this->input->post('serial1', true)); $isbn2 = trim($this->input->post('serial2', true)); $book_id1 = trim($this->input->post('book_id1', true)); $book_id2 = trim($this->input->post('book_id2', true)); $userid = $this->input->post('userid', true); // 仅填写左侧表单 if (!empty($isbn1) && empty($isbn2)) { if (!empty($book_id1)) { $data = [ 'book_id' => $book_id1, 'profile_id' => $userid, 'return_date' => $sum ]; $this->db->insert('tbl_borrowed_books', $data); } } // 仅填写右侧表单 elseif (empty($isbn1) && !empty($isbn2)) { if (!empty($book_id2)) { $data = [ 'book_id' => $book_id2, 'profile_id' => $userid, 'return_date' => $sum ]; $this->db->insert('tbl_borrowed_books', $data); } } // 两个表单都填写 elseif (!empty($isbn1) && !empty($isbn2)) { if (!empty($book_id1) && !empty($book_id2)) { // 插入左侧数据 $data1 = [ 'book_id' => $book_id1, 'profile_id' => $userid, 'return_date' => $sum ]; $this->db->insert('tbl_borrowed_books', $data1); // 插入右侧数据 $data2 = [ 'book_id' => $book_id2, 'profile_id' => $userid, 'return_date' => $sum ]; $this->db->insert('tbl_borrowed_books', $data2); } } }
2. 检查前端表单配置
确认右侧表单的图书ID输入框的name属性为book_id2,和代码里的字段名完全一致,无拼写错误、大小写错误。
3. 调试参数(可选)
如果修改后还是报错,可以在方法开头加一行var_dump($this->input->post());exit;,提交右侧表单查看返回的参数里是否有book_id2、值是否正常,排查前端传参问题。
内容的提问来源于stack exchange,提问作者Jade Brosas
相关产品推荐
相关产品推荐

