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 中文乱码解决办法总结分析
Jul 30 PHP
DW中链接mysql数据库时,建立字符集中文出现乱码的解决方法
Mar 27 PHP
PHP无刷新上传文件实现代码
Sep 19 PHP
php弹出对话框实现重定向代码
Jan 23 PHP
php实现无限级分类
Dec 24 PHP
php中实现获取随机数组列表的自定义函数
Apr 02 PHP
php微信开发自定义菜单
Aug 27 PHP
PHP面向对象程序设计组合模式与装饰模式详解
Dec 02 PHP
PHP中的浅复制与深复制的实例详解
Oct 26 PHP
PHP htmlspecialchars() 函数实例代码及用法大全
Sep 18 PHP
Laravel5.5 视图 - 创建视图和数据传递示例
Oct 21 PHP
laravel框架语言包拓展实现方法分析
Nov 22 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
德生9700DX电路分析
2021/03/02 无线电
PHP与SQL注入攻击[三]
2007/04/17 PHP
php可生成缩略图的文件上传类实例
2014/12/17 PHP
ThinkPHP5.1验证码功能实现的示例代码
2020/06/08 PHP
jQuery EasyUI API 中文文档 - Draggable 可拖拽
2011/09/29 Javascript
jquery在项目中做复选框时遇到的一些问题笔记
2013/11/17 Javascript
JavaScript数值转换的三种方式总结
2014/07/31 Javascript
javascript框架设计读书笔记之数组的扩展与修复
2014/12/02 Javascript
JavaScript对数字的判断与处理实例分析
2015/02/02 Javascript
JQuery通过AJAX从后台获取信息显示在表格上并支持行选中
2015/09/15 Javascript
JavaScript实现的多种鼠标拖放效果
2015/11/03 Javascript
Java  Spring 事务回滚详解
2016/10/17 Javascript
谈谈jQuery之Deferred源码剖析
2016/12/19 Javascript
浅谈Vue.js
2017/03/02 Javascript
用jQuery实现圆点图片轮播效果
2017/03/19 Javascript
微信小程序实现刷脸登录
2018/05/25 Javascript
JavaScript Canvas实现验证码
2020/08/02 Javascript
vue 项目接口管理的实现
2019/01/17 Javascript
如何利用nodejs实现命令行游戏
2020/11/24 NodeJs
原生js实现滑块区间组件
2021/01/20 Javascript
Python编码爬坑指南(必看)
2016/06/10 Python
Python中字符串格式化str.format的详细介绍
2017/02/17 Python
django框架模板中定义变量(set variable in django template)的方法分析
2019/06/24 Python
python简单鼠标自动点击某区域的实例
2019/06/25 Python
Django实现网页分页功能
2019/10/31 Python
如何在Django中使用聚合的实现示例
2020/03/23 Python
Guess美国官网:美国知名服装品牌
2019/04/08 全球购物
4s客服专员岗位职责
2013/12/01 职场文书
个人培训自我鉴定
2014/03/28 职场文书
电钳工人个人求职信
2014/05/10 职场文书
审美与表现自我评价
2015/03/09 职场文书
文明和谐家庭事迹材料(2016精选版)
2016/02/29 职场文书
掌握这项技巧,一年阅读300本书不是梦
2019/09/12 职场文书
python实现剪贴板的操作
2021/07/01 Python
Ajax实现三级联动效果
2021/10/05 Javascript
Java练习之潜艇小游戏的实现
2022/03/16 Java/Android