0

我有一个称为“卡片”的多步骤表格

此表格必须包含一个人的多个信息,一个人做了什么,该人的工作,该人使用的工具等。

为了解决这个问题并让它更酷,我制作了一个多表单步骤表单,因此当用户完成为第一个表填充数据(用于实例化他使用的工具的信息)时,用户单击下一步按钮,然后显示来自其他表的输入(项目人已经工作了)......这一直持续到用户填写所有必要的数据。为了节省工作,我正在使用杂货店。

<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');

也许是回调或其他东西,有没有人做过类似从一个表格插入多个相关表格的事情?

4

2 回答 2

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);
于 2013-03-13T11:58:21.390 回答
0

首先,我建议您使用单个表来存储所有信息。但是由于它的多步骤操作,因此您创建了几个表来存储它们,因为您将数据保存在块中。

这是一个快速的想法。

而不是将数据存储到多个表中,而是将其保存在单个表中。当您插入第一个表单时,您将获得 id 并将此 id 存储在 session/other_techniques 中。在此之后,您可以使用更新查询将其余信息插入同一张表中。

好处是,当您想要获取信息时,您不必进行连接,并且连接会减慢查询速度。

于 2013-03-13T07:05:12.620 回答