我有一个名为“card”的多步形式
此表格必须包含一个人的所有信息,所做的人,人的工作,使用的工具等。
为了解决这个问题并使其更酷,我制作了一个多形式步骤表单,因此当用户完成第一个表的填充数据时(为了实现他使用的工具的信息),用户点击下一步按钮,然后从其他表输入显示(项目人员已经工作)......这一直持续到用户填写所有必要的数据。为了节省工作,我正在使用foodcrud。
<form method="post" action="<?php echo base_url();?>controller/save" name="form"/>
<label>User Name</label>
<input type="text" name="Username">
<input type="submit" value="Add"/>
<!--#######################
Several more data to store in distict tables
#######################
-->
</form>
in controller:
function save
{
$arrData["Username"] = $this->input->post("Username");
$this->User_model->Add($arrData);
}
in User_model
function Add($arrData) {
if($this->db->insert(tableName, $arrData))
return true;
else
return false;
}
当重定向到控制器时,如果我只填充一个表,那么一切都会有效。
问题是我不知道如何将相应的数据存储到其他涉及的表中。 因此,如果我在 tableName 中插入新注册表,则会分配新ID。现在我想使用这个最近分配的ID将其用作其他表中的其他必需字段(相关表将此ID作为外键)
如何解决这个问题有:
$last_id = $user->id;
所以我继续将数据插入到其他表中,
使用
是否有用$crud->set_relation('column','table','column');
也许是一个回调者,有没有人做过像从一个表单插入多个相关表格的东西?
答案 0 :(得分:1)
因此,如果我正确理解您,您需要在第一次插入后将userId保存到多个表中吗?这很简单,只需将id保存到会话中(如果此人登录到您的应用程序,您应该在登录时执行此操作)。
初始插入运行后,您可以调用:
$this->session->set_userdata('userId',$this->db->insert_id());
然后,只要您需要该ID,只需将其从会话中拉回来,例如。
$array = (
'tool'=>'hammer',
'userId'=>$this->session->userdata('userId')
);
$this->db->insert('tool_table',$array);
答案 1 :(得分:0)
首先,我建议您使用单个表来存储所有信息。但是因为它的多步操作因此您创建了几个表来存储它们,因为您将数据保存在块中。
这是一个快速的想法。
不是将数据存储到多个表中,而是将其保存在单个表中。当您插入第一个表单时,您将获得id并将此id存储在session / other_techniques中。在此之后,您可以使用更新查询将其余信息插入到同一个表中。
好处是,当您想要获取信息时,您不必进行连接和连接会降低查询速度。