通过覆盖旧密码插入新密码(Inserting new password by overriding

2019-08-03 07:12发布

在警予我创建项目。 用户输入的电子邮件的确认之后,我显示其为具有用于输入新密码文本框password.php文件。 Password.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();

当用户输入新密码并点击提交,以这样一种方式,它overright旧密码按钮,我想插入这个新密码到用户表的密码字段。

在控制器我已经创建方法原样

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
    }

但它不是插入新的密码。 那么,如何实现这个......请大家帮帮我

Answer 1:

你不能像这样的密码$_POST['Password']因为你没有设置这个职位变量。

您必须使用:

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

“密码”和“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);

UPD。 我强烈建议您阅读本指南 。 这将节省大量的时间为您服务。



Answer 2:

首先你正在处理表格的方式肯定是不Yii的十岁上下,这意味着它不是真正要走的路。

你应该处理这个问题的方法是通过创建从延伸的对象CFormModel ,把你所有的逻辑代码在那里,而不是在控制器中。

现在,如果你想继续你的代码的工作,那么这将是最好将下面的代码段

$this->render('Password');

下面 ,如果isset密码的东西。

对于你的问题,为什么你的密码不被更新的原因是因为没有被执行,你创建的查询。 如果我们看一看这里 ,然后我们可以看到,应该添加以下代码片段:

$command->execute();

这将执行SQL的一块。



Answer 3:

事情是这样的......

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

if( empty($user) )
  return;

$user->password = $_POST['password'];
$user->save();


文章来源: Inserting new password by overriding old password
标签: yii passwords