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 strcmp使用说明
Apr 22 PHP
PHP对字符串的递增运算分析
Aug 08 PHP
利用Ffmpeg获得flv视频缩略图和视频时间的代码
Sep 15 PHP
深入PHP内存相关的功能特性详解
Jun 08 PHP
PHP 通过Socket收发十六进制数据的实现代码
Aug 16 PHP
php遍历数组的4种方法总结
Jul 05 PHP
PHP获取中国时间(上海时区时间)及美国时间的方法
Feb 23 PHP
php通过各种函数判断0和空
Jul 04 PHP
PHP实现负载均衡session共享redis缓存操作示例
Aug 22 PHP
PHP ajax+jQuery 实现批量删除功能实例代码小结
Dec 06 PHP
php快速导入大量数据的实例方法
Sep 23 PHP
php经典趣味算法实例代码
Jan 21 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
解析MySql与Java的时间类型
2013/06/22 PHP
php session实现多级目录存放实现代码
2016/02/03 PHP
基于PHP实现数据分页显示功能
2016/05/26 PHP
php和nginx交互实例讲解
2019/09/24 PHP
PHP操作Redis常用命令的实例详解
2020/12/23 PHP
javascript得到XML某节点的子节点个数的脚本
2008/10/11 Javascript
基于JQuery的一句代码实现表格的简单筛选
2010/07/26 Javascript
再谈querySelector和querySelectorAll的区别与联系
2012/04/20 Javascript
分析Node.js connect ECONNREFUSED错误
2013/04/09 Javascript
javascript右下角弹层及自动隐藏(自己编写)
2013/11/20 Javascript
JavaScript实现在数组中查找不同顺序排列的字符串
2014/09/26 Javascript
JavaScript bold方法入门实例(把指定文字显示为粗体)
2014/10/17 Javascript
jquery实现动态画圆
2014/12/04 Javascript
jQuery短信验证倒计时功能实现方法详解
2016/05/25 Javascript
AngularJS 表达式详细讲解及实例代码
2016/07/26 Javascript
ES6中的箭头函数实例详解
2017/04/06 Javascript
js HTML5 canvas绘制图片的方法
2017/09/08 Javascript
chosen实现省市区三级联动
2018/08/16 Javascript
vant(ZanUi)结合async-validator实现表单验证的方法
2018/12/06 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
2019/05/21 Javascript
javascript for循环性能测试示例
2019/08/07 Javascript
如何HttpServletRequest文件对象并储存
2020/08/14 Javascript
跟老齐学Python之有点简约的元组
2014/09/24 Python
python图像处理之镜像实现方法
2015/05/30 Python
Python基于回溯法子集树模板解决数字组合问题实例
2017/09/02 Python
Python设计模式之建造者模式实例详解
2019/01/17 Python
Django 日志配置按日期滚动的方法
2019/01/31 Python
Python3中列表list合并的四种方法
2019/04/19 Python
在Python中实现函数重载的示例代码
2019/12/12 Python
浅谈Python爬虫原理与数据抓取
2020/07/21 Python
个人找工作自荐信格式
2013/09/21 职场文书
《春笋》教学反思
2014/04/15 职场文书
党员民主生活会对照检查材料思想汇报
2014/09/28 职场文书
销售经理工作检讨书
2015/02/19 职场文书
利用Python实现翻译HTML中的文本字符串
2022/06/21 Python
vue3 自定义图片放大器效果的示例代码
2022/07/23 Vue.js