Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[已经确认] 遇到了一个文章附件关联的故障。

[复制链接]
poplei 发表于 2010-1-22 15:04:30 | 显示全部楼层 |阅读模式
本帖最后由 poplei 于 2010-01-22 20:10 编辑

客户端:
分别在FireFox3.6和IEtab下测试,均有下述问题。
服务器环境:
本地WAMPserver2.0。
Apache2.2.11/PHP5.29-2/MYSQL5.1.36
程序版本:
SS7.5 打过目前最新补丁.
改动过templates、source、mthemes文件夹下的文件(跟后台没关系的)。


问题描述:
1、现有《文章A》《文章B》《文章C》都没有附件,另有本地图片t1、t2、t3。
2、编辑《文章A》,上传t1并插入大图到文章中,提交。此时《文章A》 看似一切正常。
3、编辑《文章B》,上传t2并插入大图到文章中,提交。此时《文章B》有两个附件t1和t2。
4、编辑《文章C》,上传t3并插入大图到文章中,提交。此时《文章C》有三个附件t1、 t2 、t3。
5、调用“haveattach/2/showattach/1/”查询结果能够取出《文章A》,但取不到图片t1。
6、编辑《文章A》,观其无附件,不作任何修改,直接提交。
7、调用“haveattach/2/showattach/1/”查询结果不再包含《文章A》。
8、编辑《文章C》,删除附件t1、 t2。《文章A》《文章B》中插入的大图失效。

造成此问题的原因不明确,在本版找到有类似的问题曾经被提出,但并未定性为BUG。
也许确实并非BUG,但望能够得到产生上述问题的可能原因分析以及解决问题的提示。
谢谢。

PS:
https://discuz.dismall.com/viewth ... hlight=%B8%BD%BC%FE
有人提到config.php文件中站点地址的配置
我的配置是本地host地址(127.0.0.1  webmax),这一点确定无误,应该不是原因。
$_SC['siteurl'] = 'http://webmax';




我查到原因了。问题出在发布文章的时候。
发布《文章A》点【提交保存】按钮后,在提示发布成功的页面,不点《文章B》任何页面中的导向链接,而点击浏览器的后退按钮;
后退到文章发布表单,填写《文章B》文章标题等属性,点【提交保存】按钮,成功后,点浏览器后退按钮;
后退到文章发布表单,填写《文章C》文章标题等属性,点【提交保存】按钮,成功后,点浏览器后退按钮;
……这样子连续发布的多篇文章,添加附件会出现附件关联错误。

发布表单中的一个值“hash”没有改变,多篇文章同一个相同hash值。而附件与文章之间正是靠这个hash值来关联的,于是出现附件关联错误的情况。


可认为是BUG,也可认为不是BUG。
 楼主| poplei 发表于 2010-1-22 15:36:34 | 显示全部楼层
未上传的时候(好多个图片的itemid都是305,这个就是这个故障造成的。我们姑且把它当做正常的,继续往下看)


我编辑itemid为301的文章,上传(仅)一张图片,
但上传成功返回的附件列表包含了最近上传的N个图片。
文章未提交的之前,看数据库都正常。


给itemid为301的文章上传(仅)一张图片,点击提交后提交后。
原本属于305的附件现在属于了301.


估计
如果我再编辑itemid为306的文章,并给这文章上传一张图片后点击提交,上图中itemid为305的附件的itemid值又会变成306。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

 楼主| poplei 发表于 2010-1-22 15:46:42 | 显示全部楼层
本帖最后由 poplei 于 2010-01-22 20:33 编辑

小小问题,晕了一整个天。
一楼有解。

关于附件的$hash有一个疑问。
听说$hash是$itemid的MD5截取值,那么为什么还要用$hash,直接用$itemid得了。
$itemid才是真正的不会重复。
了解MD5的应该知道substr(md5($itemid), 8, 16)本身就有重复概率(虽然概率很小),并且还会产生上述表单重复使用造成的hash重复问题。
如果直接用$itemid来关联的话,第一绝对不会重复,第二如果表单重复使用,至少还有对$itemid值是否已经存在的判断,而目前貌似没有对$hash值是否存在的判断。

https://discuz.dismall.com/redire ... 68&pid=11723501
那个是资讯的唯一值,是不会重复,可由下面一句代码产生:
        $hash        =        substr(md5($itemid), 8, 16);

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-15 09:41 , Processed in 0.029401 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表