【摘要】 近日,優選資源網站長使用的Emlog最新版6.0,在發現訪問不存在的TAG(標籤)時候,出現瞭如下圖的SQL報錯頁面,如何優化這個BUG,或者是修復這個錯誤吶?今天優選資源站長研...
近日,優選資源網站長使用的Emlog最新版6.0,在發現訪問不存在的TAG(標籤)時候,出現瞭如下圖的SQL報錯頁面,如何優化這個BUG,或者是修復這個錯誤吶?今天優選資源站長研究了下!
一、分析問題
首先,找到文件“include\controller\tag_controller.php”,其文件內容如下
關鍵就是在上圖箭頭所指的地方,報的SQL錯誤就是tid不對
定位到“include\model\tag_model.php”文件,第46行,代碼如下:
- function getTagByName($tagName) {
- $tagId = $this->getIdFromName($tagName);
- return $this->getTagById($tagId);
- }
在同文件內,定位到171行的函數getIdFromName():
- /**
- * 從標籤名查找標籤ID
- * @param string $tagName 標籤名
- * @return int|bool 標籤ID | FALSE(未找到標籤)
- */
- function getIdFromName($tagName){
- $sql = "SELECT `tid` FROM `" . DB_PREFIX . "tag` WHERE `tagname` = '" . $this->db->escape_string($tagName) . "'";
- $query = $this->db->query($sql);
- if ($this->db->num_rows($query) === 0) {
- return FALSE;
- }
- $result = $this->db->fetch_array($query);
- return $result['tid'];
- }
通過分析,當Tag名不存在的時候,此函數返回FALSE bool變量
那麼變量$tagId就被賦值爲bool值 FALSE,不是約定的tagID數值變量
所以問題就出在這裏!
二、修復方法:
只需要把上述函數中10~12行做如下修改:
- if ($this->db->num_rows($query) === 0) {
- header('HTTP/1.1 301 Moved Permanently');
- header('Location:/?keyword='.urlencode($tagName));
- exit(0);
- }
修改後如下圖:
就是做了一個301的跳轉,跳轉到關鍵詞搜索頁面,這樣就可以避免用戶出現的報錯頁面了,完美解決!還有更多的建站優化教程,大家可以看:http://www.top15.cn/sort/jzjc