飞鸽传书mayfish 数据入库验证

来源:互联网 发布:用友票据打印软件 编辑:程序博客网 时间:2024/05/29 02:58

我飞鸽传书专门为大家转载最新技术文档,谢谢!来自 YAGAS 的原创作品:

 

一般在把数据写入数据库之前,先对将要写入的数据进行校验,可以避免出现比较严重的安全问题(例如一般性的SQL注入攻击)。

mayfish 可以灵活的自定义将要执行写入的数据内容的校验规则,以减少开发人员手动对每一个字段的数据进行校验的麻烦。

例子如下:

一、首先定义数据库模块

 1 <?php
 2 class MemberModel extends AppModel
 3 {
 4     /** 设置数据库表名称 **/
 5     protected $tableName = "members";
 6     
 7     /**
 8      * 数据验证规则
 9      */
10     protected $verify = array(
11         array("NotEmpty", "username", "用户名不能留空"),
12         array("hasOne",   "username", "此用户已经存在,请换另一个用户名称再试一次"),
13         array("NotEmpty", "password", "密码不能留空"),
14         array("NotEmpty", "email",    "邮箱地址不能留空"),
15         array("isEmail",  "email",    "邮箱地址格式不正确"),
16         array("hasOne",  "email",     "邮箱地址已经被占用")
17     );
18     
19     
20 
21     /**
22      * 覆盖父类添加数据入库的方法
23      * 先对用户密码进行md5加密,再调用父类的方法写入数据库中
24      */
25     public function create($data) {
26         $data = array_map("addslashes", $data);  //将数据中的标点符号(单、双引号)进行安全转义
27         $data["password"= md5($data["password"]);
28         return parent::create($data);
29     }
30     
31     
32 }
33 ?>

 

二、执行数据写入操作

 1     //执行写入数据的片段...
 2 
 3     //执行数据入库的操作
 4     private function PostData() {
 5         $fields = array("username", "password", "email");
 6         $post   = array_map("trims", $_POST); //清除所有数据两边多余的空格
 7         $post   = parseHTML($post, $fields);  //将指定的字段内容进行清除HTML处理
 8         $data   = parseFields($post, $fields);  //提取可以写入数据库的字段(防止别人绕过你的页面进行提交一些别有用心的数据)
 9 
10         $DB = & M("member");
11 
12         //进行数据验证
13         if (!$DB->verify($data)) {
14             
15             //验证失败,取出失败的原因,并提交到模板页面中
16             $this->assign("error", $DB->getVerifyError());
17 
18             //把提交过来的数据也提交到模板中(用以实现用户好像没有离开过页面的感觉)
19             $this->assign("default", $post);
20             
21             //渲染注册页面模板
22             $this->display("/register.html");
23         }
24         else {
25             //写入数据库
26             $result = $DB->create($data);
27             
28 
29             //返回布尔型,说明数据写入失败,渲染注册页面模板
30             if (is_bool($result)) {
31                 $this->assign("default", $post);
32                 $this->display("/register.html");
33             }
34             else {
35                 //注册成功,渲染注册成功页面模板
36                 $this->assign("username", $data["username"]);
37                 $this->display("/reg_success.html");
38             }
39         }
40     }

 

 可执行验证的规则有

NotEmpty  不能为空

Number     只能是整数

isEmail       邮箱地址是否正确

hasOne     是否是唯一(是否重复,是否已经存在)

Regex       自定义正则表达式

 

验证的格式为

array(验证方法, 进行验证的字段名称, 验证错误的提示信息)

 

对于正则表达示的验证

array("Regex", "mobile", '/^13/d{9}$/', "用户名不能留空")


这里是下载页面: http://www.freeeim.com/