0

「カード」と呼ばれる多段階フォームがあります

このフォームには、個人のいくつかの情報、何をしたか、仕事、使用したツールなどを含める必要があります。

これを解決してよりクールにするために、マルチフォーム ステップ フォームを作成しました。そのため、ユーザーが最初のテーブル (使用したツールの情報など) へのデータの入力を終了すると、ユーザーは次のステップ ボタンをクリックし、他のテーブルからの入力が表示されます (プロジェクト人が働いた)...これは、ユーザーが必要なすべてのデータを入力するまで続きます。仕事を節約するために、私はgrocercrudを使用しています。

<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;
    } 

コントローラーにリダイレクトするとき、テーブルを 1 つだけ埋めるとすべてが機能します。

問題は、関連する他のテーブルに対応するデータを格納する方法がわからないことです。したがって、tableNameに新しいレジストリを挿入すると、新しい ID が割り当てられます。ここで、この最近割り当てられた ID を使用して、他のテーブルの他の必須フィールドとして使用したいと思います (関連するテーブルはこの ID を外部キーとして持っています)。

これを解決する方法は、次のようなものです。

$last_id = $user->id;

だから私は他のテーブルにデータを挿入し続け、

使うと役に立つでしょうか

$crud->set_relation('column','table','column');

おそらくコールバックか何か、1つのフォームから複数の関連テーブルに挿入するようなことをした人はいますか?

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 に答える