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 相关文章推荐
打造计数器DIY三步曲(下)
Oct 09 PHP
PHP防注入安全代码
Apr 09 PHP
php str_pad 函数用法简介
Jul 11 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装(win+linux)
May 05 PHP
php并发对MYSQL造成压力的解决方法
Feb 21 PHP
php语言中使用json的技巧及json的实现代码详解
Oct 27 PHP
PHP用FTP类上传文件视频等的简单实现方法
Sep 23 PHP
Yii针对添加行的增删改查操作示例
Oct 18 PHP
PHPExcel在linux环境下导出报500错误的解决方法
Jan 26 PHP
用Laravel Sms实现laravel短信验证码的发送的实现
Nov 29 PHP
php判断目录存在的简单方法
Sep 26 PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
Jan 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 Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
2016/03/21 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
2017/03/02 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
分享十五个最佳jQuery 幻灯插件和教程
2010/03/27 Javascript
JS获取浏览器语言动态加载JS文件示例代码
2014/10/31 Javascript
jQuery弹出框代码封装DialogHelper
2015/01/30 Javascript
JQuery给网页更换皮肤的方法
2015/05/30 Javascript
jquery拖拽效果完整实例(附demo源码下载)
2016/01/14 Javascript
简介EasyUI datagrid editor combogrid搜索框的实现
2016/04/01 Javascript
jQuery实现页面评论栏中访客信息自动填写功能的方法
2016/05/23 Javascript
JS全角与半角转化实例(分享)
2017/07/04 Javascript
bootstrap treeview 扩展addNode方法动态添加子节点的方法
2017/11/21 Javascript
vuex actions传递多参数的处理方法
2018/09/18 Javascript
Vue 第三方字体图标引入 Font Awesome的方法
2018/09/28 Javascript
vue使用Google地图的实现示例代码
2018/12/19 Javascript
JavaScript实现数字前补“0”的五种方法示例
2019/01/03 Javascript
详解Vue源码学习之双向绑定
2019/04/10 Javascript
python任务调度实例分析
2015/05/19 Python
python获取外网IP并发邮件的实现方法
2017/10/01 Python
Python + selenium自动化环境搭建的完整步骤
2018/05/19 Python
python3 读取Excel表格中的数据
2018/10/16 Python
python原类、类的创建过程与方法详解
2019/07/19 Python
详解Pandas 处理缺失值指令大全
2020/07/30 Python
专业技术职务聘任书
2014/03/29 职场文书
文艺晚会策划方案
2014/06/11 职场文书
建筑工程技术专业求职信
2014/07/16 职场文书
三八活动策划方案
2014/08/17 职场文书
关于感恩的演讲稿400字
2014/08/26 职场文书
暑期培训班招生方案
2014/08/26 职场文书
学前教育专业求职信
2014/09/02 职场文书
班主任2015新年寄语
2014/12/08 职场文书
2015年纪委工作总结
2015/05/13 职场文书
2016年大学生社会实践心得体会
2015/10/09 职场文书
详解MySQL InnoDB存储引擎的内存管理
2021/04/08 MySQL
MongoDB使用场景总结
2022/02/24 MongoDB
不想升级Win11?教你彻底锁定老版Windows系统的方法(附下载地址)
2022/09/23 数码科技