2

私はこの問題を午前中ずっと理解しようとしてきました。他の質問からいくつかのことを試しましたが、それは私の状況に実際には当てはまらないか、機能しませんでした。私は2つのテーブルを持っています:

users =(id、name、username、password、roles、last_edit、language)
french_translations =(id、french_clinical_recommendations、french_tradenames、include_drug、french_category、drug_id、user_id)

ユーザーhasManyfrench_translationsとfrench_translationsbelongsToUser。

ユーザーがfrench_translationを追加または編集するときに、ユーザーIDをfrench_translationsテーブルに保存し、そのレコードのフィールドuser_idを保存してから、ユーザーテーブルのlast_editフィールドに薬剤の総称名を入力します。現在、各テーブルに新しいレコードが作成されます。usersテーブルでは、idフィールドとlast_editフィールド(フィールドに正しい薬剤名を入力する)を除いて、すべてが空白になっています。また、french_translationsテーブルには空白のレコードがあり、user_idはusersテーブルで作成された空白のレコードと同じです。

コントローラ:

    function add($id = null) {
    $userid = $session->read('Auth.User.id');
    $drug = $this->FrenchTranslation->Drug->read(
      array(
          'Drug.id','Drug.generic','Drug.ahl','Drug.aap','Drug.rid','Drug.oral','Drug.mw','Drug.clinical_recommendations',
          'Drug.category','Drug.lrc'
      ),
      $id
    );
    $this->set('user',$userid);
    $this->set('drug',$drug);

    if (!empty($this->data)) {
      $french_translation['FrenchTranslation']['id'] = $this->Session->read('id');
            $this->FrenchTranslation->create();
            if ($this->FrenchTranslation->save($this->data)) {
                $this->Session->setFlash(__('The french translation has been saved', true));
                $this->redirect(array('controller'=>'drugs','action' => 'index'));
            } else {
                $this->Session->setFlash(__('The french translation could not be saved. Please, try again.', true));
            }
        }
        $drugs = $this->FrenchTranslation->Drug->find('list');
        $this->set(compact('drugs'));
    }

    function edit($id = null) {
    //$this->FrenchTranslation->id = $id;
    $userid = $this->Auth->user('id');
    $username = $this->Auth->user('name');
  //$this->FrenchTranslation->user_id = $id;
    $drug = $this->FrenchTranslation->Drug->read(
      array(
          'Drug.id','Drug.generic','Drug.ahl','Drug.aap','Drug.rid','Drug.oral','Drug.mw','Drug.clinical_recommendations',
          'Drug.category','Drug.lrc'
      ),
      $id
    );

    $this->set('drug',$drug);
    $this->set('user',$userid);
    $this->set('username',$username);

        if (!$id && empty($this->data)) {
            $this->Session->setFlash(__('Invalid french translation', true));
            $this->redirect(array('action' => 'index'));
        }
        if (!empty($this->data)) {
            if ($this->FrenchTranslation->saveAll($this->data)) {
                $this->Session->setFlash(__('The french translation has been saved', true));
                $this->redirect(array('controller'=>'drugs','action' => 'index'));
            } else {
                $this->Session->setFlash(__('The french translation could not be saved. Please, try again.', true));
            }
        }
        if (empty($this->data)) {
            $this->data = $this->FrenchTranslation->read(null, $id);
        }
        $drugs = $this->FrenchTranslation->Drug->find('list');
        $this->set(compact('drugs'));
    }

    function delete($id = null) {
        if (!$id) {
            $this->Session->setFlash(__('Invalid id for french translation', true));
            $this->redirect(array('action'=>'index'));
        }
        if ($this->FrenchTranslation->delete($id)) {
            $this->Session->setFlash(__('French translation deleted', true));
            $this->redirect(array('action'=>'index'));
        }
        $this->Session->setFlash(__('French translation was not deleted', true));
        $this->redirect(array('action' => 'index'));
    }

ビューの編集:

    <?php echo $this->Form->input('User.last_edit',array('type'=>'hidden','value'=>$drug['Drug']['generic'])); ?>    
    <?php echo $this->Form->input('user_id', array('type'=>'hidden','value'=>$user)); ?>
4

2 に答える 2

0

私はそれを理解しましたが、それを行うためのより良い、より安全な方法があるように感じます. 私はセキュリティ コンポーネントを使用しており、サイトを表示するにはログインする必要があるため、おそらく十分に安全です。

ユーザー ID の user.id 入力を追加しただけです。その時点で、last_edit を保存する適切なユーザーを見つけることができます。コントローラーには $userid という変数があり、これを使用して現在のユーザー ID を取得$userid = $this->Auth->user('id');し、ビューに渡し$ths->set('user',$userid);ます。同じユーザー ID 値をドラッグの user_id フィールドの入力に使用しました。

意見:

<?php echo $this->Form->input('User.id',array('type'=>'hidden','value'=>$user));//The user ID last edit will be stored in ?>
<?php echo $this->Form->input('User.last_edit',array('type'=>'hidden','value'=>$drug['Drug']['generic']));//The drug edited last by the specified user ?>
于 2012-05-07T13:35:50.640 に答える