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

 找回密码
 立即注册
搜索
12
返回列表 发新帖

[疑问] 帮帮忙,Leadbbs 3.14acc转5.5后大量帖子丢失

[复制链接]
 楼主| dyxg 发表于 2007-8-16 17:57:10 | 显示全部楼层

问题终于弄清楚了,有人能帮忙改转换程序吗?

经过两天的仔细研究,问题终于弄清楚了,原因大致如下:
LeadBBS 3.14 记录帖子的数据表LeadBBS_Announce的结构如下
ID:帖子编号,相当与Discuz!的pid
ParentID:所属主题,相当于Discuz!的tid,但可以为0,表示第一帖
TopicSortID:这个没搞明白
BoardID:所属版面,相当与Discuz!的fid
下面省略

当有会员发新帖,LeadBBS记录如下
ID=aaa
ParentID=0
当有人回复这个帖子时,LeadBBS又记录如下
ID=bbb
ParentID=aaa
此时如果又有人回复bbb号贴,LeadBBS又记录如下
ID=ccc
ParentID=bbb
问题就出在这里,官方转换程序转换ccc贴的时候,tid照抄为bbb,而不是aaa,所以查看aaa贴的时候,ccc贴就看不到
而把ccc当成非法贴子

简单地说,就是回复跟贴的帖子转换后都变成非法贴,无法显示。这应该是ld314acc-dz550.php的一个BUG。
或者说,LeadBBS支持树形结构,Discuz!不支持。

[ 本帖最后由 dyxg 于 2007-8-18 00:05 编辑 ]
回复

使用道具 举报

 楼主| dyxg 发表于 2007-8-18 00:06:28 | 显示全部楼层

下面是我在ld314acc-dz550.php中找到的

$post                        =        daddslashes($post);
$fid                        =        $post['boardid'];
$tid                        =        $post['parentid'] == 0 ? $post['id'] : $post['parentid']
$first                        =        $post['parentid'] == 0 ? 1 : 0;

红色字的地方过于简单,而要一直追查到'parentid'=0的那条数据的'id'.

请懂PHP的高手帮我改一下程序。

[ 本帖最后由 dyxg 于 2007-8-18 00:12 编辑 ]
回复

使用道具 举报

 楼主| dyxg 发表于 2007-8-20 21:16:34 | 显示全部楼层
现在没有人理我啦?
回复

使用道具 举报

桃子(小敏) 发表于 2007-8-21 09:49:54 | 显示全部楼层
到官方“手握手”申请下:
https://discuz.dismall.com/sowoso/
回复

使用道具 举报

 楼主| dyxg 发表于 2007-8-21 20:22:43 | 显示全部楼层

自己的问题还是得靠自己解决

又经过两天仔细研究LeadBBS的数据库,终于发现其LeadBBS_Announce表中在最有有一个rootidbak的域记录主题的id,因此修改转换程序。

ld314acc-dz550.php原程序如下:

} elseif ($step == 5) {        //帖子

        if($start <= 1 && $tableid == 0) {
                mysql_query("TRUNCATE TABLE {$dz_tblpre}posts") or dexit("清空帖子表错误".mysqlerror());

                $sql = "SELECT MIN(ID) AS minid, MAX(ID) AS maxid FROM {$ld_tblpre}Announce";
                $rs = $dbc->execute($sql);
                if (!$rs->EOF) {
                        $start = $rs->fields[minid]->value;
                        $maxid = $rs->fields[maxid]->value;
                }
                $rs->close();
                $start = $start > 1 ? $start : 1;
                $end = $start + $rpp - 1;
        }

        $sql = "SELECT * FROM {$ld_tblpre}Announce WHERE (ID BETWEEN $start AND $end)";

        $rs = $dbc->execute($sql);
        $fieldarray = array('id', 'boardid', 'parentid', 'username', 'userid', 'ndatetime', 'lasttime', 'title', 'printcontent', 'visitip', 'lastuser', 'hits', 'childnum', 'goodflag');
          while(!$rs->EOF) {
                foreach($fieldarray AS $field) {
                        $post[$field] = $rs->fields[$field]->value;
                }

                $post                        =        daddslashes($post);

                $fid                        =        $post['boardid'];
                $tid                        =        $post['parentid'] == 0 ? $post['id'] : $post['parentid'];
                $first                        =        $post['parentid'] == 0 ? 1 : 0;
                $author                        =        cutstr(htmlspecialchars(trim($post['username'])),15);
                $authorid                =        $post['userid'];
                $subject                =        $post['title'] ? cutstr(htmlspecialchars(trim(@strip_tags($post['title']))),78) : '';
                $dateline                =        sqltimetounix($post['ndatetime']);
                $message                 =        str_replace("../images/", 'leadbbsfile/', preg_replace("/\&nbsp\;\s*/", '',$post['printcontent']));
                $message                 =        str_replace("./images/", 'leadbbsfile/', preg_replace("/\&nbsp\;\s*/", '',$message));
                $message                 =        str_replace("/images/", 'leadbbsfile/', preg_replace("/\&nbsp\;\s*/", '',$message));

                $useip                        =        $post['visitip'];
                $invisible                =        0;
                $usesig                        =        1;
                $htmlon                        =        1;
                $bbcodeoff                =        '1';
                $smileyoff                =        '1';
                $parseurloff                =        '1';
                $attachment                =        '0';
                $rate                        =        '0';
                $ratetimes                =        '0';

                $query1        =        "INSERT INTO `{$dz_tblpre}posts` ( `fid` , `tid` , `first` , `author` , `authorid` , `subject` , `dateline` , `message` , `useip` , `invisible` , `usesig` , `htmlon` , `bbcodeoff` , `smileyoff` , `parseurloff` , `attachment` , `rate` , `ratetimes` ) VALUES ('$fid','$tid','$first','$author','$authorid','$subject','$dateline','$message','$useip','$invisible','$usesig','$htmlon','$bbcodeoff','$smileyoff','$parseurloff','$attachment','$rate','$ratetimes');";
                if (mysql_query($query1)) {
                        $convertedrows ++;
                } else {
                        reportlog("无法转换帖子 pid = $pid subject = '$subject',SQL 语句如下 :<br><textarea rows=\"3\" style=\"width: 100%;\">".$query1."</textarea>".mysqlerror());
                }
                $converted = 1;
                $totalrows ++;
                $rs->movenext();
        }

        $rs->Close();

        if($converted || $end < $maxid) {
                continue_redirect("&maxid=$maxid");
        } else {
                report('帖子');
                stay_redirect();
        }

修改上面红子的两句为
$fieldarray = array('id', 'boardid', 'parentid', 'username', 'userid', 'ndatetime', 'lasttime', 'title', 'printcontent', 'visitip', 'lastuser', 'hits', 'childnum', 'goodflag', 'rootidbak');

$tid=$post['parentid'] == 0 ? $post['id'] : $post['rootidbak'];

大功告成
回复

使用道具 举报

 楼主| dyxg 发表于 2007-8-21 20:26:17 | 显示全部楼层

关于手握手的求助

请问如何撤销手握手的求助请求?

谢谢各位的协助,尤其是“别吹起灰”。

[ 本帖最后由 dyxg 于 2007-8-21 20:29 编辑 ]
回复

使用道具 举报

别吹起灰 发表于 2007-8-21 20:29:52 | 显示全部楼层

回复 #16 dyxg 的帖子

联系 空谷幽兰 确认任务完成或者删除
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-13 07:51 , Processed in 0.101460 second(s), 12 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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