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

 找回密码
 立即注册
搜索

BBSxp5.x转D4完整教程及转换程序的几个错误

[复制链接]
firen 发表于 2005-12-15 11:40:41 | 显示全部楼层 |阅读模式
花了一个晚上仔细研究了整个转换的过程,以及论坛里提供的bbsxp2d4.php,总算是把BBSxp 5.13 转成了D4,鉴于 所转换的几个表自BBSxp 5.0以来就没有大的改变,所以只要是原版的bbsxp或者是没有对主数据库中原有几个主要表中的项进行过修改的话,应该会问题不大。

强烈建议在本地进行调试,这样速度快,而且恢复起来很容易。IIS+PHP+Mysql+phpmyadmin 的环境搭建请参考这里

如果你已经安装了bbsxp sql版,请跳过前3步。
1.如果你安装的是access版,那么请先下载安装microsoft sql server 2000 个人版 ,注意企业版在xp下无法安装服务端组件的,对于mssql2000的安装这里就不再说了,可以在网上找到相关的资料。
2.安装完毕后,mdb数据库转换成mssql数据库请参考中 dvbbs部分,点击查看,这个步骤是完全一样的。
3.转换成后,请一定要在sql版的bbsxp中调试通过以后再继续。
4.如果在php.ini中没有打开相应的mssql支持,则编辑php.in,去掉iextension=php_mssql.dll前面的分号,并且把mssql设置部分中的textlimit和sizelimit均设为最大值
5.下载官方提供的bbsxp2d4.php后放到discuz的根目录下,并打开此文件进行设置,mssql和mysql服务器相关信息请按照实际情况填写,post表名一行只有当你曾经分过表时才需要填写,一般不需要。要注意的是$source_mtables一行已默认为n_user,请不要改变为user(虽然bbsxp中的表为user)
6.打开mssql企业管理器中bbsxp相应的数据库,请修改表user的名字为n_user 同时把n_user,bbsconfig,forum,reforum四个表原来数据类型为ntext的列改为text类型。
7.下面是几个转换文件的问题,要注意:
第546行,是一个明显的语法错误,where后面的$oldtid是需要用单引号引起来的,而且还有一个问题,oldtid根本就是一个没有被定义过的变量,这个select的sql查询语句是找不到任何符合条件的纪录的,所以结果会导致所有回帖均无法导入,解决方法很简单,从前面的代码看来,_tid才是纪录当前帖子编号的,所以把$oldtid改成$_tid,总的来说546行应该为
  1. $pquery=mssql_query("SELECT * FROM {$source_tablepre}reforum WHERE topicid='$_tid' ");
复制代码


另外一个问题,是你会发现当转换结束后,所有帖子都显示为“游客“,原因出在505行
  1. $authorid=$thread['postuserid'];
复制代码

我想这个程序可能是从dvbbs2d4的程序转过来的,所以留下很多dvbbs的痕迹,这里的问题在于bbsxp中forum和reforum表中并不存在一个叫做postuserid的列,而只是记录下发贴者的用户名,所以解决的办法是,带着这个用户名去n_user表中寻找相应的userid了,修改方法如下:
删除原505行,并在原505行的位置插入以下代码:
  1. $temp_username = $thread['username']; //取得用户名
  2. $temp_query = mssql_query("SELECT * FROM {$source_mtables} WHERE username='$temp_username'"); //在用户表中查询该用户名
  3. $temp_thread = mssql_fetch_assoc($temp_query);
  4. $temp_thread = daddslashes(array_change_key_case($temp_thread));
  5. $authorid = $temp_thread['id']; //取得用户id
复制代码


这样下来整个转换应该没什么大问题了,所有的用户,帖子和回帖都是正常的,至少到现在我还没有发现什么问题

如果版主有时间,最好可以把数据转换那个文件再略微整理一下,里面很多代码其实都是针对dvbbs的吧,虽然留着也没什么问题,只是看到php提示一大堆的索引不存在,变量不存在……呵呵,使得真正的错误倒是不容易看出来了。

[ 本帖最后由 firen 于 2005-12-15 12:14 编辑 ]

评分

1

查看全部评分

回复

使用道具 举报

008at 发表于 2005-12-15 11:57:42 | 显示全部楼层
BBSxp5.x转D4完整教程及官方转换程序的几个错误

花了一个晚上仔细研究了整个转换的过程,以及官方提供的bbsxp2d4.php,总算是把BBSxp 5.13 转成了D4,鉴于 所转换的几个表自BBSxp 5.0以来就没有大的改变,所以只要是原版的bbsxp或者是没有对主数据库中原有几个主要表中的项进行过修改的话,应该会问题不大。

强烈建议在本地进行调试,这样速度快,而且恢复起来很容易。IIS+PHP+Mysql+phpmyadmin 的环境搭建请参考这里

