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中实现记住密码自动登录的代码
Mar 02 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-1 开始了解php
Jul 03 PHP
深入PHP中的HashTable结构详解
Jun 13 PHP
使用PHP备份MySQL和网站发送到邮箱实例代码
Nov 28 PHP
PHP登陆后跳转到登陆前页面实现思路及代码
Jan 17 PHP
PHP中使用memcache存储session的三种配置方法
Apr 05 PHP
php写入、删除与复制文件的方法
Jun 20 PHP
详解PHP序列化反序列化的方法
Oct 27 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
Nov 10 PHP
Codeigniter控制器controller继承问题实例分析
Jan 19 PHP
PHP设计模式之 策略模式Strategy详解【对象行为型】
May 01 PHP
禁止直接访问php文件代码分享
May 05 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
图书管理程序(三)
2006/10/09 PHP
用文本文件制作留言板提示(上)
2006/10/09 PHP
Netbeans 8.2将支持PHP7 更精彩
2016/06/13 PHP
CI框架(CodeIgniter)实现的导入、导出数据操作示例
2018/05/24 PHP
Laravel find in set排序实例
2019/10/09 PHP
PHP mkdir创建文件夹实现方法解析
2020/11/13 PHP
Mootools 1.2教程 滚动条(Slider)
2009/09/15 Javascript
javascript对象之内置对象Math使用方法
2010/04/16 Javascript
js的逻辑运算符 ||
2010/05/31 Javascript
Ajax提交与传统表单提交的区别说明
2014/02/07 Javascript
node.js中module.exports与exports用法上的区别
2016/09/02 Javascript
JS实现自动阅读单词(有道单词本添加功能)
2016/11/14 Javascript
js鼠标移动时禁止选中文字
2017/02/19 Javascript
js实现功能比较全面的全选和多选
2017/03/02 Javascript
nodejs和C语言插入mysql数据库乱码问题的解决方法
2017/04/14 NodeJs
基于zepto.js实现手机相册功能
2017/07/11 Javascript
JS中的算法与数据结构之链表(Linked-list)实例详解
2019/08/20 Javascript
微信小程序swiper禁止用户手动滑动代码实例
2019/08/23 Javascript
我所理解的JavaScript中的this指向
2020/09/04 Javascript
vue动态设置路由权限的主要思路
2021/01/13 Vue.js
python 链接和操作 memcache方法
2017/03/04 Python
python一行sql太长折成多行并且有多个参数的方法
2018/07/19 Python
Python 3.8中实现functools.cached_property功能
2019/05/29 Python
在linux系统下安装python librtmp包的实现方法
2019/07/22 Python
python基于win32api实现键盘输入
2020/12/09 Python
全面介绍python中很常用的单元测试框架unitest
2020/12/14 Python
Html5 Canvas实现图片标记、缩放、移动和保存历史状态功能 (附转换公式)
2020/03/18 HTML / CSS
美国最大的农村生活方式零售店:Tractor Supply Company(TSC)
2017/05/15 全球购物
New Balance加拿大官方网站:运动鞋和健身服装
2018/11/19 全球购物
孝老爱亲模范事迹材料
2014/05/25 职场文书
食堂标语大全
2014/06/11 职场文书
文明单位汇报材料
2014/12/24 职场文书
建国大业观后感600字
2015/06/01 职场文书
初中毕业感言300字
2015/07/31 职场文书
python如何利用traceback获取详细的异常信息
2021/06/05 Python
利用JuiceFS使MySQL 备份验证性能提升 10 倍
2022/03/17 MySQL