Emlog后台可以修改标签的名称,也就是tagname,导致tagname重复,这个应该是设计上的Bug,不严重,但是如果标签很多的时候,都不知道有没有重复,修改后还会出现问题。
Bug事例
后台有多个标签,其中一个是emlog标签,另一个是77bx标签,那么把77bx的标签修改为emlog标签,那么就会出现相同标签的记录。
Bug说明
1、访问emlog标签的时候,只会显示前面id小emlog的文章列表,后面id大的相同标签的文章不会显示
2、新建文章使用emlog标签的时候,同时会写入标签emlog中
Bug修复
方法1:修改emlog_tag数据库表tagname索引,改为UNIQUE唯一索引,改的时候需要tagname不重复,之后修改为tag相同标签会报错。
方法2:修改emlog程序,相同标签的时候合并标签,在tag_model.php中(include/model文件夹中):
1、查找“updateTagName”,找到updateTagName函数,这个主要是控制修改标签名字后,更新数据库的。这里面根本没有判断tagname和数据库中的tagname有没有重名。
function updateTagName($tagId, $tagName) { $sql="UPDATE ".DB_PREFIX."tag SET tagname='$tagName' WHERE tid=$tagId"; $this->db->query($sql); }
2、判断标签名字有没有重复,没有重复修改名字,重复合并标签。
function updateTagName($tagId, $tagName) { $result = $this->db->once_fetch_array("SELECT gid FROM ".DB_PREFIX."tag WHERE tagname='$tagName'");//找修改的标签名字和数据库中有没有重复 if (empty($result)) { $sql="UPDATE ".DB_PREFIX."tag SET tagname='$tagName' WHERE tid=$tagId";//没有重复直接修改名字。 $this->db->query($sql); }else { $row = $this->db->once_fetch_array("SELECT gid FROM ".DB_PREFIX."tag WHERE tid='$tagId'");//有重复查找要修改的标签包含的文章 $taggid = trim($result['gid'], ",").','.trim($row['gid'], ",");//连接所有的文章ID $taggid= implode(',',array_unique(explode(',', $taggid)));//去掉重复文章ID $query="UPDATE ".DB_PREFIX."tag SET gid='$taggid' WHERE tagname='$tagName'";//文章ID写入已有标签的数据库 $this->db->query($query); } }
目前有 0 条评论