勳章中心6.0[UTF-8]勳章自動回收解決辦法

引用地址:http://coz.tw/dz6/thread-11154-1-1.html

一開始小弟從安裝勳章中心6.0[UTF-8]插件到使用上都很順利
不過一到隔天就發現勳章自動回收
購買當時所使用的金錢也隨之消失
至後台查看勳章紀錄
會顯示某會員使用勳章中心來回收
不過各位大大不須煩惱
安全性並沒出問題
純粹是插件本身的BUG….

因為勳章中心插件本身可省去管理者人工頒發的困擾
對會員的自由性也提高非常多
所以應該會造成許多使用此插件的站長們很頭大
小弟花了3天測試更改此BUG的效果
終於給小弟成功解決
在此雙手奉上與各位大大們分享
解決方法↓

在plugins\medalcenter\medalcenter.func.php文件:
搜索:

if(!function_exists('array_combine')) {         function array_combine($keys, $values) {                 $result = array();                 if(is_array($keys) && is_array($values)) {                                                if(count($keys) >= count($values)) {                                 foreach($values as $value) {                                         $key = $key ? next($keys) : current($keys);                                         $result[] = array_combine($key, $value);                                 }                                                        } else {                                 foreach($keys as $key) {                                         $value = $value ? next($values) : current($values);                                         $result[] = array_combine($key, $value);                                 }                         }                                        } elseif(!is_array($keys) && !is_array($values)) {                         $keys = is_string($keys) ? '\''.addcslashes($keys, '\'\\').'\'' : $keys;                         $values = (!preg_match("/^\-?[1-9]\d*$/", $values) || strlen($values) > 12) ? '\''.addcslashes($values, '\'\\').'\'' : $values;                         $result = array($keys => $values);                 } elseif(is_array($keys) && !is_array($values)) {                                                 foreach($keys as $key) {                                 $result[] = array_combine($key, $values);                         }                                        } elseif(!is_array($keys) && is_array($values)) {                                                                         foreach($values as $value) {                                 $result[] = array_combine($keys, $value);                         }                                        }                 return $result;         } }

替换成:

if(!function_exists('array_combine')) {
function array_combine($arr_key,$arr_val){
if( !is_array($arr_key) or !is_array($arr_val)){
    echo '<b>Warning</b>:    array_combine() expects all parameters to be array';
    return false;
}
if(count($arr_key) != count($arr_val)){
    echo '<b>Warning</b>:    array_combine() Both parameters should have an equal number of elements';
    return false;
}
$count = count($arr_key);
for($i=0;$i<$count;$i++){
    $key = $arr_key[$i];
    $val = $arr_val[$i];
    $arr_new[$key] = $val;
}
return $arr_new;
}
}

本來小弟以為改成上面方式就能解決
不過小弟等了一天
勳章中心還是很熱情的把勳章給回收了…
如果以上方法不能解決請繼續改下面的↓
上面改過的不需要再改回來
到medalcenter.func.php 找

if(is_array($uids)) { //array
                $where = 'WHERE m.uid in(\'' . implode('\', \'', $uids). '\')';
        } else {
                $where = 'WHERE m.uid = \'' . $uids .'\'';
                $medalids = array($medalids);
                $outtimes = array($outtimes);
        }

改成:

if(is_array($uids)) { //array
                $where = 'WHERE m.uid in(\'' . implode('\', \'', $uids). '\')';
        } else {
                $where = 'WHERE m.uid = \'' . $uids .'\'';
        }
        $medalids = array($medalids);
        $outtimes = array($outtimes);

把以上2個地方做一次改好
小弟測試成功沒問題
希望能對許多大大有所幫助:71: