用户名 密码 记住我 还未注册?

bug 报告: 无法发贴 [技术论坛 - CBB(newbb)]

XOOPS China 讨论区 > XOOPS Module (模块) > 专属模块支持 > CBB(newbb) > bug 报告: 无法发贴

正在浏览:   1 名游客



 到底部   前一个主题   下一个主题  [无发表权] 请登录或者注册



bug 报告: 无法发贴
Support Team
注册日期:
2004/6/29 20:25
所属群组:
注册会员
技术文档组
ComSupp
ComSupp
帖子: 153 | 精华: 2
等级: 11; EXP: 42
HP: 0 / 260
MP: 51 / 5342
离线
xoops: 2.3.3
newbb: 4.00

表现:无论是普通会员还是管理员,在回复帖子时均显示Array(), 再次刷新后会告知session可能失效或过期。

打开查错后,发现有问题的sql语句如下:

INSERT INTO 
`bb_posts` (`topic_id`, `forum_id`, `post_time`, `poster_ip`, `poster_name`, `subject`, `pid`, `uid`, `icon`, `attachsig`, `approved`, `post_karma`, `require_reply`) VALUES (1,1,1262264305,2071469433,'','å��å¤�: æ�­å��! è®ºå��å·²å¼�å§�正常è¿�è¡�.',1,1,'',0,1,0,0)
Error number1054
Error message
Unknown column 'poster_ip' in 'field list'

根据提示,去查了一下代码:

grep poster_ip 
* -r
class/post.php:        $this->initVar('poster_ip'XOBJ_DTYPE_INT0);
class/
post.php:            $user_ok = ($user_ip == $this->getVar('poster_ip')) ? true false;
class/
post.php:                    'poster_ip' => ($isadmin && $xoopsModuleConfig['show_ip']) ? long2ip($this->getVar('poster_ip')) : "",
include/
module.v100.php:    $result $GLOBALS['xoopsDB']->queryF("ALTER TABLE ".$GLOBALS['xoopsDB']->prefix("bb_posts")." CHANGE `poster_ip` `poster_ip` INT(11) NOT NULL DEFAULT '0'");
include/
module.php:    $forumpost->setVar('poster_ip'newbb_getIP());
include/
functions.welcome.inc.php:    $post_obj->setVar('poster_ip'newbb_getIP());
moderate.php:            $post_obj->setVar("poster_ip"newbb_getIP());
post.php:        $post_obj->setVar('poster_ip'newbb_getIP());
sql/mysql.sql:  `poster_ip`             int(11)         NOT NULL default '0',
sql/mysql.400.sql:    CHANGE         `poster_ip`         `poster_ipd`    varchar(15NOT NULL default '0.0.0.0',
templates/newbb_thread.html:    <{if $topic_post.poster_ip}>
templates/newbb_thread.html:    IP: <a href="http://www.whois.sc/<{$topic_post.poster_ip}>" target="_blank"><{$topic_post.poster_ip}></a> |
templates/newbb_item.html:<{if $topic_post.poster_ip}>
templates/newbb_item.html:IP: <a href="http://www.whois.sc/<{$topic_post.poster_ip}>" target="_blank"><{$topic_post.poster_ip}></a>
viewpost.php:                    'poster_ip'         => ($isadmin && $xoopsModuleConfig['show_ip']) ? long2ip($post->getVar('poster_ip')) : "",


发现在sql/mysql.400.sql中改变了原来数据库的结构,将poster_ip修改为poster_ipd, 而在代码中提交时的字段却为poster_ip.

mysql.400.sql中改变数据库结构的代码在哪里?

grep "400.sql" * --B 3 -A3
include/module.php-    }
include/
module.php-    
include/
module.php-    if ($oldversion 400) {
include/
module.php:        $GLOBALS['xoopsDB']->queryFromFile(XOOPS_ROOT_PATH "/modules/" $module->getVar("dirname""n") . "/sql/mysql.400.sql");
include/
module.php-        include dirname(__FILE__) . "/module.v400.php";
include/
module.php-        xoops_module_update_newbb_v400($module);
include/
module.php-    }

这段代码位于include/module.php的xoops_module_update_newbb函数调用中,就是说如果从4.00以前的版本升级上来之后,数据表bb_posts的结构会被修改,字段为poster_ip会被修改为poster_ipd, 从而导致无法正确执行insert语句,从而导致无法回复。

好多年不摸php了,如果分析错了,请指正。

2009/12/31 21:24
_________________
Jabber(Gtalk)群--支持显示组成员:[email protected]
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


回复: bug 报告: 无法发贴
Support Team
注册日期:
2004/6/29 20:25
所属群组:
注册会员
技术文档组
ComSupp
ComSupp
帖子: 153 | 精华: 2
等级: 11; EXP: 42
HP: 0 / 260
MP: 51 / 5342
离线
嗯,果然是这个问题,手工修改了bb_posts的数据表结构后就可以发帖了。

把名称由poster_ipd改回了poster_ip, 类型就不知道是要沿用旧版本的int(11)了还是新版本的varchar(15), 这个没有动。依旧是varchar(15), 目前看起来还好。


());
sql/mysql.sql:  `poster_ip`             int(11)         NOT NULL default '0',
sql/mysql.400.sql:    CHANGE         `poster_ip`         `poster_ipd`    varchar(15NOT NULL default '0.0.0.0',

2009/12/31 21:39
_________________
Jabber(Gtalk)群--支持显示组成员:[email protected]
工具箱 短消息 Email PDF 书签 打印 举报 回顶部



  [无发表权] 请登录或者注册


可以查看帖子。
不可发帖。
不可回复。
不可编辑自己的帖子。
不可删除自己的帖子。
不可发起投票调查。
不可在投票调查中投票。
不可上传附件。
不可不经审核直接发帖。
不可使用主题类别。
不可使用HTML语法。
不可使用签名档。

[高级搜索]