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中iconv函数使用方法
May 24 PHP
PHP 数组实例说明
Aug 18 PHP
PHP JSON格式数据交互实例代码详解
Jan 13 PHP
is_uploaded_file函数引发的不能上传文件问题
Oct 29 PHP
PHP中trim()函数简单使用指南
Apr 16 PHP
微信公众平台开发之配置与请求
Aug 26 PHP
CodeIgniter基于Email类发邮件的方法
Mar 29 PHP
php常用数组函数实例小结
Dec 29 PHP
Yii2压缩PHP中模板代码的输出问题
Aug 28 PHP
php桥接模式应用案例分析
Oct 23 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
Dec 25 PHP
PHP开发API接口签名生成及验证操作示例
May 27 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
Thinkphp整合微信支付功能
2016/12/14 PHP
firefox插件Firebug的使用教程
2010/01/02 Javascript
JS打开层/关闭层/移动层动画效果的实例代码
2013/05/11 Javascript
div+css+js实现无缝滚动类似marquee无缝滚动兼容firefox
2013/08/29 Javascript
javascript调试过程中找不到哪里出错的可能原因
2013/12/16 Javascript
使用js实现数据格式化
2014/12/03 Javascript
jquery ajax双击div可直接修改div中的内容
2016/03/04 Javascript
canvas实现环形进度条效果
2017/03/23 Javascript
Vue中v-for的数据分组实例
2018/03/07 Javascript
Angularjs实现页面模板清除的方法
2018/07/20 Javascript
js中的reduce()函数讲解
2019/01/18 Javascript
react 组件传值的三种方法
2019/06/03 Javascript
使用异步controller与jQuery实现卷帘式分页
2019/06/18 jQuery
JS开发常用工具函数(小结)
2019/07/04 Javascript
微信小程序点击顶部导航栏切换样式代码实例
2019/11/12 Javascript
ng-alain的sf如何自定义部件的流程
2020/06/12 Javascript
在vue中动态修改css其中一个属性值操作
2020/12/07 Vue.js
Python中字符串的格式化方法小结
2016/05/03 Python
python opencv实现任意角度的透视变换实例代码
2018/01/12 Python
对python文件读写的缓冲行为详解
2019/02/13 Python
python使用phoenixdb操作hbase的方法示例
2019/02/28 Python
Python3 实现串口两进程同时读写
2019/06/12 Python
网易2016研发工程师编程题 奖学金(python)
2019/06/19 Python
Jimmy Choo美国官网:周仰杰鞋子品牌
2018/06/08 全球购物
正宗的澳大利亚Ugg靴子零售商:UGG Express
2020/04/19 全球购物
学校安全工作制度
2014/01/19 职场文书
就业意向书范文
2014/04/01 职场文书
绿色环保演讲稿
2014/05/10 职场文书
工会优秀工作者事迹
2014/08/17 职场文书
煤矿安全协议书
2014/08/20 职场文书
学前班学生评语
2014/12/29 职场文书
通讯稿格式及范文
2015/07/22 职场文书
关于军训的感想
2015/08/07 职场文书
javascript拖曳互换div的位置实现示例
2021/06/28 Javascript
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
2021/09/04 SQL Server
为了顺利买到演唱会的票用Python制作了自动抢票的脚本
2021/10/16 Python