0

yii でプロジェクトを作成しています。ユーザーが入力した電子メールを検証した後、新しいパスワードを入力するためのテキストフィールドを持つ password.php ファイルを表示しています。パスワード.php=

<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'email-form',
    'enableClientValidation'=>true,
   ));
        echo CHtml::textField('Enter new password');
        echo CHtml::textField('Repeat password');
        echo CHtml::submitButton('Submit');
        $this->endWidget();

ユーザーが新しいパスワードを入力して送信ボタンをクリックすると、古いパスワードを上書きするように、この新しいパスワードをユーザーテーブルのパスワードフィールドに挿入したいと思います。

コントローラーで、メソッドを次のように作成しました-

public function actionCreate(){

if(isset($_POST['email']))
    {

 $record=User2::model()->find(array(
'select'=>'userId, securityQuestionId, primaryEmail',
'condition'=>'primaryEmail=:email',
'params'=>array(':email'=>$_POST['email']))
);

if($record===null) {
                  echo "Email invalid";
                   }

else {
    echo "email exists";


      $this->render('Password');
      if(isset($_POST['Password']))
        {

        $command = Yii::app()->db->createCommand();
        $command->insert('User', array(
                    'password'=>$_POST['password'] ,
                    //'params'=>array(':password'=>$_POST['password'])

        }          



 }

    }
    else{
        $this->render('emailForm'); //show the view with the password field
    }

しかし、新しいパスワードを挿入していません。どうすればこれを実装できますか...助けてください

4

3 に答える 3

1

まず第一に、あなたがフォームを処理している方法は確かに Yii 風ではありません。

これを処理する方法は、 CFormModelから拡張されたオブジェクトを作成し、すべてのロジック コードをコントローラーではなくそこに配置することです。

さて、コードの作業を続けたい場合は、次のコードを配置するのが最善です

$this->render('Password');

if isset password のものの下。

問題の場合、パスワードが更新されない理由は、作成したクエリが実行されていないためです。ここを見ると、次のコードを追加する必要があることがわかります。

$command->execute();

あなたのSQLを実行します。

于 2012-11-29T07:54:08.547 に答える
1

このようなもの...

$user = User::find('email = :email', ':email' => $_POST['email']);

if( empty($user) )
  return;

$user->password = $_POST['password'];
$user->save();
于 2012-11-29T07:57:33.847 に答える
0

$_POST['Password']この post 変数を設定していないため、このようにパスワードを取得することはできません。

あなたは使用しなければなりませんでした:

echo CHtml::textField('password');
echo CHtml::textField('repeatPassword');
echo CHtml::hiddenField('email', $email);

「password」と「repeatPassword」は POST 変数の名前です

そして、コントローラーに間違いが多すぎる場合は、これを試してください(タイプミスを確認してください):

if(isset($_POST['email']))
{
 $record=User2::model()->find(array(
'select'=>'userId, securityQuestionId, primaryEmail',
'condition'=>'primaryEmail=:email',
'params'=>array(':email'=>$_POST['email']))
);

if($record===null) {
                  echo "Email invalid";
                   }

else {
    if(isset($_POST['password']) && isset($_POST['repeatPassword']) && ($_POST['password'] === $_POST['repeatPassword']))
    {
        $record->password = $_POST['password'];
        if ($record->save()) {
             $this->render('saved');
        }
    }          

    $this->render('Password' array('email'=>$_POST['email']));
}

 }

    }
    else{
        $this->render('emailForm'); //show the view with the password field
    }

パスワードを送信した後、変数を設定していないため、コードif(isset($_POST['Password']))では実行されません。emailだからあなたはただ$this->render('emailForm');。したがって、次のように設定しますCHtml::hiddenField('email', $email);

更新。このガイドを読むことを強くお勧めします。それはあなたのために多くの時間を節約します。

于 2012-11-29T08:05:43.890 に答える