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 获得汉字拼音首字母的函数
Aug 01 PHP
基于php设计模式中工厂模式详细介绍
May 15 PHP
php中的比较运算符详解
Oct 28 PHP
Codeigniter发送邮件的方法
Mar 19 PHP
PHP永久登录、记住我功能实现方法和安全做法
Apr 27 PHP
php中实现用数组妩媚地生成要执行的sql语句
Jul 10 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
Apr 07 PHP
php实现三级级联下拉框
Apr 17 PHP
phpstudy默认不支持64位php的解决方法
Feb 20 PHP
Lumen timezone 时区设置方法(慢了8个小时)
Jan 20 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
Mar 01 PHP
PHP基础之输出缓冲区基本概念、原理分析
Jun 19 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格式化金额函数分享
2015/02/02 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
2019/10/17 PHP
在html页面上拖放移动标签
2010/01/08 Javascript
关于javascript中的typeof和instanceof介绍
2012/12/04 Javascript
纯js实现瀑布流展现照片(自动适应窗口大小)
2013/04/08 Javascript
JS实现的不规则TAB选项卡效果代码
2015/09/18 Javascript
AngularJS过滤器filter用法总结
2016/12/13 Javascript
详解angularjs结合pagination插件实现分页功能
2017/02/10 Javascript
jQuery实现简单漂亮的Nav导航菜单效果
2017/03/29 jQuery
基于JQuery和原生JavaScript实现网页定位导航特效
2017/04/03 jQuery
关于vuex的学习实践笔记
2017/04/05 Javascript
js 概率计算(简单版)
2017/09/12 Javascript
vue-awesome-swiper 基于vue实现h5滑动翻页效果【推荐】
2018/11/08 Javascript
layer弹出子iframe层父子页面传值的实现方法
2018/11/22 Javascript
vue计算属性get和set用法示例
2019/02/08 Javascript
jQuery实现的图片点击放大缩小功能案例
2020/01/02 jQuery
vue 路由meta 设置导航隐藏与显示功能的示例代码
2020/09/04 Javascript
python正则表达式判断字符串是否是全部小写示例
2013/12/25 Python
Python实现全局变量的两个解决方法
2014/07/03 Python
Python中获取网页状态码的两个方法
2014/11/03 Python
Python二分法搜索算法实例分析
2015/05/11 Python
Python字符串拼接的几种方法整理
2017/08/02 Python
快速入门python学习笔记
2017/12/06 Python
Python多线程同步---文件读写控制方法
2019/02/12 Python
Python实现的远程文件自动打包并下载功能示例
2019/07/12 Python
Pytorch之view及view_as使用详解
2019/12/31 Python
python基于property()函数定义属性
2020/01/22 Python
python 通过exifread读取照片信息
2020/12/24 Python
购买正版游戏和游戏激活码:Green Man Gaming
2019/11/06 全球购物
有影响力的人、名人和艺术家的官方商品:Represent
2019/11/26 全球购物
大学生职业生涯规划书范文
2014/01/14 职场文书
小摄影师教学反思
2014/04/27 职场文书
基层党员群众路线整改措施及努力方向
2014/10/28 职场文书
2015年秋季运动会前导词
2015/07/20 职场文书
中秋节随笔
2015/08/15 职场文书
Python实现Hash算法
2022/03/18 Python