2012-11-20 6 views
2

En yii, je crée un module de connexion. Après une connexion réussie, je dois récupérer l'ID utilisateur utilisateur de connexion en cours et vouloir insérer cet ID utilisateur dans une autre table 'logintransLog' qui utilise l'ID utilisateur comme attribut avec une relation de clé étrangère. Donc, dans yii, comment récupérer l'ID utilisateur actuel et l'insérer dans une autre table? S'il vous plaît aidez-moi .....In yii comment écrire une requête d'insertion


Je veux insérer userid dans la table « loginAttempt » si seulement userid est correct et le mot de passe est erroné, afin de tenir des dossiers de la façon dont l'utilisateur beaucoup de temps avait essayé pour se connecter. Alors, comment puis-je mettre en œuvre cela? Je méthode actionlogin comme:

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

S'il vous plaît aidez-moi

Répondre

9

1er, simple et droite: Marque Modèle logintransLog table et utilisation:

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

2ème, juste rapide - utilisez 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'], 
     )); 
} 
+0

Merci pour votre réponse rapide monsieur –

+0

@ShilpaKirad, je mis à jour mon rép – Sergey

+0

Sergey Monsieur, j'ai aussi fait des changements que par u avait Raconté. mais dans la méthode actioncreate quand le nom d'utilisateur ou le mot de passe est faux, userid n'est pas inséré dans la table 'tentative'. C'est-à-dire qu'une partie n'est pas exécutée.si ($ model-> validate()) { \t \t \t \t if ($ model-> login()) { \t \t \t \t \t $ command-> insérer ('trans', array ( \t \t \t \t \t \t \t 'id' => Yû :: app() -> user-> getId(), \t \t \t \t \t \t \t // 'Ipaddress' => Yû :: app() -> user-> getIpaddress(), \t \t \t \t \t)); \t \t \t \t \t $ this-> redirect (Yii :: app() -> utilisateur-> returnUrl); \t \t \t \t} else { \t \t \t \t \t $ command-> insert ('tentative', array ( \t \t \t \t \t \t \t 'id' => Yû :: app() -> Utilisateur-> getId(), \t \t \t \t \t \t \t \t \t \t \t \t)); } –

0

il y a aussi une autre façon utilisation $log->insert(); au lieu de $log->save();