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 相关文章推荐
使用 MySQL 开始 PHP 会话
Dec 21 PHP
php生成SessionID和图片校验码的思路和实现代码
Mar 10 PHP
PHP查询MySQL大量数据的时候内存占用分析
Jul 22 PHP
PHP判断是否有Get参数的方法
May 05 PHP
php实现二进制和文本相互转换的方法
Apr 18 PHP
php与python实现的线程池多线程爬虫功能示例
Oct 12 PHP
php array_walk 对数组中的每个元素应用用户自定义函数详解
Nov 18 PHP
thinkphp修改配置进入默认首页的方法
Feb 07 PHP
PHP用PDO如何封装简单易用的DB类详解
Jul 30 PHP
详解PHP文件的自动加载(autoloading)
Feb 04 PHP
原生JS实现Ajax通过GET方式与PHP进行交互操作示例
May 12 PHP
php生成微信红包数组的方法
Sep 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
php MessagePack介绍
2013/10/06 PHP
CodeIgniter删除和设置Cookie的方法
2015/04/07 PHP
php+ajax制作无刷新留言板
2015/10/27 PHP
PHP实现数组的笛卡尔积运算示例
2017/12/15 PHP
php PDO属性设置与操作方法分析
2018/12/27 PHP
JQuery 学习笔记 选择器之一
2009/07/23 Javascript
JavaScript学习点滴 call、apply的区别
2010/10/22 Javascript
收集的一些Array及String原型对象的扩展实现代码
2010/12/05 Javascript
js计算任意值之间随机数的方法
2015/01/16 Javascript
jQuery制作仿Mac Lion OS滚动条效果
2015/02/10 Javascript
JS自动倒计时30秒后按钮才可用(两种场景)
2015/08/31 Javascript
jquery对象和DOM对象的任意相互转换
2016/02/21 Javascript
JS动态增删表格行的方法
2016/03/03 Javascript
JQuery 两种方法解决刚创建的元素遍历不到的问题
2016/04/13 Javascript
AngularJS基础 ng-paste 指令简单示例
2016/08/02 Javascript
jQuery实现文字自动横移
2017/01/08 Javascript
jQuery使用方法
2017/02/04 Javascript
基于vue实现滚动条滚动到指定位置对应位置数字进行tween特效
2019/04/18 Javascript
JS实现水平遍历和嵌套递归操作示例
2019/08/15 Javascript
微信小程序scroll-view隐藏滚动条的方法详解
2020/03/25 Javascript
使用setup.py安装python包和卸载python包的方法
2013/11/27 Python
python进程管理工具supervisor使用实例
2014/09/17 Python
Python实现字典按照value进行排序的方法分析
2017/12/23 Python
详解tensorflow训练自己的数据集实现CNN图像分类
2018/02/07 Python
python2.7+selenium2实现淘宝滑块自动认证功能
2018/02/24 Python
用TensorFlow实现lasso回归和岭回归算法的示例
2018/05/02 Python
python paramiko利用sftp上传目录到远程的实例
2019/01/03 Python
Python中IP地址处理IPy模块的方法
2019/08/16 Python
HTML5 Notification(桌面提醒)功能使用实例
2014/03/17 HTML / CSS
驴妈妈旅游网:中国新型的B2C旅游电子商务网站
2016/08/16 全球购物
欧洲最大的预定车位市场:JustPark
2020/01/06 全球购物
澳大利亚最受欢迎的超级商场每日优惠:Catch
2020/11/17 全球购物
史上最全面的Java面试题汇总!
2015/02/03 面试题
个人思想政治总结
2015/03/05 职场文书
2016学校元旦晚会经典开场白台词
2015/12/03 职场文书
MySQL数据库实验实现简单数据库应用系统设计
2022/06/21 MySQL