在制作论坛皮肤的同时,发现由原来的 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
| 0|0|0
|
选项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编辑过]