mayfish 数据入库验证代码

2015-01-24信息快讯网

mayfish 可以灵活的自定义将要执行写入的数据内容的校验规则,以减少开发人员手动对每一个字段的数据进行校验的麻烦。

一般在把数据写入数据库之前,先对将要写入的数据进行校验,可以避免出现比较严重的安全问题(例如一般性的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中模拟POST传递数据的两种方法分享
Sorting Array Values in PHP(数组排序)
PHP获取MAC地址的函数代码
PHP setcookie指定domain参数后,在IE下设置cookie失效的解决方法
php中使用Imagick实现图像直方图的实现代码
PHP表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
php中使用Curl、socket、file_get_contents三种方法POST提交数据
PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码
php数据结构 算法(PHP描述) 简单选择排序 simple selection sort
php Smarty初体验二 获取配置信息
PHP 防注入函数(格式化数据)
discuz程序的PHP加密函数原理分析
php和数据库结合的一个简单的web实例 代码分析 (php初学者)
php自定义函数call_user_func和call_user_func_array详解
php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
php array_pop()数组函数将数组最后一个单元弹出(出栈)
php array_map()数组函数使用说明
PHP array_multisort()函数的使用札记
php设计模式 Visitor 访问者模式
从康盛产品(discuz)提取出来的模板类
php 将字符串按大写字母分隔成字符串数组
在PHP中操作Excel实例代码
PHP开发环境配置(MySQL数据库安装图文教程)
php file_get_contents函数轻松采集html数据
php cache类代码(php数据缓存类)
在IIS7.0下面配置PHP 5.3.2运行环境的方法
php array_search() 函数使用
php in_array 函数使用说明与in_array需要注意的地方说明
php将数据库中所有内容生成静态html文档的代码
php Smarty模板生成html文档的方法
创建数据库php代码 用PHP写出自己的BLOG系统
Smarty Foreach 使用说明
mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数
php smarty函数扩展
php Smarty date_format [格式化时间日期]
php is_file()和is_dir()用于遍历目录时用法注意事项
discuz authcode 经典php加密解密函数解析
PHP实现域名whois查询的代码(数据源万网、新网)
PHP5.3.1 不再支持ISAPI
PHP array_push 数组函数
MayFish PHP的MVC架构的开发框架
php array_map array_multisort 高效处理多维数组排序
©2014-2024 dbsqp.com