当前位置:首页 > 叨叨念念 > Emlog修改标签造成重复标签的bug以及修复

Emlog修改标签造成重复标签的bug以及修复

叨叨念念 / 星之宇 / 2021-9-5 15:15 / 浏览:1285 / 评论:0

Emlog后台可以修改标签的名称,也就是tagname,导致tagname重复,这个应该是设计上的Bug,不严重,但是如果标签很多的时候,都不知道有没有重复,修改后还会出现问题。


Bug事例

后台有多个标签,其中一个是emlog标签,另一个是77bx标签,那么把77bx的标签修改为emlog标签,那么就会出现相同标签的记录。


Bug说明

1、访问emlog标签的时候,只会显示前面id小emlog的文章列表,后面id大的相同标签的文章不会显示

2、新建文章使用emlog标签的时候,同时会写入标签emlog中

357-2.png

357-1.png


Bug修复

方法1:修改emlog_tag数据库表tagname索引,改为UNIQUE唯一索引,改的时候需要tagname不重复,之后修改为tag相同标签会报错。

357-4.png

357-3.png


方法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 条评论

    • 昵称
    • 邮箱
    • 网址