php记录数据库变更日志 修改了哪些字段

记录用户的行为日志有时候对于后台管理尤其是人员管理有很大的作用.日志可以用于追溯哪个人操作的某个东西.不过针对某个表修改了某个字段这个不太好办,于是想到一个办法.如下.

一.需要先建个数据

CREATE TABLE `hanchao_change_log` (
  `id` int(10) NOT NULL COMMENT '' AUTO_INCREMENT PRIMARY KEY,
  `model` varchar(50) NOT NULL COMMENT '触发行为的表',
  `user_id` int(10) NOT NULL DEFAULT '0' COMMENT '执行用户id',
  `record_id` int(10) NOT NULL DEFAULT '0' COMMENT '触发行为的数据id',
  `action` varchar(50) NOT NULL COMMENT 'add/edit/del',
  `action_ip` int(10) NOT NULL DEFAULT '0' COMMENT '执行行为者ip',
  `create_time` int(10) NOT NULL DEFAULT '0' COMMENT '执行行为的时间',
  `remark` text NOT NULL COMMENT '日志备注'
) COMMENT='数据变更日志' ENGINE='InnoDB' COLLATE 'utf8_general_ci';

二.写个记录的函数

/**
  * 记录数据库日志
  * @param string $action 行为标识
  * @param string $model 触发行为的模型名
  * @param int $record_id 触发行为的记录id
  * @param int $user_id 执行行为的用户id
  * @param int $mark 自定义备注
  * @return boolean
  */
function change_log($action = null, $model = null, $record_id = null, $user_id = null,$mark=null){
    if(empty($action) || empty($model) || empty($record_id)){return '参数不能为空';}
    if(empty($user_id)){$user_id = is_login();}
    if($action=='edit' && $mark && is_array($mark) && $mark['oldparam']){
        $oldparam=json_decode(htmlspecialchars_decode($mark['oldparam']),1);unset($mark['oldparam']);
        $edit=array();
        foreach($mark as $k=>$v){if(isset($oldparam[$k]) && $v!=$oldparam[$k]){$edit[$k]=$v;}}
        if($edit){$mark="修改内容:\n";foreach($edit as $k=>$v){$mark.=$k.":".(is_array($v)?serialize($v):$v)."\n";}}
    }
    //插入行为日志
    $data=array();
    $data['action']         =   $action;
    $data['user_id']        =   $user_id;
    $data['action_ip']      =   get_client_ip(1);
    $data['model']          =   $model;
    $data['record_id']      =   $record_id;
    $data['create_time']    =   NOW_TIME;    
    if(!empty($mark))$data['remark']=$mark; 
    M('ChangeLog')->add($data);
}

三.模板中添加个隐藏域用来记录所有字段旧的值(用记编辑记录,添加删除等不需要)

<input type="hidden" name="oldparam"  value='{:json_encode($info)}'/>

四.在相应方法中加入调用函数

change_log('add',CONTROLLER_NAME,$id,'','添加商品');
change_log('edit',CONTROLLER_NAME,$id,'',$postdata);
change_log('del',CONTROLLER_NAME,$id,'','删除商品');

搞定

转载于:https://my.oschina.net/xiaogg/blog/3068578

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值