如果你已经安装了bbsxp sql版,请跳过前3步。
1.如果你安装的是access版,那么请先下载安装microsoft sql server 2000 个人版 ,注意企业版在xp下无法安装服务端组件的,对于mssql2000的安装这里就不再说了,可以在网上找到相关的资料。
2.安装完毕后,mdb数据库转换成mssql数据库请参考中 dvbbs部分,点击查看,这个步骤是完全一样的。
3.转换成后,请一定要在sql版的bbsxp中调试通过以后再继续。
4.如果在php.ini中没有打开相应的mssql支持,则编辑php.in,去掉iextension=php_mssql.dll前面的分号,并且把mssql设置部分中的textlimit和sizelimit均设为最大值
5.下载官方提供的bbsxp2d4.php后放到discuz的根目录下,并打开此文件进行设置,mssql和mysql服务器相关信息请按照实际情况填写,post表名一行只有当你曾经分过表时才需要填写,一般不需要。要注意的是$source_mtables一行已默认为n_user,请不要改变为user(虽然bbsxp中的表为user)
6.打开mssql企业管理器中bbsxp相应的数据库,请修改表user的名字为n_user ,同时把n_user,bbsconfig,forum,reforum四个表原来数据类型为ntext的列改为text类型。
7.下面是几个转换文件的问题,要注意:
第546行,是一个明显的语法错误,where后面的$oldtid是需要用单引号引起来的,而且还有一个问题,oldtid根本就是一个没有被定义过的变量,这个select的sql查询语句是找不到任何符合条件的纪录的,所以结果会导致所有回帖均无法导入,解决方法很简单,从前面的代码看来,_tid才是纪录当前帖子编号的,所以把$oldtid改成$_tid,总的来说546行应该为


$pquery=mssql_query("SELECT * FROM {$source_tablepre}reforum WHERE topicid='$_tid' ");
另外一个问题,是你会发现当转换结束后,所有帖子都显示为“游客“,原因出在505行


$authorid=$thread['postuserid'];
我想这个程序可能是从dvbbs2d4的程序转过来的,所以留下很多dvbbs的痕迹,这里的问题在于bbsxp中forum和reforum表中并不存在一个叫做postuserid的列,而只是记录下发贴者的用户名,所以解决的办法是,带着这个用户名去n_user表中寻找相应的userid了,修改方法如下:
删除原505行,并在原505行的位置插入以下代码:


$temp_username = $thread['username']; //取得用户名
$temp_query = mssql_query("SELECT * FROM {$source_mtables} WHERE username='$temp_username'"); //在用户表中查询该用户名
$temp_thread = mssql_fetch_assoc($temp_query);
$temp_thread = daddslashes(array_change_key_case($temp_thread));
$authorid = $temp_thread['id']; //取得用户id
这样下来整个转换应该没什么大问题了,所有的用户,帖子和回帖都是正常的,至少到现在我还没有发现什么问题  

如果版主有时间,最好可以把数据转换那个文件再略微整理一下,里面很多代码其实都是针对dvbbs的吧,虽然留着也没什么问题,只是看到php提示一大堆的索引不存在,变量不存在……呵呵,使得真正的错误倒是不容易看出来了。
回复

使用道具 举报

 楼主| firen 发表于 2005-12-15 12:02:18 | 显示全部楼层
晕....2楼怎么全部复制了一遍……

[ 本帖最后由 firen 于 2005-12-15 12:14 编辑 ]
回复

使用道具 举报

 楼主| firen 发表于 2005-12-16 03:07:14 | 显示全部楼层
我看问bbsxp转的人挺多的,版主加个高亮吧
回复

使用道具 举报

uptownman 发表于 2005-12-16 17:52:07 | 显示全部楼层
Fatal error: Call to undefined function mssql_connect() in D:\discuz4.0\Discuz! v4.0.0 Build 20051212\upload\bbsxp2d4.php on line 119

各位大侠请帮帮小弟
运行bbsxp2d4.php连不上MSSQL
怎么解决啊
回复

使用道具 举报

 楼主| firen 发表于 2005-12-16 20:20:42 | 显示全部楼层
在php.ini中开启mssql的支持,如果你用的是iis的话,然后完全关闭iisadmin服务,再重启服务
回复

使用道具 举报

uptownman 发表于 2005-12-16 21:13:18 | 显示全部楼层
楼上的大哥加我QQ好吗
285132419
遇到很多问题哦
非常感谢!!!
回复

使用道具 举报

uptownman 发表于 2005-12-16 21:34:32 | 显示全部楼层
大侠你QQ多少啊
回复

使用道具 举报

uptownman 发表于 2005-12-16 23:35:28 | 显示全部楼层
Warning: mssql_select_db() [function.mssql-select-db]: message: 未能在 sysdatabases 中找到数据库 'bbsxp' 所对应的条目。没有找到具有该名称的条目。请确保正确地输入了名称。 (severity 16) in E:\Discuz! v4.0.0 Build 20051212\upload\bbsxp2d4.php on line 120

Warning: mssql_select_db() [function.mssql-select-db]: Unable to select database: bbsxp in E:\Discuz! v4.0.0 Build 20051212\upload\bbsxp2d4.php on line 120

这个是什么问题啊
回复

使用道具 举报

 楼主| firen 发表于 2005-12-16 23:59:43 | 显示全部楼层
PM我你的数据库地址,我帮你转好了...   :)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-17 07:33 , Processed in 0.110348 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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