青华模具培训学校

 找回密码
 注册

QQ登录

只需一步,快速开始

青华模具培训学院
查看: 1033|回复: 0

[讨论] 浅谈管理系统作日志设计(附作日志类)

[复制链接]
发表于 2012-9-17 10:30 | 显示全部楼层 |阅读模式
现在基本解决了开始做之前,必须把两个日志分清楚,那就是普通作日志和业务作日志,这两者有何区别?理解,普通作日志就是单表的作记录,而业务作日志则就是一系列的普通作日志的集合。打个比方,532170236,用户需要购买一样宝贝,已经到下单那步,下单就是个业务,这个业务背后就是一系列的业务,如:生成订单 生成商品快照 发送一条站内信 删除购物车里对应宝贝。www.tijiansy.com  沈阳体检团购,这样一个下单作就包含了4部分,可以把这4部分看成是4张表,分别对这4张表进行对应的作,就实现了业务。但今天我要讲的不是业务作日志,因为不同项目的业务不尽相同,所以它无法做成通用模块,而我要讲的就是普通作日志。上面解释了一大段,下面干货就要亮相了先洗把脸清醒下。首先,哪些地方需要记录作日志?执行insertupdatdelet这3个作的时候,就需要进行日志,而日志执行的先后顺序如下顺序清楚后,就来看下我写的一份日志作类吧,第一版随便谢谢的重复代码有点多,还未来得及优化。classLOG{protected$primaryid;protected$tbid;protected$tbname;protected$keys;protected$values;/***参数说明 *int$tbid查询指定表的id*string$tbnam数据库表名 */publicfunctioninsert$tbid,不过看了博客园里的某篇文章后。管理系统的作日志如何做成通用的模块一直是个让我头疼的问题。$tbnam{global$db;//查询表注释 $db-queri'showtablestatuswherename="'.$tbname.'"';$tb=$db-fetch;//插入日志主表 $returnid=$db-insert0,2,'tb_log',arrai'adminid='.$_SESSION['admin']['id'],'type=1','tableid='.$tbid,'tablename="'.$tbname.'"','comment="'.$tb['Comment'].'"','dt=now';//查询字段注释 $db-queri'showfullcolumnsfrom'.$tbnam;$tb=$db-fetchA ll;foreach$tbas$v{$commentA rray[$v['Field']]=$v['Comment'];}//查询所有字段信息,插入日志从表 $rs=$db-select0,1,$tbname,'*','andtbid='.$tbid;$keys=array_kei$r;$values=array_valu$r;for$i=0;$icount$kei;$i++{$db-insert0,0,'tb_log_content',arrai'logid='.$returnid,'tbkey="'.$keys[$i].'"','tbvalue="'.$values[$i].'"','comment="'.$commentA rray[$keys[$i]].'"';}}publicfunctionupdateStart$tbid,$tbnam{global$db;//查询表注释 $db-queri'showtablestatuswherename="'.$tbname.'"';$tb=$db-fetch;//插入日志主表 $returnid=$db-insert0,2,'tb_log',arrai'adminid='.$_SESSION['admin']['id'],'type=2','tableid='.$tbid,'tablename="'.$tbname.'"','comment="'.$tb['Comment'].'"','dt=now';//查询修改前数据信息 $rs=$db-select0,1,$tbname,'*','andtbid='.$tbid;$keys=array_kei$r;$values=array_valu$r;$this-primaryid=$returnid;$this-tbid=$tbid;$this-tbname=$tbname;$this-keys=$keys;$this-values=$values;}publicfunctionupdateEnd{global$db;//查询字段注释 $db-queri'showfullcolumnsfrom'.$this-tbname;$tb=$db-fetchA ll;foreach$tbas$v{$commentA rray[$v['Field']]=$v['Comment'];}//查询修改后数据信息 $rs=$db-select0,1,$this-tbname,'*','andtbid='.$this-tbid;$currentvalues=array_valu$r;//前后信息进行比较 for$i=0;$icount$currentvalu;$i++{if$this-values[$i]!==$currentvalues[$i]{$db-insert0,0,'tb_log_content',arrai'logid='.$this-primaryid,'tbkey="'.$this-keys[$i].'"','tbvalue="'.$this-values[$i].'"','currenttbvalue="'.$currentvalues[$i].'"','comment="'.$commentA rray[$this-keys[$i]].'"';}}}publicfunctiondelet$tbid,$tbnam{global$db;//查询表注释 $db-queri'showtablestatuswherename="'.$tbname.'"';$tb=$db-fetch;//插入日志主表 $returnid=$db-insert0,2,'tb_log',arrai'adminid='.$_SESSION['admin']['id'],'type=3','tableid='.$tbid,'tablename="'.$tbname.'"','comment="'.$tb['Comment'].'"','dt=now';//查询字段注释 $db-queri'showfullcolumnsfrom'.$tbnam;$tb=$db-fetchA ll;foreach$tbas$v{$commentA rray[$v['Field']]=$v['Comment'];}//查询所有字段信息,插入日志从表 $rs=$db-select0,1,$tbname,'*','andtbid='.$tbid;$keys=array_kei$r;$values=array_valu$r;for$i=0;$icount$kei;$i++{$db-insert0,0,'tb_log_content',arrai'logid='.$returnid,'tbkey="'.$keys[$i].'"','tbvalue="'.$values[$i].'"','comment="'.$commentA rray[$keys[$i]].'"';}}}使用前,需要引入数据库作类,这是之前写的一份,可参考《全新的PDO数据库作类(仅适用Mysql引入之后,就可以开始使用了select$log-insert82,'tb_member';update$log-updateStart82,'tb_member';//中间放更新作代码 $log-updateEnd;delete$log-delet82,'tb_member';可以看到一共只需要两个参数即可,分别是表ID主键)和表名称。另外需要强调一点,表注释和字段注释一定要完整,因为记录的信息包含注释,www.hqq6.com 日博备用网址,目的就是为了查阅的时候能清楚哪个字段是干什么用的下面就看下成品吧最后把表结构分享下,一共2张表,一张主表一张从表,主表记录作表及作人等信息,从表记录作的表字段信息。--------------------------------Tablestructurefor`tb_log`------------------------------CREA TETA BLE`tb_log``tbid`bigint20NOTNULLA UTO_INCREMENT,`adminid`bigint20DEFA ULTNULLCOMMENT'管理员id',`type`tinyint4DEFA ULT'1'COMMENT'作类型:1新增2修改3删除',`tableid`bigint20DEFA ULTNULL,`tablename`varchar255COLLA TEutf8_unicode_ciDEFA ULTNULLCOMMENT'表名',`comment`varchar255COLLA TEutf8_unicode_ciDEFA ULTNULL,`dt`datetimeDEFA ULTNULL,PRIMA RYKEY`tbid`ENGINE=InnoDBA UTO_INCREMENT=27DEFA ULTCHA RSET=utf8COLLA TE=utf8_unicode_ci;--------------------------------Tablestructurefor`tb_log_content`------------------------------CREA TETA BLE`tb_log_content``tbid`bigint20NOTNULLA UTO_INCREMENT,`logid`bigint20DEFA ULTNULL,`tbkey`longtextCOLLA TEutf8_unicode_ci,`tbvalue`longtextCOLLA TEutf8_unicode_ci,`currenttbvalue`longtextCOLLA TEutf8_unicode_ci,`comment`varchar255COLLA TEutf8_unicode_ciDEFA ULTNULL,PRIMA RYKEY`tbid`ENGINE=InnoDBA UTO_INCREMENT=109DEFA ULTCHA RSET=utf8COLLA TE=utf8_unicode_ci;,。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|关于我们|sitemap|小黑屋|Archiver|手机版|UG网-UG技术论坛-青华数控模具培训学校 ( 粤ICP备15108561号 )

GMT+8, 2024-6-5 15:05 , Processed in 0.053268 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表