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

发布时间:July 2, 2008分类:写写程序.Code
作者:HJin.me
评论: 5 条

文章来源于《傻猫网络日志》 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 的模板

发布时间:June 30, 2008分类:写写程序.Code
作者:HJin.me
评论: 12 条

很兴奋啊!这个是我第一次做模板!准确说是抄模板

Sablog-x 2.0 到目前模板还没有几个,用这大A的默认模板总觉得没有意思,心血来潮,就抄了一个模板。

这个模板很漂亮,好久以前就已经收藏了,今天总算把这个模板挪为己用。

花了一夜的时候,这个模板结构和大A的差不多,只是图片改变了一下。写的过程中,发现CSS方面自己还是有很多不懂。唉,从来都没有看过这方面的书。如果谁发现了这个模板哪里显示不正常,记得给我说一下哦!

暑假快到了,看来自己得好好学一学,做些好看的有个性的模板出来!

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

发布时间:June 29, 2008分类:写写程序.Code
作者:HJin.me
评论: 3 条

使用 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无法关闭静态链接解决方法

发布时间:June 29, 2008分类:写写程序.Code
作者:HJin.me
评论: 2 条

虚拟主机上面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

发布时间:June 29, 2008分类:写写程序.Code
作者:HJin.me
评论: 3 条

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

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

其具体问题是:


  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")");