Tag Archives: bug

网站居然不能够留言了

这两天发现居然没有人给我留言了……很费解~~~~

然后自己试了一下,居然发现不能够留言了…………

看来频繁在svn上面更新还是有点问题啊~而且只能够升级,而降级会出问题~~呀呀呀~~那就这样了呗~~现在大家都不说话,就我一个人说!

这个bug已经提交上去了,看什么时候能够得到解决。

建议大家升级至Sablog-x 2.0 (20080825)版本

此版本更新了很多变量和一些Bug!务必更新此版本,之前版本有诸多Bug没有修复,此版本已经解决诸多问题了,而且此版本的升级将导致以前的2.0风格不能在继续使用,会出现无法显示日志的问题,所以请更新升级至最新版本0825保证新的风格和插件可以更好的运用在您的博客上。

以上引用自tension,下面该我评价新版本了。

花了2个小时,用Beyond Compare 2软件进行对比修改新版本的Sablog-x 2.0,发现其中修改了不少核心的算法,但是修改的最多的还是修改变量名,由于某个变量名修改之后,导致了2.0的旧模板无法使用,解决方法很简单,打开normal.php和list.php,把其中的$tatol修改为$total就行了~哈哈

不过有些BUG依然存在,本人的两个小时,就是结合我原来修改过的2.0再次重新修改新版本,现在已经挂上了新版本的Sablog-x 2.0了!

最后,还是强烈要求使用Sablog-x 2.0预览版的朋友更新至最新的20080825,以便我们开发的新的插件和风格能够运用在你的博客上。论坛还附赠了几款华丽的皮肤。

Sablog-x 2.0 (20080825)下载地址

博客注册功能故障修复

唉……不知道为什么,注册功能出现了问题。

自己修改重新修改了一下博客注册函数的部分代码,把原先合并在一起的提交注册信息和处理注册信息的一个函数分开了,写成了两段,成功解决了注册的问题。

解决方法:

打开cp.php,把89~174行删除。

