[Emlog優化]Emlog6.0標籤不存在提示SQL執行錯誤的解決辦法

【摘要】 近日,優選資源網站長使用的Emlog最新版6.0,在發現訪問不存在的TAG(標籤)時候,出現瞭如下圖的SQL報錯頁面,如何優化這個BUG,或者是修復這個錯誤吶?今天優選資源站長研...

雨水節氣_24節氣.jpg

近日,優選資源網站長使用的Emlog最新版6.0,在發現訪問不存在的TAG(標籤)時候,出現瞭如下圖的SQL報錯頁面,如何優化這個BUG,或者是修復這個錯誤吶?今天優選資源站長研究了下!

EMLOG標籤出錯_修復教程.jpg

一、分析問題

首先,找到文件“include\controller\tag_controller.php”,其文件內容如下

從標籤名獲取ID_優選資源網站長經驗分享.jpg

關鍵就是在上圖箭頭所指的地方,報的SQL錯誤就是tid不對

定位到“include\model\tag_model.php”文件,第46行,代碼如下:


 
  1. function getTagByName($tagName) {
  2. $tagId = $this->getIdFromName($tagName);
  3. return $this->getTagById($tagId);
  4. }

在同文件內,定位到171行的函數getIdFromName():


 
  1. /**
  2. * 從標籤名查找標籤ID
  3. * @param string $tagName 標籤名
  4. * @return int|bool 標籤ID | FALSE(未找到標籤)
  5. */
  6. function getIdFromName($tagName){
  7. $sql = "SELECT `tid` FROM `" . DB_PREFIX . "tag` WHERE `tagname` = '" . $this->db->escape_string($tagName) . "'";
  8. $query = $this->db->query($sql);
  9.  
  10. if ($this->db->num_rows($query) === 0) {
  11. return FALSE;
  12. }
  13.  
  14. $result = $this->db->fetch_array($query);
  15. return $result['tid'];
  16. }

通過分析,當Tag名不存在的時候,此函數返回FALSE bool變量

那麼變量$tagId就被賦值爲bool值 FALSE,不是約定的tagID數值變量

所以問題就出在這裏!

二、修復方法:

只需要把上述函數中10~12行做如下修改:


 
  1. if ($this->db->num_rows($query) === 0) {
  2. header('HTTP/1.1 301 Moved Permanently');
  3. header('Location:/?keyword='.urlencode($tagName));
  4. exit(0);
  5. }

修改後如下圖:

從標籤名查找標籤ID修復代碼_優選資源網站長經驗分享.jpg

就是做了一個301的跳轉,跳轉到關鍵詞搜索頁面,這樣就可以避免用戶出現的報錯頁面了,完美解決!還有更多的建站優化教程,大家可以看:http://www.top15.cn/sort/jzjc

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章