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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[已经确认] 后台积分规则设置页面代码有缺陷

[复制链接]
xiongrui888 发表于 2009-2-22 21:33:12 | 显示全部楼层 |阅读模式
本帖最后由 茄子 于 2009-2-23 09:52 编辑

管理员后台设置的各项的页面中的数据的大多都是从数据库中获取显示的,
而“积分设置”页面的数据来源却依赖于data目录下的缓存文件data_creditrule.php,
见一下admincp_credit.php文件:
  1. <?php
  2. /*
  3.         [UCenter Home] (C) 2007-2008 Comsenz Inc.
  4.         $Id: admincp_credit.php 8390 2008-08-06 05:50:42Z liguode $
  5. */

  6. if(!defined('IN_UCHOME') || !defined('IN_ADMINCP')) {
  7.         exit('Access Denied');
  8. }

  9. //权限
  10. if(!checkperm('managecredit')) {
  11.         cpmessage('no_authority_management_operation');
  12. }

  13. if(submitcheck('creditsubmit')) {

  14.         $ins = array();
  15.         foreach ($_POST['get'] as $key => $value) {
  16.                 $ins['get'][$key] = abs(intval($value));
  17.         }
  18.         foreach ($_POST['pay'] as $key => $value) {
  19.                 $ins['pay'][$key] = abs(intval($value));
  20.         }
  21.         data_set('creditrule', $ins);
  22.         
  23.         include_once(S_ROOT.'./source/function_cache.php');
  24.         creditrule_cache();
  25.         
  26.         cpmessage('do_success', 'admincp.php?ac=credit');
  27. }

  28. @include_once(S_ROOT.'./data/data_creditrule.php');
  29. if(empty($_SGLOBAL['creditrule'])) {
  30.         $get = $pay = array();
  31. } else {
  32.         $get = $_SGLOBAL['creditrule']['get'];
  33.         $pay = $_SGLOBAL['creditrule']['pay'];
  34. }

  35. ?>
复制代码
data目录下的缓存文件应该是可以删除更新的,但若将data_creditrule.php删除,那么后台中的“积分规则”页面里的各项都成了空白,若按提交,那原始设置就在数据库中彻底消失了。

解决办法:将admincp_credit.php的第33行改为:
if(!@include_once(S_ROOT.'./data/data_creditrule.php')) {
     include_once(S_ROOT.'./source/function_cache.php');
       creditrule_cache();
}
即可避免此类问题的发生。
茄子 发表于 2009-2-23 09:50:59 | 显示全部楼层
谢谢反馈
这个不属于bug,不过这样修改也是没问题的
回复

使用道具 举报

sup 发表于 2009-2-23 09:52:26 | 显示全部楼层
好的,这个属于兼容性增强问题
回复

使用道具 举报

 楼主| xiongrui888 发表于 2009-2-23 14:02:10 | 显示全部楼层
能与sup、 茄子交流,高兴!
回复

使用道具 举报

C43F 发表于 2009-3-24 21:21:13 | 显示全部楼层
这个其实改common.php就可以

//缓存文件
foreach (array('config', 'app', 'userapp', 'ad') as $value) {
        if(!@include_once(S_ROOT.'./data/data_'.$value.'.php')) {
                include_once(S_ROOT.'./source/function_cache.php');
                $cache_func = $value.'_cache';
                $cache_func();
        }
}
这里面加上就OK了
回复

使用道具 举报

 楼主| xiongrui888 发表于 2009-3-24 22:23:42 | 显示全部楼层
ok,这种方法也很便捷的
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-2 16:13 , Processed in 0.093445 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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