4,250
社区成员
发帖
与我相关
我的任务
分享
/**
* 登录管理员修改自身密码
*/
public function actionEdit_pwd(){
$id = Yii::app()->user->id;
$model= Admin::model();
$model->scenario="edit_pwd";
if(isset($_POST['Admin'])){
$password=$_POST['Admin']['password'];
$password2=$_POST['Admin']['new_pwdconfirm'];
if (!empty($password) && !empty($password2) && $password===$password2) {
$_POST['Admin']['password'] = md5(SALT.$password);
$_POST['Admin']['new_pwdconfirm'] = md5(SALT.$password2);
}
$model->setAttribute('userid', $id);
$model->attributes = $_POST['Admin'];
if($model->save())
{
Yii::app()->user->setFlash('status','修改成功,请重新登录');
$this->refresh();
}else{
Yii::app()->user->setFlash('error','请检查输入项');
}
}
$this->render('edit_pwd',array('infos'=>$model));
}
<?php
class Admin extends CActiveRecord{
public static function model($className = __CLASS__) {
return parent::model($className);
}
public function tableName() {
return '{{admin}}';
}
public $old_pwd;
public $password;
public $new_pwdconfirm;
//数据验证
public function rules()
{
return array(
array('nickname', 'required','message'=>'昵称必填','on'=>'edit_info'),
array('nickname', 'unique','message'=>'昵称已存在','on'=>'edit_info'),
array('email', 'required','message'=>'邮箱必填','on'=>'edit_info'),
array('email', 'unique','message'=>'邮箱已存在','on'=>'edit_info'),
array('email','email','allowEmpty'=>FALSE,'message'=>'邮箱格式不正确','on'=>'edit_info'),
array('old_pwd', 'required','message'=>'旧密码必填','on'=>'edit_pwd'),
array('old_pwd', 'check_old','on'=>'edit_pwd'),
array('password', 'required','message'=>'新密码必填','on'=>'edit_pwd'),
array('password', 'length','tooShort'=>'密码长度至少6位','min'=>6,'on'=>'edit_pwd'),
array('password', 'length','tooLong'=>'密码长度最大20位','max'=>40,'on'=>'edit_pwd'),
array('new_pwdconfirm', 'required','message'=>'确认密码必填','on'=>'edit_pwd'),
array('new_pwdconfirm', 'compare','compareAttribute'=>'password','message'=>'两次密码不一致','on'=>'edit_pwd'),
);
}
//对应标签的名字
function attributeLabels() {
parent::attributeLabels();
return array(
'username'=>'账号',
'nickname'=>'昵称',
'email'=>'邮箱',
'realname'=>'真实姓名',
'old_pwd'=>"旧密码",
'password'=>'新密码',
'new_pwdconfirm'=>'确认新密码',
);
}
//验证旧密码
function check_old(){
$id = Yii::app()->user->id;
$model= Admin::model()->findByPk($id);
$password=$model->password;
if(!$this->validatePassword($this->old_pwd,$password)){
$this->addError('old_pwd', '旧密码不正确');
}
}
public function validatePassword($password,$pwd)
{
return $this->hashPassword($password,SALT)===$pwd;
}
public function hashPassword($password,$salt)
{
return md5($salt.$password);
}
}
?>


if(empty($_POST['Admin']['password'])
{
$model->password = "";
$model->new_pwdconfirm ="";
}
在修改密码的的 form中 使用Yii 的widget activeform,并将 其中 'enableAjaxValidation'=>true,
'enableClientValidation'=>true,
'clientOptions'=>array(
'validateOnSubmit'=>true,
),
这样可以避免验证旧密码成功后,重复输入。