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-ish,这意味着这不是真正的方式。

处理这个问题的方法是创建一个从CFormModel扩展的对象,并将所有逻辑代码放在那里而不是控制器中。

现在,如果您想继续使用您的代码,那么最好放置以下代码

$this->render('Password');

在 if isset 密码内容下方。

对于您的问题,您的密码未更新的原因是您创建的查询未执行。如果我们看一下这里,我们可以看到应该添加以下代码:

$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 回答