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

Codeigniter if else分支不生效 右侧图书表单插入报1452外键错误

错误原因

你收到的1452错误是外键约束校验失败导致:tbl_borrowed_books表的book_id字段关联了tbl_books表的book_id字段,插入时传了空的book_id,不满足外键规则,因此插入失败。

代码逻辑问题

  1. 你用了两个独立的if判断,没有用if...else if的分支结构,场景覆盖不全:如果两个表单都填写,$isbn1和$isbn2都不为空,两个if条件都不满足,不会执行任何插入操作;如果表单提交的空值带前后空格,empty()判断会失效,也会导致分支不触发。
  2. 你没有校验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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:45:10