【问题标题】:Codeigniter inserting multiple rows into DB using one query from a formCodeigniter 使用表单中的一个查询将多行插入数据库
【发布时间】:2020-08-01 04:26:35
【问题描述】:
  • 这是模型:
public function saveShifts($data) { 

        $this->db->db_debug = FALSE;
        $error = NULL;
        if (!$this->db->insert('shifts', $data)) {
            $error = $this->db->error();
        }
        return $error; 
}
  • 这是控制器:
public function saveShifts(){

            $data = array (
                'user_id' => $_SESSION['id'],
                'day' => $this->input->post('day'),
                'time' => $this->input->post('time'),
                );

        $this->Shifts_model->saveShifts($data);
}
  • 这是风景:

我无法发布它,因为它会在我发布时消失。

因此,视图包含一个表单,其中包含一周中每一天的单选按钮选择。您可以选择早上或晚上。

MySql DB结构为:当key为user_id和day时

+---------+---------+--------+

| day      | time    | user_id|

+---------+---------+--------+

| Sunday  | morning | 1      |

+---------+---------+--------+

| Monday  | evening | 1      |

+---------+---------+--------+

嗯,我在使用一个查询向数据库插入多行时遇到问题。 在视图中,表单包含供每个用户每天选择的单选按钮。 每次只插入一行(最后一行)。

【问题讨论】:

  • 需要查看代码给你一个建议。但是这个问题可能会对你有所帮助:stackoverflow.com/q/6152436/12731030
  • 我试过这种方法,但没有奏效。我会尝试再次发布表单

标签: forms codeigniter sql-insert


【解决方案1】:

首先,您应该更新您的视图表单以支持每天的值。您应该将单选按钮命名为 day[] 和 time[]。

对于在一个查询中插入多行,您可以使用 CodeIgniter insert_bacth 方法。通过使用这种方法,您的控制器和模型将如下所示:

  • 型号
public function saveShifts($data) { 
    return $this->db->insert_batch('shifts', $data);
}
  • 控制器
public function saveShifts() {
    $data = array();

    $days = $this->input->post('day[]');
    $times = $this->input->post('time[]');

    foreach ($days as $key => $day) {
        $data []  = array(
            'user_id' => $_SESSION['id'],
            'day'     => $day,
            'time'    => $times[$key],
        );
    }

    $this->Shifts_model->saveShifts($data);
}

【讨论】:

  • 谢谢。我还是有问题。我的表单每天包含 7 个输入标签(星期日 - 星期六),我使用 type=radio。因此,由于它们都具有与控制器中声明的相同名称(日期和时间),因此它只读取其中一天和所有 7 天,我的意思是它在最后只添加一行。
  • 您是否按照我在答案中所说的那样测试了重命名输入?
  • 是的,谢谢你成功了。另一个问题,当我试图在我的视图中显示 $data 时,正确的语法是什么,例如 $data['username'] 不起作用,也许 $data[I]['username'] 带有 foreach 循环?
  • 这取决于您发送查看的数据结构。详细解释请阅读here。
  • 你能检查我的视图代码吗,因为它只插入第一行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
  • 2016-02-17
  • 1970-01-01
  • 2018-10-01
  • 1970-01-01
  • 2014-02-14
  • 1970-01-01
相关资源
最近更新 更多