国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

淺談管理系統操作日志設計(附操作日志類)

開發 前端 項目管理
打個比方,用戶需要購買一樣寶貝,已經到了下單那步,下單就是個業務,這個業務背后就是一系列的業務,如:生成訂單 → 生成商品快照 → 發送一條站內信 → 刪除購物車里對應寶貝。

管理系統的操作日志如何做成通用的模塊一直是個讓我頭疼的問題,不過看了博客園里的某篇文章后,現在基本解決了。

相關文章鏈接:《系統操作日志設計

在開始做之前,必須把兩個日志分清楚,那就是普通操作日志和業務操作日志,這兩者有何區別?

在我理解,普通操作日志就是單表的操作記錄,而業務操作日志則就是一系列的普通操作日志的集合。

打個比方,用戶需要購買一樣寶貝,已經到了下單那步,下單就是個業務,這個業務背后就是一系列的業務,如:生成訂單 → 生成商品快照 → 發送一條站內信 → 刪除購物車里對應寶貝。

這樣一個下單操作就包含了4部分,可以把這4部分看成是4張表,分別對這4張表進行對應的操作,就實現了業務。

但今天我要講的不是業務操作日志,因為不同項目的業務不盡相同,所以它無法做成通用模塊,而我要講的,就是普通操作日志。

上面解釋了一大段,下面干貨就要亮相了,先洗把臉清醒下。

首先,哪些地方需要記錄操作日志?執行insert、update、delete這3個操作的時候,就需要進行日志,而日志執行的先后順序如下

 

