前阵子看到别人申请了这个我自己也试了一下,还真通过了,很简单:上传个项目源码再回答官方的题目,然后就OK了。
申请地址http://www.thinkphp.cn/member/apply/type/1.html
我收到的题目是这个,不知道会不会改,仅供参考。
1. ThinkPHP的口号是?
2. ThinkPHP标签库和widget有什么区别,分别在什么时候使用最适合呢?
3. 如何解决thinkphp 目前在模板中的标签 嵌套不能超过3层的问题。
4. 知道‘VAR_URL_PARAMS’配置吗? 一般源码中看tp的常量默认值,在哪个文件里看到?
5. 简述 ThinkPHP 中 M 和 D 两个函数的区别
6. ThinkPHP中的Model类的 field 方法有哪些作用?
7. ThinkPHP中initialize和construct有哪些不同?
8. 通过TP的Trace功能,可以获取哪些调试信息?
9. 关于编码安全,你有哪些经验。
10. 请设计私信功能(含一对一和群发,且每个用户的每条私信有是否阅读的状态,需要考虑用户量很大但活跃用户很少时群发的效率)的数据库,并简单写出实现的流程。
11. 有用户表User,字段:id(主键),username(用户名),password(密码),等等。业务中该表只有username(用户名)字段允许修改。现要实现修改用户名的功能,代码如下:
模板里:
<form action="/User/editname" method="post"> 新用户名:<input type="text" name="username" value=""/> <input type="submit" value="提交"/> </form>
UserAction.class.php里:
public function editname(){ //实例化用户模型 $User = D('User'); //检查用户名输入是否合法 $username = trim($this->_post('username')); if(strlen($username) > 16){ $this->error('用户名不合法,请重新输入'); exit; } //更新用户记录 if($User->create()){ $map['id'] = $_SESSION['user']['id']; //获取登陆者的id $res = $User->where($map)->save(); if($res !== false){ $this->success('修改用户名成功'); }else{ $this->error('修改用户名失败'); } }else{ $this->error($User->getError()); } }
UserModel.class.php里:
class UserModel extends Model{ //自动完成规则 protected $_auto = array( array('password', 'md5', 1, 'function') ); //自动验证规则 protected $_validate = array( array('username','require', '用户名必须', MODEL::MUST_VALIDATE) ); }
请仅从数据安全性方面考虑,UserAction里editname方法的代码存在哪些风险,如何修改(写出你认为可行的所有方法)