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 相关文章推荐
用Zend Encode编写开发PHP程序
Oct 09 PHP
PHP 数组实例说明
Aug 18 PHP
浏览器关闭后,能继续执行的php函数(ignore_user_abort)
Aug 01 PHP
php模拟post提交数据的方法
Feb 12 PHP
PHP常用处理静态操作类
Apr 03 PHP
PHP的Socket通信之UDP通信实例
Jul 02 PHP
PHP新建类问题分析及解决思路
Nov 19 PHP
PHP使用trim函数去除字符串左右空格及特殊字符实例
Jan 07 PHP
php自动加载方式集合
Apr 04 PHP
PHP经典实用正则表达式小结
May 04 PHP
PHP中trait使用方法详细介绍
May 21 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
Oct 11 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 日常开发小技巧
2009/09/23 PHP
php preg_filter执行一个正则表达式搜索和替换
2012/02/27 PHP
PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
2014/07/04 PHP
又十个超级有用的PHP代码片段
2015/09/24 PHP
两种php去除二维数组的重复项方法
2015/11/04 PHP
CI框架中$this-&gt;load-&gt;library()用法分析
2016/05/18 PHP
php 常用的系统函数
2017/02/07 PHP
IE下支持文本框和密码框placeholder效果的JQuery插件分享
2015/01/31 Javascript
js+jquery常用知识点汇总
2015/03/03 Javascript
jQuery仿gmail实现fixed布局的方法
2015/05/27 Javascript
浅析AngularJs HTTP响应拦截器
2015/12/28 Javascript
Angularjs 制作购物车功能实例代码
2016/09/14 Javascript
js滚轮事件兼容性问题需要注意哪些
2016/11/15 Javascript
利用vscode调试编译后的js代码详解
2018/05/14 Javascript
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
2019/12/02 Javascript
浅谈Vue开发人员的7个最好的VSCode扩展
2021/01/20 Vue.js
python进阶教程之函数对象(函数也是对象)
2014/08/30 Python
详解Python的Flask框架中生成SECRET_KEY密钥的方法
2016/06/07 Python
Python+PyQt5实现美剧爬虫可视工具的方法
2019/04/25 Python
Python求均值,方差,标准差的实例
2019/06/29 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
2020/02/05 Python
Jupyter加载文件的实现方法
2020/04/14 Python
python判断正负数方式
2020/06/03 Python
Python命令行参数定义及需要注意的地方
2020/11/30 Python
CSS3 2D模拟实现摩天轮旋转效果
2016/11/16 HTML / CSS
IE9下html5初试小刀
2010/09/21 HTML / CSS
Oakley官网:运动太阳镜、雪镜和服装
2016/09/30 全球购物
Mio Skincare美国官网:身体紧致及孕期身体护理
2017/03/05 全球购物
美赞臣营养马来西亚旗舰店:Enfagrow马来西亚
2019/07/26 全球购物
通往英国高街的商店橱窗:Down Your High Street
2020/07/19 全球购物
警察思想汇报
2014/01/04 职场文书
爱岗敬业演讲稿范文
2014/01/14 职场文书
2014最新自愿离婚协议书范本
2014/11/19 职场文书
经典哲理警句:志不真则心不热,心不热则功不贤
2019/11/14 职场文书
护士年终工作总结不会写?各科护士模板总结
2020/01/02 职场文书
python 远程执行命令的详细代码
2022/02/15 Python