论坛风格切换
  • 2896阅读
  • 1回复

[反馈]抢楼帖楼层中文逗号分隔引起的问题,BUG扑朔迷离 [复制链接]

上一主题 下一主题
离线rickyleo
 

发帖
315
金币
0
威望
99
只看楼主 倒序阅读 使用道具 楼主  发表于: 2012-03-09
一名网友 他可能不知道中文状态的逗号和英文状态的逗号有啥区别,在发帖页面已经提醒用户请输入逗号对各中奖楼层进行分隔!没提示用英文状态下的逗号分隔是一个问题。但是想想即使这么提示了又能怎么样呢?网民们能对中英文状态下的逗号都能很好的分隔吗?明显是不可能的
因此,假如你用中文状态下的逗号进行分隔的时候,程序会判断你是一串字符,程序员在对这些数据入库的时候显然是当用户输入的是英文状态下的逗号分隔的楼层号,然后将这段字符串拆分然后入库,他显然不知道有一种可能是用户使用了中文状态的逗号来分隔他的中奖楼层,其中可能有些用英文状态逗号分隔。这个时候会发生什么情况?
1、文章作者已经认为他提交的楼层数已经正常存储和使用了
2、程序压根就不认识用户输入的逗号,他被程序员设计为只认识英文状态的逗号。只会对英文状态逗号的数据进行分割
3、数据表字段设定为int类型,入库前的楼层数据是逗号还在串联两个相连的楼层数字,在入库前进行了类型过滤活强制转换,入库后逗号后面的字符就没了,比如"138,288"存储就变成了"138",然后后面用户提交的"288"被狠狠的抛弃了。这个就是隐藏的BUG
解决办法:
程序员只要对用户提交的中英文逗号隔开的中奖楼层数据做一个处理,无论提交的数据有没有中文状态的逗号,都进行一次将中文状态逗号转换成英文状态的逗号,然后再入库,这样不就什么问题都没有了吗?你可以不用管用户输入的是中文状态逗号还是英文的,提示还是照旧无论怎么说都行,只要逗号隔开就好了。
pw87修改:
打开require/postnew.php和postmodify.php
找到:
$robbuildService = L::loadClass("robbuild", 'forum');
下方添加如下代码:
$robawardbuilds = strtr($robawardbuilds, array(','=>','));
保存即可

本帖提到的人: @铁皮
1条评分分享分+1
cixinet 分享分 +1 给你个好评哦亲~ 2012-03-10
离线cixinet

发帖
66
金币
8
威望
9
只看该作者 沙发  发表于: 2012-03-10
给你个好评哦亲~
快速回复
限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
提到某人:
选择好友
上一个 下一个