mayfish 数据入库验证代码


Posted in PHP onApril 30, 2010

一般在把数据写入数据库之前,先对将要写入的数据进行校验,可以避免出现比较严重的安全问题(例如一般性的SQL注入攻击)。
mayfish 可以灵活的自定义将要执行写入的数据内容的校验规则,以减少开发人员手动对每一个字段的数据进行校验的麻烦。
例子如下:
一、首先定义数据库模块

<?php 
class MemberModel extends AppModel 
{ 
/** 设置数据库表名称 **/ 
protected $tableName = "members"; 
/** 
* 数据验证规则 
*/ 
protected $verify = array( 
array("NotEmpty", "username", "用户名不能留空"), 
array("hasOne", "username", "此用户已经存在,请换另一个用户名称再试一次"), 
array("NotEmpty", "password", "密码不能留空"), 
array("NotEmpty", "email", "邮箱地址不能留空"), 
array("isEmail", "email", "邮箱地址格式不正确"), 
array("hasOne", "email", "邮箱地址已经被占用") 
); 
/** 
* 覆盖父类添加数据入库的方法 
* 先对用户密码进行md5加密,再调用父类的方法写入数据库中 
*/ 
public function create($data) { 
$data = array_map("addslashes", $data); //将数据中的标点符号(单、双引号)进行安全转义 
$data["password"] = md5($data["password"]); 
return parent::create($data); 
} 
} 
?>

二、执行数据写入操作
//执行写入数据的片段... 
//执行数据入库的操作 
private function PostData() { 
$fields = array("username", "password", "email"); 
$post = array_map("trims", $_POST); //清除所有数据两边多余的空格 
$post = parseHTML($post, $fields); //将指定的字段内容进行清除HTML处理 
$data = parseFields($post, $fields); //提取可以写入数据库的字段(防止别人绕过你的页面进行提交一些别有用心的数据) 
$DB = & M("member"); 
//进行数据验证 
if (!$DB->verify($data)) { 
//验证失败,取出失败的原因,并提交到模板页面中 
$this->assign("error", $DB->getVerifyError()); 
//把提交过来的数据也提交到模板中(用以实现用户好像没有离开过页面的感觉) 
$this->assign("default", $post); 
//渲染注册页面模板 
$this->display("/register.html"); 
} 
else { 
//写入数据库 
$result = $DB->create($data); 
//返回布尔型,说明数据写入失败,渲染注册页面模板 
if (is_bool($result)) { 
$this->assign("default", $post); 
$this->display("/register.html"); 
} 
else { 
//注册成功,渲染注册成功页面模板 
$this->assign("username", $data["username"]); 
$this->display("/reg_success.html"); 
} 
} 
}

可执行验证的规则有
NotEmpty 不能为空
Number 只能是整数
isEmail 邮箱地址是否正确
hasOne 是否是唯一(是否重复,是否已经存在)
Regex 自定义正则表达式

验证的格式为
array(验证方法, 进行验证的字段名称, 验证错误的提示信息)
对于正则表达示的验证
array("Regex", "mobile", '/^13\d{9}$/', "用户名不能留空") 

MayFish 下载

PHP 相关文章推荐
十天学会php(3)
Oct 09 PHP
PHP+MySQL 手工注入语句大全 推荐
Oct 30 PHP
一步一步学习PHP(4) php 函数 补充2
Feb 15 PHP
PHP下打开URL地址的几种方法小结
May 16 PHP
php中ftp_chdir与ftp_cdup函数用法
Nov 18 PHP
php中使用url传递数组的方法
Feb 11 PHP
php对二维数组进行相关操作(排序、转换、去空白等)
Nov 04 PHP
PHP使用token防止表单重复提交的方法
Apr 07 PHP
php实现登录tplink WR882N获取IP和重启的方法
Jul 20 PHP
yii2 RBAC使用DbManager实现后台权限判断的方法
Jul 23 PHP
PHP延迟静态绑定的深入讲解
Apr 02 PHP
PHP代码重构方法漫谈
Apr 17 PHP
在PHP中操作Excel实例代码
Apr 29 #PHP
PHP 图片上传实现代码 带详细注释
Apr 29 #PHP
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
Apr 28 #PHP
PHP中冒号、endif、endwhile、endfor使用介绍
Apr 28 #PHP
PHP 文件上传全攻略
Apr 28 #PHP
PHP GD 图像处理组件的常用函数总结
Apr 28 #PHP
PHP 开发环境配置(测试开发环境)
Apr 28 #PHP
You might like
不重新编译PHP为php增加openssl模块的方法
2011/06/14 PHP
细谈php中SQL注入攻击与XSS攻击
2012/06/10 PHP
PHP实现生成带背景的图形验证码功能
2016/10/03 PHP
PHP获取redis里不存在的6位随机数应用示例【设置24小时过时】
2017/06/07 PHP
PHP实现用session来实现记录用户登陆信息
2018/10/15 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
2019/04/16 PHP
基于jQuery的Tab选项框效果代码(插件)
2011/03/01 Javascript
一个CSS+jQuery实现的放大缩小动画效果
2014/02/19 Javascript
jQuery学习笔记之2个小技巧
2015/01/19 Javascript
jQuery实现自定义checkbox和radio样式
2015/07/13 Javascript
js图片卷帘门导航菜单特效代码分享
2015/09/10 Javascript
JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】
2016/05/10 Javascript
微信小程序实现实时圆形进度条的方法示例
2017/02/24 Javascript
JavaScript 中 apply 、call 的详解
2017/03/21 Javascript
Javascript实现一个简单的输入关键字添加标签效果实例
2017/06/01 Javascript
thinkjs 文件上传功能实例代码
2017/11/08 Javascript
antd的select下拉框因为数据量太大造成卡顿的解决方式
2020/10/31 Javascript
vue实现购物车的小练习
2020/12/21 Vue.js
Vue实现图书管理案例
2021/01/20 Vue.js
[04:00]DOTA2解说界神雕侠侣 CJ第四天谷子现场过生日
2013/07/30 DOTA
python3生成随机数实例
2014/10/20 Python
python使用arcpy.mapping模块批量出图
2017/03/06 Python
Python Json序列化与反序列化的示例
2018/01/31 Python
Window环境下Scrapy开发环境搭建
2018/11/18 Python
Python匿名函数及应用示例
2019/04/09 Python
详解python中递归函数
2019/04/16 Python
PyQt5组件读取参数的实例
2019/06/25 Python
Python pymsql模块的使用
2020/09/07 Python
python单元测试框架pytest的使用示例
2020/10/07 Python
意大利制造的西装、衬衫和针对男士量身定制的服装:Lanieri
2018/04/08 全球购物
电脑教师的教学自我评价
2013/11/26 职场文书
《棉鞋里的阳光》教学反思
2014/04/24 职场文书
平安工地建设方案
2014/05/06 职场文书
实习单位指导教师评语
2014/12/30 职场文书
副总经理岗位职责范本
2015/04/08 职场文书
Spring 使用注解开发
2022/05/20 Java/Android