2011-01-07 12 views
0

こんにちは、私はすでにデータベーステーブルに保存されているuserdataを更新しようとしていますが、既存のものを更新する代わりに新しいレコードを作成する方法があります。ここに私のコードです。cakephpの更新に関する問題

function admin() 
{  
    $conditions = "id"; 
    $recursive = 1; 
    $data = $this->User->find('all'); 
    $counter = $this->User->find('count'); 
    $this->set('counter', $counter); 
    $this->set('combo', $data); 

    $username = $this->Session->read('user'); 
    if ($username) 
    { 
     $results = $this->User->findByUsername($username); 
     $this->set('User', $results['User']); 
     $this->set('last_login', $this->Session->read('last_login')); 
     if (!empty($this->data)) 
     { 


      $this->data["User"]["access_right"] = implode(",",$this->data["User"]["access_right"]); 
      $this->User->set($this->data); 
      if ($this->User->validates()) 
      {      
       $this->data['User']['password'] = md5($this->data['User']['password']); 
       if($this->User->saveAll($this->data, TRUE, array('username','password','first_name','last_name','notes','access_right'))) 
       { 
        $this->redirect(array('action' => 'admin')); 
        $this->Session->setFlash('User Data Updated.'); 
       } 
       else 
       { 
        $this->Session->setFlash('There was a problem while Updating User.'); 
       }      
      } 
     } 
    } 
    else 
    { 
     $this->redirect(array('action' => 'login')); 
     exit(); 
    }   
} 

が、これは私のモデル

<?php 
class User extends AppModel 
{ 
    var $name = 'User'; 
    var $validate = array(
     'username'=>array(
        /* 'alphaNumeric'=>array(
       'rule'=>'alphaNumeric', 
       'required'=>true, 
       'message'=>'Alphabets and numbers only' 
       ), */ 
      'between'=>array(
       'rule'=>array('between', 5, 15), 
       'message'=>'Between 5 and 15 characters' 
      ) 
     ), 
     'password'=>array(
      'rule'=>array('minLength', 8), 
      'required'=>true, 
      'message'=>'Minimum 8 characters long' 
     ), 
     'email'=>'email' 
    ); 
} 

?> 

答えて

1

の作成または更新は、モデルのidフィールドで制御されています。 $ Model-> idが設定されている場合、この主キーを持つレコードが更新されます。それ以外の場合は、新しいレコードが作成されます。 $ this-> data ['User'] ['id']が$ this-> dataに含まれているかどうか確認することができます。そうでなければ、それが新しいレコードを作成している理由です。あなたがセッションに格納されている場合はもちろんである

$this->data['User']['id'] = $this->Session->read('user_id'); 

:この問題を解決するには、次のような何かを行うことができます。それ以外の場合は、ユーザーIDの隠しフィールドを保持するためにビュー内のフォームを更新する必要があります。これは、ユーザーのIDを隠すかどうかのセキュリティの必要性に応じて、セッション格納変数ほど安全ではありません。

ハッピーコーディング!

関連する問題