THINKPHP 中密码在编辑中不填写即不修改,ignore和md5冲突的解决办法
2015-08-27 18:14
776 查看
在使用THINKPHP自动完成功能时,对于密码在编辑时,不填写则不修改密码,我是这样解决的:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201508/c2b294a780d82cc865092f8afedfdf82)
在_auto自动完成中
protected $_auto = array(
array('admin_password','md5',3,'function'),
array('admin_password','',2,'ignore'), //判断密码为空时候忽略 3.1以上版本
);
如果先使用MD5加密,获取到的空密码被加密为32位的码文了,导致下面 ignore 判断就无效了。
如果使用:
protected $_auto = array(
array('admin_password','',2,'ignore'),
array('admin_password','md5',3,'function'),
);
则admin_password首先被忽略掉,后面MD5加密又对此为空的密码加密了。
所以怎么弄都不行,百度网上内容,有人修改THINKPHP的模型文件,此操作不可取。
还有一种办法是使用钩子函数,before_update 大概类似这样的,在数据编辑进入数据表时候调用这个函数。
但是我想了想,既然3.1版本出了这个ignore的参数,应该有办法在自动完成中能够完成上述问题。经过思考,如下:
protected $_auto = array(
array('admin_password','md5',3,'function'),//所有情况下设置密码为MD5加密
array('admin_password','repassword',2,'callback'), //编辑情况下调用repassword方法
array('admin_password','',2,'ignore'),
);
protected function repassword($admin_password){
if($admin_password == 'd41d8cd98f00b204e9800998ecf8427e' ){
return '';
}else return $admin_password;
}
先对密码进行MD5加密,然后在编辑情况下调用repassword方法,判断如果是空的MD5码文,则返回空,否则返回本身;
array('admin_password','',2,'ignore'),
然后这句话对调用回来的密码再进行是否为空判断,为空则忽略,不修改密码。
经测试,搞定!哈哈哈
在_auto自动完成中
protected $_auto = array(
array('admin_password','md5',3,'function'),
array('admin_password','',2,'ignore'), //判断密码为空时候忽略 3.1以上版本
);
如果先使用MD5加密,获取到的空密码被加密为32位的码文了,导致下面 ignore 判断就无效了。
如果使用:
protected $_auto = array(
array('admin_password','',2,'ignore'),
array('admin_password','md5',3,'function'),
);
则admin_password首先被忽略掉,后面MD5加密又对此为空的密码加密了。
所以怎么弄都不行,百度网上内容,有人修改THINKPHP的模型文件,此操作不可取。
还有一种办法是使用钩子函数,before_update 大概类似这样的,在数据编辑进入数据表时候调用这个函数。
但是我想了想,既然3.1版本出了这个ignore的参数,应该有办法在自动完成中能够完成上述问题。经过思考,如下:
protected $_auto = array(
array('admin_password','md5',3,'function'),//所有情况下设置密码为MD5加密
array('admin_password','repassword',2,'callback'), //编辑情况下调用repassword方法
array('admin_password','',2,'ignore'),
);
protected function repassword($admin_password){
if($admin_password == 'd41d8cd98f00b204e9800998ecf8427e' ){
return '';
}else return $admin_password;
}
先对密码进行MD5加密,然后在编辑情况下调用repassword方法,判断如果是空的MD5码文,则返回空,否则返回本身;
array('admin_password','',2,'ignore'),
然后这句话对调用回来的密码再进行是否为空判断,为空则忽略,不修改密码。
经测试,搞定!哈哈哈
相关文章推荐
- thinkphp模板中判断变量是否为空
- [源码]简易投票系统
- 何找出PHP后门
- PHP学习笔记(一)PHP环境配置
- PHP新手必须掌握的入门与实战技巧
- PHP的autoLoad自动加载机制 的几种方式
- 改进PHP的var_dump()方法使之适应显示从数据库中查出来的数据
- PHP高效文件缓存类FCache
- PHP常用验证正则表达式
- PHP 最佳实践
- PHP debug_backtrace() 函数
- PHP初学-mysql的基本操作
- php上传图片完整代码
- 简单的php爬虫程序
- CTP Release() 的注意问题
- 高手指南PHP安装配置
- php页面,mysql数据库转utf-8乱码,utf-8编码问题总结
- php冒泡排序
- 深入理解PHP原理之Opcodes
- Time Intro - Time and NTP