飞鸽传书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 ?>
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 }
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/
- 飞鸽传书mayfish 数据入库验证
- 腾讯第三方登陆OAuth验证 数据入库
- 飞鸽传书数据加密分析
- DWG数据的入库
- 栅格数据入库
- 栅格数据入库
- 异地mongodb数据入库
- 数据入库代码
- mysql 入库数据乱码
- ElasticSearch大批量数据入库
- 数据入库总结
- SESSION 数据入库
- SESSION 数据入库
- SESSION 数据入库
- FTP数据入库Hive
- Qgis 数据的入库
- 采集数据入库
- ElasticSearch大批量数据入库
- c# 打开exe文件与关闭exe文件 c#服务打开exe时候默认是没有窗体界面的
- 初识MFC
- eclipse下安装ve
- Java 几种排序法
- 数据字典
- 飞鸽传书mayfish 数据入库验证
- 收藏网址
- gridview 隐藏某一列
- Tokyo Tyrant(TTServer)系列-备份恢复和增加从库
- Cairo 图形指南 (2) —— Cairo 概念
- 使用LWUIT中遇到的一些问题
- Cairo 图形指南 (3) —— Cairo 后端
- JS中的大括号是在干什么?
- 基于Hibernate的对象关联关系设计时注意事项