順序清楚后,就來看下我寫的一份日志操作類吧,***版隨便謝謝的,重復代碼有點多,還未來得及優化。

  1. class LOG{  
  2.     protected $primaryid;  
  3.     protected $tbid;  
  4.     protected $tbname;  
  5.     protected $keys;  
  6.     protected $values;  
  7.     /**  
  8.      * 參數說明  
  9.      * int              $tbid       查詢指定表的id  
  10.      * string           $tbname     數據庫表名  
  11.      */ 
  12.     public function insert($tbid$tbname){  
  13.         global $db;  
  14.         //查詢表注釋  
  15.         $db->query('show table status where name = "'.$tbname.'"');  
  16.         $tb = $db->fetch();  
  17.         //插入日志主表  
  18.         $returnid = $db->insert(0, 2, 'tb_log'array(  
  19.             'adminid = '.$_SESSION['admin']['id'],  
  20.             'type = 1',  
  21.             'tableid = '.$tbid,  
  22.             'tablename = "'.$tbname.'"',  
  23.             'comment = "'.$tb['Comment'].'"',  
  24.             'dt = now()' 
  25.         ));  
  26.         //查詢字段注釋  
  27.         $db->query('show full columns from '.$tbname);  
  28.         $tb = $db->fetchAll();  
  29.         foreach($tb as $v){  
  30.             $commentArray[$v['Field']] = $v['Comment'];  
  31.         }  
  32.         //查詢所有字段信息,插入日志從表  
  33.         $rs = $db->select(0, 1, $tbname'*''and tbid = '.$tbid);  
  34.         $keys = array_keys($rs);  
  35.         $values = array_values($rs);  
  36.         for($i = 0; $i < count($keys); $i++){  
  37.             $db->insert(0, 0, 'tb_log_content'array(  
  38.                 'logid = '.$returnid,  
  39.                 'tbkey = "'.$keys[$i].'"',  
  40.                 'tbvalue = "'.$values[$i].'"',  
  41.                 'comment = "'.$commentArray[$keys[$i]].'"' 
  42.             ));  
  43.         }  
  44.     }  
  45.     public function updateStart($tbid$tbname){  
  46.         global $db;  
  47.         //查詢表注釋  
  48.         $db->query('show table status where name = "'.$tbname.'"');  
  49.         $tb = $db->fetch();  
  50.         //插入日志主表  
  51.         $returnid = $db->insert(0, 2, 'tb_log'array(  
  52.             'adminid = '.$_SESSION['admin']['id'],  
  53.             'type = 2',  
  54.             'tableid = '.$tbid,  
  55.             'tablename = "'.$tbname.'"',  
  56.             'comment = "'.$tb['Comment'].'"',  
  57.             'dt = now()' 
  58.         ));  
  59.         //查詢修改前數據信息  
  60.         $rs = $db->select(0, 1, $tbname'*''and tbid = '.$tbid);  
  61.         $keys = array_keys($rs);  
  62.         $values = array_values($rs);  
  63.         $this->primaryid = $returnid;  
  64.         $this->tbid = $tbid;  
  65.         $this->tbname = $tbname;  
  66.         $this->keys = $keys;  
  67.         $this->values = $values;  
  68.     }  
  69.     public function updateEnd(){  
  70.         global $db;  
  71.         //查詢字段注釋  
  72.         $db->query('show full columns from '.$this->tbname);  
  73.         $tb = $db->fetchAll();  
  74.         foreach($tb as $v){  
  75.             $commentArray[$v['Field']] = $v['Comment'];  
  76.         }  
  77.         //查詢修改后數據信息  
  78.         $rs = $db->select(0, 1, $this->tbname, '*''and tbid = '.$this->tbid);  
  79.         $currentvalues = array_values($rs);  
  80.         //前后信息進行比較  
  81.         for($i = 0; $i < count($currentvalues); $i++){  
  82.             if($this->values[$i] !== $currentvalues[$i]){  
  83.                 $db->insert(0, 0, 'tb_log_content'array(  
  84.                     'logid = '.$this->primaryid,  
  85.                     'tbkey = "'.$this->keys[$i].'"',  
  86.                     'tbvalue = "'.$this->values[$i].'"',  
  87.                     'currenttbvalue = "'.$currentvalues[$i].'"',  
  88.                     'comment = "'.$commentArray[$this->keys[$i]].'"' 
  89.                 ));  
  90.             }  
  91.         }  
  92.     }  
  93.     public function delete($tbid$tbname){  
  94.         global $db;  
  95.         //查詢表注釋  
  96.         $db->query('show table status where name = "'.$tbname.'"');  
  97.         $tb = $db->fetch();  
  98.         //插入日志主表  
  99.         $returnid = $db->insert(0, 2, 'tb_log'array(  
  100.             'adminid = '.$_SESSION['admin']['id'],  
  101.             'type = 3',  
  102.             'tableid = '.$tbid,  
  103.             'tablename = "'.$tbname.'"',  
  104.             'comment = "'.$tb['Comment'].'"',  
  105.             'dt = now()' 
  106.         ));  
  107.         //查詢字段注釋  
  108.         $db->query('show full columns from '.$tbname);  
  109.         $tb = $db->fetchAll();  
  110.         foreach($tb as $v){  
  111.             $commentArray[$v['Field']] = $v['Comment'];  
  112.         }  
  113.         //查詢所有字段信息,插入日志從表  
  114.         $rs = $db->select(0, 1, $tbname'*''and tbid = '.$tbid);  
  115.         $keys = array_keys($rs);  
  116.         $values = array_values($rs);  
  117.         for($i = 0; $i < count($keys); $i++){  
  118.             $db->insert(0, 0, 'tb_log_content'array(  
  119.                 'logid = '.$returnid,  
  120.                 'tbkey = "'.$keys[$i].'"',  
  121.                 'tbvalue = "'.$values[$i].'"',  
  122.                 'comment = "'.$commentArray[$keys[$i]].'"' 
  123.             ));  
  124.         }  
  125.     }  

使用前,需要引入數據庫操作類,這是我之前寫的一份,可參考《全新的PDO數據庫操作類(僅適用Mysql)》。

引入之后,就可以開始使用了。

select

  1. $log->insert(82, 'tb_member'); 

update

  1. $log->updateStart(82, 'tb_member');   
  2. //中間放更新操作代碼   
  3. $log->updateEnd(); 

delete

  1. $log->delete(82, 'tb_member'); 

可以看到,一共只需要兩個參數即可,分別是表ID(主鍵)和表名稱。

另外需要強調一點,表注釋和字段注釋一定要完整,因為記錄的信息包含注釋,目的就是為了查閱的時候能清楚哪個字段是干什么用的。

下面就看下成品吧

***把表結構分享下,一共2張表,一張主表一張從表,主表記錄操作表及操作人等信息,從表記錄操作的表字段信息。

  1. -- ----------------------------   
  2. -- Table structure for `tb_log`   
  3. -- ----------------------------   
  4. CREATE TABLE `tb_log` (   
  5.   `tbid` bigint(20) NOT NULL AUTO_INCREMENT,   
  6.   `adminid` bigint(20) DEFAULT NULL COMMENT '管理員id',   
  7.   `type` tinyint(4) DEFAULT '1' COMMENT '操作類型:1新增2修改3刪除',   
  8.   `tableid` bigint(20) DEFAULT NULL,   
  9.   `tablename` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '表名',   
  10.   `comment` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,   
  11.   `dt` datetime DEFAULT NULL,   
  12.   PRIMARY KEY (`tbid`)   
  13. ) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;   
  14.     
  15. -- ----------------------------   
  16. -- Table structure for `tb_log_content`   
  17. -- ----------------------------   
  18. CREATE TABLE `tb_log_content` (   
  19.   `tbid` bigint(20) NOT NULL AUTO_INCREMENT,   
  20.   `logid` bigint(20) DEFAULT NULL,   
  21.   `tbkey` longtext COLLATE utf8_unicode_ci,   
  22.   `tbvalue` longtext COLLATE utf8_unicode_ci,   
  23.   `currenttbvalue` longtext COLLATE utf8_unicode_ci,   
  24.   `comment` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,   
  25.   PRIMARY KEY (`tbid`)   
  26. ) ENGINE=InnoDB AUTO_INCREMENT=109 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

原文鏈接:http://www.cnblogs.com/hooray/archive/2012/09/05/2672133.html

【編輯推薦】

  1. ASP.NET MVC3 的一個OutputCache問題
  2. Winform開發框架之系統登錄實現
  3. JavaScript項目優化總結
  4. 項目模塊開發——切dvd庫
  5. 如何掌握程序語言
責任編輯:張偉 來源: 胡尐睿的博客
相關推薦

2024-01-04 07:55:32

系統操作日志接口

2009-12-11 17:55:59

Linux操作系統

2019-07-04 10:17:52

操作日志系統

2011-07-25 09:39:10

Linux服務器操作系統

2024-04-25 08:24:51

C#系統操作日志

2012-06-01 09:57:54

Linux服務器Linux操作系統

2019-12-17 18:04:09

操作系統Linux中央處理器

2010-05-28 18:16:43

MySQL 操作日志

2020-08-31 07:00:00

Android安卓日志分析

2010-04-15 15:32:59

Oracle操作日志

2023-03-06 11:36:13

SpingBoot注解

2009-07-14 18:35:53

MyEclipse實用

2009-09-08 15:19:52

Linq Where操

2023-12-17 14:36:05

2023-10-31 18:42:21

2012-08-29 13:39:29

2011-01-19 10:42:15

2011-02-21 13:40:17

2023-02-10 09:40:26

systemd日志

2022-05-31 08:04:30

前端設計模式
點贊
收藏

51CTO技術棧公眾號

欧美国产日本高清在线| 伊人色综合久久天天| 久久99精品久久| 91网在线免费观看| 色视频一区二区| 亚洲激情影院| 天堂av在线电影| 手机在线视频你懂的| 亚洲日本成人女熟在线观看| 国产精品白丝jk白祙喷水网站 | 97碰碰碰免费色视频| 国产精品久久久久久久久久免费看| 国内精品国产成人国产三级粉色 | 激情五月播播久久久精品| 厕沟全景美女厕沟精品| 人妻少妇精品无码专区二区 | 久久成人免费网| 成人mm视频在线观看| 免费在线观看毛片网站| 久久久久久综合网天天| 亚洲美女区一区| 国产精品theporn| а√在线中文在线新版| 欧美精品一区二区三区三州| 久久久久日韩精品久久久男男| 亚洲啪啪综合av一区二区三区| 99久久夜色精品国产亚洲狼| www在线观看播放免费视频日本| 欧美一区二区三区综合| 欧美激情第三页| 精品久久中文字幕久久av| 久久婷婷一区| 伊人久久一区| 欧美性猛交p30| 欧美精品一区二区三区四区五区| 国产欧美一区| 麻豆一区二区三区四区精品蜜桃| 国产不卡在线观看| 欧美性猛交一区二区三区精品| 肉肉av福利一精品导航| 中文.日本.精品| aaaaa毛片| 高清av免费一区中文字幕| 精品国产成人系列| 久久嫩草精品久久久精品| 成人羞羞视频在线看网址| 快射视频在线观看| 国产亚洲黄色片| 国产精品视频免费观看www| 91精品国产欧美一区二区| 97精品视频在线观看自产线路二| 日韩高清欧美| bl视频在线免费观看| 无限资源日本好片| 国产一区二区在线观看免费播放| 中文字幕亚洲欧美日韩高清| 亚洲444eee在线观看| 捆绑调教一区二区三区| 亚州综合一区| 色呦呦在线视频| 日本在线一二三区| 欧美日韩亚洲免费| 午夜精品久久久久久99热| 欧美精品日韩综合在线| 国产亚洲成aⅴ人片在线观看| 欧美成人tv| 成人免费91| 蜜桃视频网站在线| 成人看片app| 亚洲欧美日韩精品综合在线观看| 欧洲成人免费视频| 亚洲成人黄色在线观看| 一区二区在线观看av| 国内不卡的二区三区中文字幕 | 欧美激情视频给我| 在线电影欧美成精品| 国产精品女主播av| 麻豆视频一区二区| 清纯唯美亚洲综合一区| 欧美一级免费| dy888亚洲精品一区二区三区| 德国一级在线视频| 妺妺窝人体色www看人体| av成人在线电影| 777精品视频| 中文字幕亚洲天堂| 欧美一区二区久久久| 亚洲日本一区二区| 成人一区二区三区在线观看| 一区二区动漫| 欧美亚洲国产一区| av久久网站| 婷婷色在线播放| 三级在线电影| 国模大尺度私拍在线视频| 国产精品裸体瑜伽视频| 日韩欧美在线电影| 鬼打鬼之黄金道士1992林正英| 91产国在线观看动作片喷水| 中文字幕不卡av| 亚洲成人激情视频| 欧美高清dvd| 色狠狠综合天天综合综合| 亚洲免费观看高清| 国产欧美日韩在线| av不卡免费电影| 国产一区二区在线电影| 国产精品久久久久毛片大屁完整版 | 日韩欧美的一区| 好吊成人免视频| 亚洲免费看黄网站| 久久久精品tv| 99久久综合狠狠综合久久| 国产最新精品免费| 日韩电影在线免费| 亚洲精选在线| 欧美精品综合| 欧美91精品| 亚洲精品久久久| 精品美女久久久| 美女久久久久| 任你躁在线精品免费| 亚洲综合视频| av成人在线观看| 精品国产美女a久久9999| 韩国成人漫画| 欧美极品影院| 丁香婷婷久久| 91成人app| 亚洲精品一区二区三区在线| 57pao成人永久免费| 国产成人免费av一区二区午夜 | 国产精品国产亚洲精品看不卡| 青青草影院在线观看| 国产高清精品软男同| 亚洲一区二区在线免费观看| 亚洲精品一区二区三区四区五区| 欧美精品一区二区三区在线看午夜| 国产亚洲欧美一区二区三区| 国产综合动作在线观看| 97自拍视频| 国产免费一区| 免费在线国产精品| 色一情一乱一伦一区二区三欧美| 四虎影视永久免费在线观看一区二区三区| 久草热久草热线频97精品| 免费看污久久久| 日本在线一区| 欧美与动交zoz0z| 国产乱子伦精品无码专区| 5月婷婷6月丁香| xxx国产在线观看| 黄页网站在线观看| 福利在线午夜| 欧美巨大xxxx做受沙滩| 免费观看亚洲| 99久久这里有精品| 欧美人妖视频| 亚洲一区 二区 三区| 国产一区二区三区久久| 精品一区二区三区蜜桃| 国产高清不卡一区| 久久综合九色综合欧美98| 欧美国产精品v| 亚洲精品第一国产综合野| 岛国精品视频在线播放| 欧美丰满嫩嫩电影| 亚洲精品小视频| 欧美男插女视频| 国产精品专区一| 日本精品一区二区三区视频| www.好吊操| 成人福利资源| 国产剧情在线观看| 17videosex性欧美| 四虎地址8848精品| 久久不见久久见国语| 亚洲成人原创| 国产精品一色哟哟哟| 国产精品麻豆久久久| 91激情五月电影| 亚洲男人天堂久| 91国内产香蕉| 国产尤物99| 欧美一级免费播放| 欧美艹逼视频| 91香蕉在线观看| 国产激情一区| 婷婷亚洲综合| 精品一区二区国语对白| 国产精品国产三级国产普通话99| 在线观看成人免费视频| 一区二区欧美日韩视频| 日韩av免费在线观看| 久久精品一区二区三区不卡免费视频| a天堂资源在线观看| 亚洲综合在线一区| 向日葵视频成人app网址| 欧美一区二区麻豆红桃视频| 精品一区二区三区影院在线午夜|