3

yii で、ログインモジュールを作成しています。ログインに成功した後、現在のログイン ユーザーのユーザー ID を取得する必要があり、そのユーザー ID を、外部キー関係を持つ属性としてユーザー ID を持つ別の「logintransLog」テーブルに挿入したいと考えています。では、yii では、現在のユーザー ID を取得して別のテーブルに挿入する方法を教えてください。私を助けてください.....


ユーザーがログインを試行した時間の記録を維持するために、ユーザー ID のみが正しく、パスワードが間違っている場合、テーブル 'loginAttempt' にユーザー ID を挿入したいと考えています。では、どうすればこれを実装できますか? 次のような actionlogin メソッドがあります。

public function actionLogin()
{
    $model=new LoginForm;
    $command = Yii::app()->db->createCommand();

    // if it is ajax validation request
    if(isset($_POST['ajax']) && $_POST['ajax']==='login-form')
    {
        echo CActiveForm::validate($model);
        Yii::app()->end();
    }

    // collect user input data
    if(isset($_POST['LoginForm']))
    {
        $model->attributes=$_POST['LoginForm'];
        // validate user input and redirect to the previous page if valid
        if($model->validate() && $model->login())
        {
                $command->insert('trans', array(
                    'id'=>Yii::app()->user->getId(),
                //'Ipaddress'=>Yii::app()->user->getIpaddress(),
                ));
            $this->redirect(Yii::app()->user->returnUrl);
        }

    }
    // display the login form
    $this->render('login',array('model'=>$model));
}      

私を助けてください

4

2 に答える 2

12

1つ目、簡単で正しい:モデルlogintransLogテーブルを作成して使用:

$log = new logintransLog();
$log->user_id = $user->id;
$log->created = date('Y-m-d H:i:s');
$log->save();

2番目、ただ速い - createCommand を使用してください:

$sql = "insert into logintransLog (user_id, created) values (:user_id, :created)";
$parameters = array(":user_id"=>$user->id, ':created' => date('Y-m-d H:i:s'));
Yii::app()->db->createCommand($sql)->execute($parameters);

// try this, if any validation failed it was count as login attempt
if ($model->validate() && $model->login()) {
        $command->insert('trans', array(
           'id'=>Yii::app()->user->getId(),
         //'Ipaddress'=>Yii::app()->user->getIpaddress(),
        ));
        $this->redirect(Yii::app()->user->returnUrl);
} else {
        $command->insert('loginAttempt', array(
           'username'=>$model->username,
           'Ipaddress'=>$_SERVER['REMOTE_ADDR'],
        ));
}
于 2012-11-20T10:55:18.103 に答える
0

$log->insert(); の代わりに 使用する別の方法もあります $log->save();

于 2012-11-20T11:12:37.110 に答える