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 EOT定界符的使用详解
Sep 30 PHP
浅析Mysql 数据回滚错误的解决方法
Aug 05 PHP
php float不四舍五入截取浮点型字符串方法总结
Oct 28 PHP
php中session过期时间设置及session回收机制介绍
May 05 PHP
php写的AES加密解密类分享
Jun 20 PHP
Destoon模板制作简明教程
Jun 20 PHP
ThinkPHP连接数据库及主从数据库的设置教程
Aug 22 PHP
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
Nov 04 PHP
php中bind_param()函数用法分析
Mar 28 PHP
PHP 实现浏览记录并按日期分组
May 11 PHP
CI框架网页缓存简单用法分析
Dec 26 PHP
基于PHP的微信公众号的开发流程详解
Aug 07 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
Zend Studio 无法启动的问题解决方法
2008/12/04 PHP
php mssql 日期出现中文字符的解决方法
2009/03/10 PHP
session在php5.3中的变化 session_is_registered() is deprecated in
2013/11/12 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
2015/12/18 PHP
优化 JavaScript 代码的方法小结
2009/07/16 Javascript
javaScript checkbox 全选/反选及批量删除
2010/04/28 Javascript
一个可绑定数据源的jQuery数据表格插件
2010/07/17 Javascript
javascript学习笔记(七) js函数介绍
2012/06/19 Javascript
防止文件缓存的js代码
2013/01/10 Javascript
Jquery选择子控件&quot;大于号&quot;和&quot; &quot;区别介绍及使用示例
2013/06/25 Javascript
判断一个变量是数组Array类型的方法
2013/09/16 Javascript
javaScript对文字按照拼音排序实现代码
2013/12/27 Javascript
js文件包含的几种方式介绍
2014/09/28 Javascript
js实现动画特效的文字链接鼠标悬停提示的方法
2015/03/02 Javascript
javascript中CheckBox全选终极方案
2015/05/20 Javascript
浅谈jQuery中height与width
2015/07/06 Javascript
JS实现页面中所有img对象添加onclick事件及新窗口查看图片的方法
2016/12/27 Javascript
JavaScript使用readAsDataURL读取图像文件
2017/05/10 Javascript
微信小程序实现鼠标拖动效果示例
2017/12/01 Javascript
elementUI Tree 树形控件的官方使用文档
2019/04/25 Javascript
Node.js+Vue脚手架环境搭建的方法步骤
2020/03/08 Javascript
vue-cli3项目配置eslint代码规范的完整步骤
2020/09/10 Javascript
Python使用django获取用户IP地址的方法
2015/05/11 Python
python编程培训 python培训靠谱吗
2018/01/17 Python
python实现海螺图片的方法示例
2019/05/12 Python
Python计算不规则图形面积算法实现解析
2019/11/22 Python
np.random.seed() 的使用详解
2020/01/14 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
2020/02/05 Python
Python脚本如何在bilibili中查找弹幕发送者
2020/06/04 Python
Python3爬虫关于识别点触点选验证码的实例讲解
2020/07/30 Python
西安启天科技有限公司网络工程师面试题笔试题
2016/06/12 面试题
介绍一下Make? 为什么使用make
2016/07/31 面试题
信息专业个人的自我评价
2013/12/27 职场文书
创业女性典型材料
2014/05/02 职场文书
2016年乡镇综治宣传月活动总结
2016/03/16 职场文书
css布局巧妙技巧之css三角示例的运用
2022/03/16 HTML / CSS