在89行添加上以下代码:

  1. //注册表单 
  2. if ($_GET["action"] == "register") { 
  3.     if ($options["closereg"]) { 
  4.         redirect("禁止注册新用户"$referer); 
  5.     } 
  6.     if (!submitcheck("submit", 1)) { 
  7.         if ($sax_uid && $sax_pw && $sax_group && $sax_hash) { 
  8.             redirect("您已经处于登陆状态"$referer); 
  9.         } 
  10.         cpheader(); 
  11.         include template("register"); 
  12.         cpfooter(); 
  13.     }  

在78行添加上以下代码:

  1. //注册验证 
  2. if ($_POST["action"] == "doregister") { 
  3.     //取值 
  4.     $username        = trim($_POST["username"]); 
  5.     $password        = $_POST["password"]; 
  6.     $confirmpassword = $_POST["confirmpassword"]; 
  7.     $email           = trim($_POST["email"]); 
  8.     $url             = trim($_POST["url"]); 
  9.     $referer         = trim($_POST["referer"]); 
  10.         //检测网址 
  11.     if (!isurl($url)) { 
  12.         redirect("网站URL错误"); 
  13.     } 
  14.         //检测用户名 
  15.     if(!$username || strlen($username) > 20) { 
  16.         redirect("用户名为空或者超过20字节."$reg_url); 
  17.     } 
  18.         if ($options["censoruser"]) { 
  19.         $options["censoruser"] = str_replace(","","$options["censoruser"]); 
  20.         $banname = explode(",",$options["censoruser"]); 
  21.         foreach($banname as $value){ 
  22.             if (strpos($username,$value) !== false){ 
  23.                 redirect("此用户名包含不可接受字符或被管理员屏蔽,请选择其它用户名."$reg_url); 
  24.             } 
  25.         } 
  26.     } 
  27.         $name_key = array("","&"," ",""",""","/","*",",","<",">"," "," "," ","#","$","(",")","%","@","+","?",";","^"); 
  28.     foreach($name_key as $value){ 
  29.         if (strpos($username,$value) !== false){ 
  30.             redirect("此用户名包含不可接受字符或被管理员屏蔽,请选择其它用户名."$reg_url); 
  31.         } 
  32.     } 
  33.         //检测密码 
  34.     if (!$password || strlen($password) < 8) { 
  35.         redirect("密码不能为空并且密码长度不能小于8位.",$reg_url); 
  36.     } 
  37.     if ($password != $confirmpassword) { 
  38.         redirect("请确认输入的密码一致."$reg_url); 
  39.     } 
  40.     if (strpos($newpassword," ") !== false || strpos($password," ") !== false || strpos($password," ") !== false) { 
  41.         redirect("密码包含不可接受字符."$reg_url); 
  42.     } 
  43.         $username = char_cv($username); 
  44.     $r = $DB->fetch_one_array("SELECT userid FROM {$db_prefix}users WHERE username="$username" LIMIT 1"); 
  45.     if($r["userid"]) { 
  46.         redirect("该用户名已被注册."); 
  47.     } 
  48.     $email = char_cv($email); 
  49.     $r = $DB->fetch_one_array("SELECT userid FROM {$db_prefix}users WHERE email="$email" LIMIT 1"); 
  50.     if($r["userid"]) { 
  51.         redirect("该E-mail已被注册."); 
  52.     } 
  53.     $password = md5($password); 
  54.     $DB->query("INSERT INTO {$db_prefix}users (username, password, logincount, loginip, logintime, email, url, regdateline, regip, groupid, lastip, lastvisit, lastactivity) VALUES ("$username", "$password", "1", "$onlineip", "$timestamp", "$email", "$url", "$timestamp", "$onlineip", "3", "$onlineip", "$timestamp", "$timestamp")"); 
  55.     $sax_uid = $DB->insert_id(); 
  56.     $DB->unbuffered_query("UPDATE {$db_prefix}statistics SET user_count=user_count+1"); 
  57.     //保存COOKIE 
  58.     scookie("sax_auth", authcode("$sax_uid $password 1"), $login_life); 
  59.     //更新数据库中的登陆会话 
  60.     updatesession(); 
  61.      
  62.     require_once(SABLOG_ROOT."include/func/cache.func.php"); 
  63.     statistics_recache(); 
  64.     redirect("注册成功."$options["url"]); 

保存即可!——-HJin in Sablog Plus Team!

Sablog-x 后台修改评论页面不显示email修补方案

后台查看别人的评论,发现了修改评论的位置不显示原先的email,这里修改一下后台代码

修改文件中只有一个

打开admincomment.php文件,390行

  1. if ($action == "modcm") { 
  2.     $comment = $DB->fetch_one_array("SELECT c.articleid,c.commentid,c.author,c.url,c.dateline,c.content, a.title FROM {$db_prefix}comments c LEFT JOIN {$db_prefix}articles a ON (a.articleid=c.articleid) WHERE commentid="$commentid""); 
  3.     $comment["content"] = htmlspecialchars($comment["content"]); 
  4.     $subnav = "修改评论"
  5. }//end mod 

在其中添加上一个c.email参数,修改后的代码如下

  1. if ($action == "modcm") { 
  2.     $comment = $DB->fetch_one_array("SELECT c.articleid,c.commentid,c.author,c.url,c.email,c.dateline,c.content, a.title FROM {$db_prefix}comments c LEFT JOIN {$db_prefix}articles a ON (a.articleid=c.articleid) WHERE commentid="$commentid""); 
  3.     $comment["content"] = htmlspecialchars($comment["content"]); 
  4.     $subnav = "修改评论"
  5. }//end mod 

这样问题就解决了,小修小补,到时候整理了,把自己整理的这一份发布出来!

Sablog-x 表情功能BUG、hack留言插入表情和设置自定义表情

[face=frisk]BUG描述:

  1. 2.0编辑器插入表情插入的是相对地址,导致使用静态链接的用户无法在文章中正常显示表情
  2. 1.6表情使用的是静态地址,当更换域名或者更换路径之后,表情无法正常显示问题,2.0的BUG或许就是为了解决这个,但是却忽略了静态地址问题。

[face=dissatisfy]功能缺陷:

  1. 评论框不能添加表情。
  2. 编辑器不能使用自定义表情

[face=dream]hack思路:

  1. 修改fckeditor编辑器,实现添加表情的字标,然后由程序后台即时将表情字标转换成为图片链接。
  2. 留言框添加插入表情功能

[face=innocent]hack过程:

全过程需要修改11个文件,后面会一一讲述如何修改。注意:我每用一个[face=plaint]表情的地方,表示要重新打开一个文件了。文章内容很长,大家细心看。

首先是修改fckeditor编辑器

[face=plaint]打开includeeditoreditorjsfckeditorcode_ie.js,使用ctrl+f查找功能查找以下代码(在第42行)

  1. var C=FCK.EditorDocument.createElement("IMG");C.className="Smile";C.src=A;C.alt=B;C.title=B;FCK.InsertElement(C); 

将以上代码替换为:

  1. FCK.InsertHtml("[face="+B+"]"); 

[face=plaint]然后再打开includeeditoreditorjsfckeditorcode_gecko.js,在第41行,找到和前面fckeditorcode_ie.js中一样的代码,并将其替换为:

  1. FCK.InsertHtml("[face="+B+"]"); 

编辑器修改完毕。

然后修改输出文件

[face=plaint]打开/modules/article.php文件,大约在244行左右,找到:

  1. //处理PHP高亮 
  2. $article["content"] = preg_replace("/s*[php](.+?)[/php]s*/ies""phphighlite("1")"$article["content"]); 

在这段代码下面添加上如下几行代码:(效果是将标准模式浏览界面下的表情字标转换为表情图片)

  1.  //处理表情 
  2.  $article["content"] = preg_replace("/[face=(w*)]/i","<img class=smile alt="1" src="".$options[url]."images/smiles/1.gif" />"$article["content"]);    

[face=plaint]打开/modules/show.php文件,大约在142行左右,找到:

  1.  //处理PHP高亮 
  2.  $article["content"] = preg_replace("/s*[php](.+?)[/php]s*/ies""phphighlite("1")"$article["content"]); 

在其下面添加上如下几行代码:(效果是将显示文章的页面中的表情字标转换为表情图片)

  1.  //处理文章表情 
  2.  $article["content"] = preg_replace("/[face=(w*)]/i","<img class=smile alt="1" src="".$options[url]."images/smiles/1.gif" />"$article["content"]);    

还是show.php文件,继续往下,大约在232行左右,找到:

  1. $comment["content"] = html_clean($comment["content"]); 

将这行代码替换为:(效果是将显示文章页面下部的评论中的表情字标转换为表情图片)

  1.  //处理评论表情 
  2.  $comment["content"] = preg_replace("/[face=(w*)]/i","<img class=smile alt="[face=1]" src="".$options[url]."images/smiles/1.gif" />", html_clean($comment["content"])); 

[face=plaint]打开modulescomments.php,大约在29行左右,找到:

  1.  $comment["content"] = html_clean($comment["content"]); 

将这行代码替换为:(效果是将评论页面中的表情字标转换为表情图片)

  1. //处理评论表情 
  2. $comment["content"] = preg_replace("/[face=(w*)]/i","<img class=smile alt="[face=1]" src="".$options[url]."images/smiles/1.gif" />", html_clean($comment["content"])); 

[face=plaint]打开includefunccache.func.php文件,大约在154行,找到:

  1. $newcomment["content"] = preg_replace("/[quote=(.*?)]s*(.+?)s*[/quote]/is"""$newcomment["content"]); 

在其下方添加上一行代码:(效果,将侧边栏中的表情字标用表情的英文名替代输出,避免别人留言只留表情,而导致侧栏空白)

  1. $newcomment["content"] = preg_replace("/[face=(w*)]/i""1 "$newcomment["content"]); 

[face=plaint]打开includefunc emplate.func.php文件,大约在64行那里(空白行),插入一个新的函数:

  1. function addsmiles($var) {  
  2.     return str_replace("""""", preg_replace("/[([a-zA-Z0-9_-.x7f-xff]+)]/s""["1"]"$var));  
  3. }  

[face=plaint]打开includejscriptshow.js文件,大约在30行,找到:

  1. text = text.replace(/alt=("|)([^"s]*)("|)/g,"> $2 <");  
  2. text = text.replace(/<[^<>]+>/g," ");  

将其替换为:(效果,修正在引用别人留言时,表情字标的传递和显示)

  1. text = text.replace(/alt=("|)([^"s]*)("|)/g,">$2<"); 
  2. text = text.replace(/<[^<>]+>/g,""); 

然后继续在show.js代码中,移动到45行(应该是空白行),添加一个新函数:

  1. function addsmiles(facename){ 
  2.     $("content").value += "[face="+facename+"]"
  3.     $("content").focus(); 

最后是修改模板文件了

[face=plaint]打开templates你的模板文件夹show.php文件,找到评论框位置,找到如下内容(相似也行)

  1. 评论内容 (必填):<br />

在其后面添加上:

  1. <img style="cursor:pointer;" onclick="addsmiles("surprise")" src="$options[url]images/smiles/surprise.gif" /> 
  2. <img alt="glade" style="cursor:pointer;" onclick="addsmiles("glade")" src="$options[url]images/smiles/glade.gif" /> 
  3. <img alt="love" style="cursor:pointer;" onclick="addsmiles("love")" src="$options[url]images/smiles/love.gif" /> 
  4. <img alt="cry" style="cursor:pointer;" onclick="addsmiles("cry")" src="$options[url]images/smiles/cry.gif" /> 
  5. <img alt="sing" style="cursor:pointer;" onclick="addsmiles("sing")" src="$options[url]images/smiles/sing.gif" /> 
  6. <img alt="fight" style="cursor:pointer;" onclick="addsmiles("fight")" src="$options[url]images/smiles/fight.gif" /> 
  7. <img alt="bitter" style="cursor:pointer;" onclick="addsmiles("bitter")" src="$options[url]images/smiles/bitter.gif" /> 
  8. <img alt="dream" style="cursor:pointer;" onclick="addsmiles("dream")" src="$options[url]images/smiles/dream.gif" /> 
  9. <img alt="approve" style="cursor:pointer;" onclick="addsmiles("approve")" src="$options[url]images/smiles/approve.gif" /> 
  10. <img alt="dissatisfy" style="cursor:pointer;" onclick="addsmiles("dissatisfy")" src="$options[url]images/smiles/dissatisfy.gif" /> 
  11. <img alt="question" style="cursor:pointer;" onclick="addsmiles("question")" src="$options[url]images/smiles/question.gif" /> 
  12. <img alt="plaint" style="cursor:pointer;" onclick="addsmiles("plaint")" src="$options[url]images/smiles/plaint.gif" /> 
  13. <img alt="slaver" style="cursor:pointer;" onclick="addsmiles("slaver")" src="$options[url]images/smiles/slaver.gif" /> 
  14. <img alt="incisor" style="cursor:pointer;" onclick="addsmiles("incisor")" src="$options[url]images/smiles/incisor.gif" /> 
  15. <img alt="whistle" style="cursor:pointer;" onclick="addsmiles("whistle")" src="$options[url]images/smiles/whistle.gif" /> 
  16. <img alt="pain" style="cursor:pointer;" onclick="addsmiles("pain")" src="$options[url]images/smiles/pain.gif" /> 
  17. <img alt="feed" style="cursor:pointer;" onclick="addsmiles("feed")" src="$options[url]images/smiles/feed.gif" /> 
  18. <img alt="esotropia" style="cursor:pointer;" onclick="addsmiles("esotropia")" src="$options[url]images/smiles/esotropia.gif" /> 
  19. <img alt="faint" style="cursor:pointer;" onclick="addsmiles("faint")" src="$options[url]images/smiles/faint.gif" /> 
  20. <img alt="innocent" style="cursor:pointer;" onclick="addsmiles("innocent")" src="$options[url]images/smiles/innocent.gif" /><br /> 
  21. <img alt="fuck" style="cursor:pointer;" onclick="addsmiles("fuck")" src="$options[url]images/smiles/fuck.gif" /> 
  22. <img alt="young" style="cursor:pointer;" onclick="addsmiles("young")" src="$options[url]images/smiles/young.gif" /> 
  23. <img alt="football" style="cursor:pointer;" onclick="addsmiles("football")" src="$options[url]images/smiles/football.gif" /> 
  24. <img alt="dead" style="cursor:pointer;" onclick="addsmiles("dead")" src="$options[url]images/smiles/dead.gif" /> 
  25. <img alt="terror" style="cursor:pointer;" onclick="addsmiles("terror")" src="$options[url]images/smiles/terror.gif" /> 
  26. <img alt="none" style="cursor:pointer;" onclick="addsmiles("none")" src="$options[url]images/smiles/none.gif" /> 
  27. <img alt="smile" style="cursor:pointer;" onclick="addsmiles("smile")" src="$options[url]images/smiles/smile.gif" /> 
  28. <img alt="awkard" style="cursor:pointer;" onclick="addsmiles("awkard")" src="$options[url]images/smiles/awkard.gif" /> 
  29. <img alt="frisk" style="cursor:pointer;" onclick="addsmiles("frisk")" src="$options[url]images/smiles/frisk.gif" /> 
  30. <img alt="fire" style="cursor:pointer;" onclick="addsmiles("fire")" src="$options[url]images/smiles/fire.gif" /> 
  31. <img alt="sick" style="cursor:pointer;" onclick="addsmiles("sick")" src="$options[url]images/smiles/sick.gif" /> 
  32. <img alt="sinister" style="cursor:pointer;" onclick="addsmiles("sinister")" src="$options[url]images/smiles/sinister.gif" /> 
  33. <img alt="sleep" style="cursor:pointer;" onclick="addsmiles("sleep")" src="$options[url]images/smiles/sleep.gif" /> 
  34. <img alt="shutup" style="cursor:pointer;" onclick="addsmiles("shutup")" src="$options[url]images/smiles/shutup.gif" /> 
  35. <img alt="tongue" style="cursor:pointer;" onclick="addsmiles("tongue")" src="$options[url]images/smiles/tongue.gif"< /span> /> 
  36. <img alt="cool" style="cursor:pointer;" onclick="addsmiles("cool")" src="$options[url]images/smiles/cool.gif" /> 
  37. <img alt="disch" style="cursor:pointer;" onclick="addsmiles("disch")" src="$options[url]images/smiles/disch.gif" /> 
  38. <img alt="deride" style="cursor:pointer;" onclick="addsmiles("deride")" src="$options[url]images/smiles/deride.gif" /> 
  39. <img alt="angry" style="cursor:pointer;" onclick="addsmiles("angry")" src="$options[url]images/smiles/angry.gif" /> 
  40. <img alt="shy" style="cursor:pointer;" onclick="addsmiles("shy")" src="$options[url]images/smiles/shy.gif" /><br /> 

修改RSS页面输出

[face=plaint]打开
ss.php,找到大约150行的如下代码:

  1. //处理PHP高亮 
  2. $article["content"] = preg_replace("/s*[php](.+?)[/php]s*/ies""phphighlite("1")"$article["content"]); 

在这段代码后面插入:      

  1. //处理文章表情 
  2. $article["content"] = preg_replace("/[face=(w*)]/i","<img class=smile alt="1" src="".$options[url]."images/smiles/1.gif" />"$article["content"]); 

修改WAP页面输出

[face=plaint]打开wapindex.php文件,找到587行,如下:

  1. $article["content"] = html2text(str_replace(array("[php]","[/php]"),"",$article["content"])); 

在这一行前面添加上:

  1. //处理文章表情 
  2. $article["content"] = preg_replace("/[face=(w*)]/i","<img class=smile alt="1" src="".$options[url]."images/smiles/1.gif" />"$article["content"]);    

[face=plaint]完成这以上所有工作了,我们现在打开includeeditoreditorimagessmiles文件夹,然后发现里面很多表情。然后我们打开imagessmiles文件夹,先将这里面的表情备份到别处,然后将includeeditoreditorimagessmiles这个里面的全部表情复制到imagessmiles中,这样,所有表情就能够正常使用了。

如果需要自定义表情

[face=approve]需要自定义表情,请先将新表情肤知道imagessmiles文件夹中,然后打开includeeditoreditorfckconfig.js文件,拉到最后,找到FCKConfig.SmilesImages,将后面方括号中的表情文件名称按照原来的格式修改为新的表情的文件名,为了美观,也可以将表情框宽度"FCKConfig.SmilesPanelWidth  = 200 ;"修改一下,最后就是修改模板文件中的show.php,将原来的图片按照格式换成新的图片,自定义表情就完成了。

PS.这篇文章总共重新修改了3遍,修改的文件太多,写的时候,就写漏了,现在的应该没有问题了。文末附上部分文件修改后的代码,解压缩后,直接覆盖即可。

PS.我这是第五遍修改了……[face=dead]

如果在修改过程中发现什么问题,请留言![face=tongue]

Sablog-x 关键词高亮BUG

以前写日志,发现当tag关键词出现在超级链接里面的时候,其他的不在超链接里面的关键词不会高亮!

今天,不对,是昨天下午,发几段视频的时候,发现使用关键词ED的时候,插入的FLASH会被破坏掉,主要是字标里面<embed…里面有ed这个词。

首先帖到了论坛里面,一天了,没有人回答,后来和tension聊了一会,她告诉了我关键词高亮这段代码的位置(其实我也知道,不过还是谢谢了),晚上就决定来研究研究了。

现在是11点,打开了includefuncfront.func.php文件,跳转到123行高亮标签那里……

  1. // 高亮标签 
  2. function highlight_tag($content$tag) { 
  3.     global $options
  4.     $tag = trim($tag); 
  5.     if(preg_match("/<a[^>]+?".preg_quote($tag)."[^>]+?>/i",$content)) return $content
  6.     if(preg_match("/<img[^>]+?".preg_quote($tag)."[^>]+?>/i",$content)) return $content
  7.     //有次数的替换 
  8.     $content = preg_replace("/".$tag."/i","<a href="".gettaglink(urlencode($tag))."" onclick="tagshow("".$tag."");return false;">".htmlspecialchars($tag)."</a>"$content, 1); 
  9.     /* 
  10.     替换所有 
  11.     if(function_exists("eregi_replace")) {    
  12.         $content = eregi_replace($tag, "<a href="".$tagurl."" onclick="tagshow("".$tag."");return false;" class="tagshow">".htmlspecialchars($tag)."</a>", $content);    
  13.     } else { 
  14.         $content = str_replace($tag, "<a href="".$tagurl."" onclick="tagshow("".$tag."");return false;" class="tagshow">".htmlspecialchars($tag)."</a>", $content);    
  15.     } 
  16.     */ 
  17.     return $content

发现除了几个单词认得以外,都看不懂。只知道匹配的规则是正则表达式。于是百度了一个正则表达式来学习(学习页面点这里)。看第5行和第6行,知道了,如果是在<a>和<img>里面的关键字,就结束对这个关键词的高亮。开始还以为在这里面再加上比如<embed>之类的就行了。后来重新想了一下,如果关键词出现在这个里面,也就是匹配成功,程序就不会对该关键词高亮了,这样的话,其他的不在<>里面的关键词也不会高亮了。可见这两行是4ngle偷懒写的(4ngle请见谅)。

看来只能从第9行的替换规则入手了。回想一下那里的关键字才需要高亮,高亮的关键字得是我们在屏幕上面能够看到的,我们所看到的输出的结果都在<>字标外。

这样,我就得到了关键词的匹配规则,我只需要判断“在关键词前面,离它最近的一个>和关键词之间没有<”就能够表明关键词在<>外面。匹配规则是【在“>”后面,不包含“<”,关键词】,那个不包含很重要,不包含是排除了><embed>这样的情况,因为ed前面有>,所以会高亮,但是其还是在<>里面,所以必须加上在>和ed(关键词)之间不包含<这个规则。

匹配之后,把关键词替换高亮就OK了。

所以最后代码就修改成了

  1. // 高亮标签 
  2. function highlight_tag($content$tag) { 
  3.     global $options
  4.     $tag = trim($tag); 
  5.     //有次数的替换 
  6.     $content = preg_replace("/>([^<]*)".$tag."([^>]*)<([^>]*)([^a])>/i",">$1<a href="".gettaglink(urlencode($tag))."" onclick="tagshow("".$tag."");return false;">".htmlspecialchars($tag)."</a>$2<$3$4>"$content, 1); 
  7.  
  8.     return $content

写了点自己学习和分析的过程,替换所有关键词我觉得没有必要,我自己也就没有修改,那个里面完全就是直接的替换,没有做任何判断。我觉得替换一次,给搜索引擎看就可以了,多了也不好。

今天学会的东西——正则表达式

最后附上这个修改过的文件,偷懒的话可以直接下载覆盖。

[转]Sablog-x 2.0 后台发表文章无法保存BUG

文章来源于《傻猫网络日志》 http://www.samool.com/sablog2-autosave/

起因:

昨天晚上辛辛苦苦写了一大篇关于Pagerank的东东,结果电脑突然蓝屏(6年前的本本,想下课了,NND),重启电脑后发面我的文章已经消失,只剩下短短的一句标题“成功将Pagerank查询程序迁移到linux下”,郁闷,相当地郁闷啊18。 

昨天在SA论坛上看到有位兄弟也是一个捣鼓能手,把Sa2.0装上后,还做了很漂亮的风格,修改了好几处bug,于是在他博客上留言,希望能解决这个问题。与此同时,我这边也在开工了,经过我详细的分析,文章自动保存调用了includejscriptautosave.js 这个文件,不要小瞧这几段JS,他可以自动缓存文章内容功臣,该JS获取FCK里的内容,并把文章标题,文章内容以及文章描述通过ajax提交到cp.php,接着当cp.php收到POST后,调用includefunccache.func.php的autosave_recache函数将内容存到cache/cache_autosave.php文件里,下次进入添加文章页时,自动从cache/cache_autosave.php页获取缓存内容,从而实现发表文章时,文章内容自动保存起来了,免的因为各种原因把文章弄丢了。

经过我分析后,发现标题内容可以保存起来,文章内容和描述始终不能保存,但是我手动保存内容后,检查cache/cache_autosave.php这个文件,标题、内容和描述都保存起来了的,但是为何不能正常显示呢,难道是fck的问题,仔细对SA1.6的fck调用文件后发现一切正常,这时就出现了一个问题,同样地调用fck内容,如果是调用代码的问题,那么修改文章时就不会显示内容的,这时问题就豁然开朗了,肯定出在进入添加文章页的代码上,仔细检查发现adminarticle.php有一个Sa2.0致命错误(红色部分),代码如下:

  1. $act = "addarticle"
  2. $tdtitle = "添加日志"
  3. $article["description"] = $article["content"] = ""
  4. $article["closecomment"] = isset($_COOKIE["closecomment"]) ? intval($_COOKIE["closecomment"]) : "0"

为何每次添加日志的时候都要把描述和内容清空呢? 清空了那自动保存还有什么用,哈哈哈,把这行删除或注释掉,搞定。

最后总结一下:如何解决 Sablog-x 2.0 后台文章不能自动保存的BUG?
打开adminarticle.php 这个文件,找到

  1. $article["description"] = $article["content"] = ""

删除该代码,或者将代码替换为

  1. //$article["description"] = $article["content"] = ""; 

这样修改一下就可以实现文章自动保存了,罗嗦了这么多,我只想说明一点,出现问题时,顺藤摸瓜,多思考,不管什么问题,我们都有能力解决的,谢谢大家!!

文章来源于《傻猫网络日志》 http://www.samool.com/sablog2-autosave/

文章最后我总结一下自己查错过程。

首先是自动保存错误,第一个反应是查看autosave.js,把Sablog Plus的fckeditor和1.6的对比了之后,并没有发现在自动保存上面出现的错误。由于一根筋总认为是js错误,而且在编辑页面浏览器也的确提示js有错误,这个时候,自己就已经很糊涂了。特别是编辑文章没有问题,就更确信js没有问题了。时间已晚,然后就带着问题睡觉了。早上起来就发现问题成功被解决。

Sablog-x 2.0 发布和修改文章,首页不显示文章内容

使用 Sablog-x 2.0 ,就得面对bug的困难。

这次说的是首先不显示文章内容,只现实“阅读全文”的BUG。

看article.php代码得知,当$description不为空的时候,首页显示$description的内容及阅读全文。所以肯定是description的问题。

查看数据库,发现没有写文章摘要的日志,在description字段里面都留下了<p></p>的内容,使description不为空。

可见,默认修改和发布日志的时候,日志描述给description里面加上了<p></p>的内容。js我不会改。

我就在article.php里面添加上了,如果$description的值等于<p></p>时,重新给$description赋值为空,就成功,但不算完美的解决了这个BUG。

修改方法:

打开admin/article.php文件

找到以下这两行代码

  1. if($_POST["action"] == "addarticle") { 
  2. if($_POST["action"] == "modarticle") { 

然后分别在这两行代码下面找到

  1. $description  = sax_addslashes($_POST["description"]); 

把这个代码换成

  1. if($_POST["description"] != "<p></p>"
  2. $description  = sax_addslashes($_POST["description"]); 
  3. else $description = ""

把这两段代码都修改之后。BUG就解决了。

Sablog-x 2.0 IIS无法关闭静态链接解决方法

虚拟主机上面IIS不支持静态链接。但是 Sablog-x 2.0 默认安装后是打开了静态链接。而且后台也不能关闭静态链接。对于这个小BUG,这里提供了解决方法。

首先是修改网站的源代码:

打开admin/configurate.php

找到第149行的这些代码

  1.     $rules[$query_token] = "index.php?action=show&".$queries[$num_tokens-1]."&page=$".($i+1); 
  2.    } 
  3.  } 
  4. $DB->query("REPLACE INTO {$db_prefix}settings VALUES ("permalink_rules", "".sax_addslashes(serialize($rules))."")"); 
  5. $permalink = intval($_POST["permalink"]); 
  6. if ($permalink) { 
  7.   $DB->query("REPLACE INTO {$db_prefix}settings VALUES ("permalink", "1")"); 
  8. else { 
  9.   $DB->query("REPLACE INTO {$db_prefix}settings VALUES ("permalink", "1")"); 

把以上代码替换为:

  1.             $rules[$query_token] = "index.php?action=show&".$queries[$num_tokens-1]."&page=$".($i+1); 
  2.         } 
  3.     } 
  4.     $DB->query("REPLACE INTO {$db_prefix}settings VALUES ("permalink", "1")"); 
  5. else { 
  6.     $DB->query("REPLACE INTO {$db_prefix}settings VALUES ("permalink", "0")"); 
  7. $DB->query("REPLACE INTO {$db_prefix}settings VALUES ("permalink_rules", "".sax_addslashes(serialize($rules))."")"); 

然后要进入后台

在地址栏输入:”你blog的url/cp.php?action=login”

登录你的管理员帐号。此时进入了你的后台了,选择设置——永久连接,选择默认(关闭)。

这样就关闭了静态链接了。

注意:其中的”permalink”变量因为我在模板文件中,没有找到某个表单提交这个变量,所以我就删掉了。

Sablog-x 2.0 修改用户信息失败BUG

今天又发现了一个 Sablog-x 2.0 的BUG哦!

文章最后提供了修改后的文件代码下载链接!直接解压缩覆盖即可!

其具体问题是:

  1. 管理员后台修改其他用户密码之后,导致其他用户无法登录(密码错的缘故)。
  2. 所有用户无法修改自己的密码
  3. 注册新用户时,系统不会记录新用户的email问题
  4. 新建用户,修改用户,编辑用户密码的密码过滤BUG

解决方法:

有些地方没有写出原来的代码内容,如果大家修改过源代码,请注意查看一下要改动的代码是否和我提供的代码相似,代码都是按顺序从上往下修改的。很多地方都是将password修改为newpassword,关于一个单词拼写错误我也改了一下,comfirmpassword改为confirmpassword。大家注意一下。后面是具体改动内容。

打开templatesadminuser.php

第118行

  1. <input class="formfield" type="password" name="password" size="50" value="" /><br />  

改为

  1. <input class="formfield" type="password" name="newpassword" size="50" value="" /><br /> 

第125行

  1. <input class="formfield" type="password" name="comfirpassword" size="50" value="" /><br /> 

改为

  1. <input class="formfield" type="password" name="confirmpassword" size="50" value="" /><br /> 

打开adminuser.php

将51行,104行改为:

  1. $confirmpassword = trim($_POST["confirmpassword"]); 

将74行,123行改为:

  1. if ($newpassword != $confirmpassword) { 

将77行和126行这两行替换为:

  1. if (strpos($newpassword," ") !== false || strpos($newpassword," ") !== false || strpos($newpassword," ") !== false) { 

将154行和155行替换为:

  1. $newpassword        = $_POST["newpassword"]; 
  2. $confirmpassword = $_POST["confirmpassword"];       //大A居然写成了comfirmpassword 

将168行~186行替换为:

  1. if ($newpassword) { 
  2.  $user = $DB->fetch_one_array("SELECT password FROM {$db_prefix}users WHERE userid="$sax_uid""); 
  3.  if (!$user) { 
  4.   redirect("出错,请尝试重新登陆再进行此操作"); 
  5.  } 
  6.  if ($old_password != $user["password"]) { 
  7.   redirect("密码无效"); 
  8.  } 
  9.  if(strlen($newpassword) < 8) { 
  10.   redirect("新密码长度不能小于8位"); 
  11.  } 
  12.  if ($newpassword != $confirmpassword) { 
  13.   redirect("请确认输入的新密码一致"); 
  14.  } 
  15.  if (strpos($newpassword," ") !== false || strpos($newpassword," ") !== false || strpos($newpassword," ") !== false) { 
  16.   redirect("密码包含不可接受字符"); 
  17.  } 
  18.  $password_sql = ", password="".md5($newpassword)."""

将191行替换为:

  1. if ($newpassword) { 

打开cp.php

第161行,把原来的代码修改一下,增加上email和”$email”,如下:

  1. $DB->query("INSERT INTO {$db_prefix}users (username, password, logincount, loginip, logintime, email, url, regdateline, regip, groupid, lastip, lastvisit, lastactivity) VALUES ("$username", "$password", "1", "$onlineip", "$timestamp", "$email", "$url", "$timestamp", "$onlineip", "3", "$onlineip", "$timestamp", "$timestamp")");