在yii我正在创建项目。验证用户输入的电子邮件后,我显示的是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();
当用户输入新密码并点击提交按钮时,我想将这个新密码插入用户表的密码字段,这样就会超出旧密码。
在控制器中,我创建了方法 -
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
}
但它没有插入新密码。那么我该如何实现呢......请帮帮我
答案 0 :(得分:1)
首先,你处理表格的方式肯定不是Yii-ish,这意味着它不是真正的方式。
你应该处理这个问题的方法是创建一个从CFormModel扩展的对象,并将所有逻辑代码放在那里,而不是放在控制器中。
现在,如果您想继续使用您的代码,那么最好放置以下代码
$this->render('Password');
低于 if isset密码。
对于您的问题,您的密码未更新的原因是您创建的查询未被执行。如果我们看一下here,那么我们可以看到应该添加以下代码:
$command->execute();
哪个会执行你的sql。
答案 1 :(得分:1)
像这样......
$user = User::find('email = :email', ':email' => $_POST['email']);
if( empty($user) )
return;
$user->password = $_POST['password'];
$user->save();
答案 2 :(得分:0)
您无法获得此$_POST['Password']
之类的密码,因为您尚未设置此帖子变量。
你必须使用:
echo CHtml::textField('password');
echo CHtml::textField('repeatPassword');
echo CHtml::hiddenField('email', $email);
'password'和'repeatPassword'是POST vars的名称
在你的控制器中你犯了太多错误,试试这个(检查拼写错误):
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);
更新。我强烈建议您阅读this guide。它会为你节省很多时间。