以文本方式查看主题

-  ※缘聚久久※  (http://yjjj.com/bbs/index.asp)
--  『 资讯平台 』  (http://yjjj.com/bbs/list.asp?boardid=111)
----  动网论坛8.3版投票缺陷修复  (http://yjjj.com/bbs/dispbbs.asp?boardid=111&id=58596)

--  作者:红色-13
--  发布时间:2012-9-5 17:32:01
--  动网论坛8.3版投票缺陷修复
    在制作论坛皮肤的同时,发现由原来的 8.2 版升级到 8.3版后。发布投票贴变的不好使了。一开始以为是自己在制作皮肤时破坏了论坛程序结构。后来恢复论坛默认的皮肤及重新搭建论坛(直接使用官方原版),发现问题仍然顽固存在。看来和制作皮肤是没有必然的联系了,问题就发生在论坛的原码上。经过一上午的跟踪原码最终发现在投票项目写库前处理错误。

    首先、inc/dv_servote.js 中。
以下内容为程序代码:

1 第166行:votedb_Obj.value += \'\\r\'; 这行是在投票项目后边串入换行符,对应 ASP 的符号是 chr(10)。


    其次、在 Dispbbs.asp 中。
以下内容为程序代码:

1 第352行:a1=Split(Dvbbs.ChkBadWords(aVote(1,0)),"|") \'以 | 号分割投票项
2 第353行:a2=Split(aVote(2,0),"|") \'以 | 号分割投票项的票数
3 第354行:u1=UBound(a1) \'计数选择项


    以上两点可以看出,在发投票贴时的数据是以\'\\r\'[换行符]传递给SavePost.asp的。而页面在读取数据库的时候,是以\'|\'号来分割显示项目的。打开数据库查看投票项目的数据库存储值。在 Dv_Vote 表中 vote 字段是存放投票项目名称的,votenum 字段是存放投票数的。例如一个正常的三项目单选投票结构应该如下:

 vote[字段] 
 votenum[字段] 
  选项A选项B选项C 
 000 

    选项A:0票
    选项B:0票
    选项C:0票

    在实际的查看过程中发现,选项的分割符不见了。如下:
  
 vote[字段] 
 votenum[字段] 
  选项A 选项B 选项C 
 0

    选项A 选项B 选项C :0票
  
    在贴子中,不论发贴时设置了多少个选项,统统变成只有一项。

    再去查找 SavePost.asp 在文件的第567行:
以下内容为程序代码:

1 第567行:vote=split(vote,chr(13)&chr(10))

   
    真奇怪呀,在页面提交的时候仅串入了一个 \'\\r\' [换行符],而在入库过滤前确是以 chr(13)&chr(10) [回车符][换行符] 来分割字串。果断修改该处,修改为:
以下内容为程序代码:

1 第567行:vote=split(vote,chr(10))


    再次发布投票贴测试,这下完全正常了。

    嘎嘎~表扬自己一下~



[此贴子已经被作者于2012-9-5 20:41:58编辑过]

--  作者:丁不三
--  发布时间:2012-9-12 12:29:44
--  
13辛苦。