問題外掛:Vault虛擬股市
參考連結:http://phpbb-tw.net/phpbb/viewtopic.php ... BE%5DVault
使用版本:phpBB2.0.19
網站位置:http://*****SPAM*****.ilyo.com.tw/squared
測試帳號 : test 密碼 1234
問題內容 : 假設我買了幾千張..股票..當我把部份賣掉時 買入價會不斷的降低.
甚至會降到負數 , 我之前有問過心靈大大 他建議我把價格提高 我也照早了 可是
還是會降成負數..而且..當買入價變了負100多時 賣掉手上的股票會出現以下的
debug..而股票不會減少 錢就不斷增多~~
我想問 下邊這bug 怎樣出來的 還有 怎樣解決..
請大大們幫忙 我的論壇 很多人遇到這bug 洗錢洗很大~~
DEBUG MODE
SQL Error : 1265 Data truncated for column 'stock_price' at row 5
UPDATE phpbb_vault_exchange_users SET stock_price = ((stock_price * stock_amount) + (78 * -500))/(stock_amount + -500), stock_amount = stock_amount + -500 WHERE user_id = 2 AND stock_id = 14
Line : 379
File : vault.php
虛擬股市 的 bug 請大大們幫忙
版主: 版主管理群
1. 架站系統 MySQL 4.1.12 ,phpBB2.0.19心靈捕手 寫:建議您:
1. 補充說明, 架站系統 (MySQL, PHP,...)
2. 貼出控制台, 關於股市的組態設定
3. 將下列檔案壓縮後, 貼出下載連結
vault.php
2.控制台, 關於股市的組態設定
我只會照常 上傳了 如下..
http://img.wowguild.com.tw:8080/25669/3_215.jpg
http://img.wowguild.com.tw:8080/25669/10_307.jpg
3. 抱歉..不知為何 我兩個空間也不容許我上存 zip 跟rar 檔 所以 佔一下位子貼出來 抱歉 事後我會刪掉清理的
代碼: 選擇全部
<?php
/***************************************************************************
* vault.php
* ------------------------
* begin : 06/01/2004
* copyright : Malicious Rabbit / Dr DLP
*
*
***************************************************************************/
/***************************************************************************
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
*
***************************************************************************/
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
$userdata = session_pagestart($user_ip, PAGE_VAULT);
init_userprefs($userdata);
$user_id = $userdata['user_id'];
if ( !$userdata['session_logged_in'] )
{
$redirect = "vault.$phpEx";
$redirect .= ( isset($user_id) ) ? '&user_id=' . $user_id : '';
header('Location: ' . append_sid("login.$phpEx?redirect=$redirect", true));
}
$template->set_filenames(array(
'body' => 'vault_body.tpl')
);
include($phpbb_root_path . 'includes/page_header.'.$phpEx);
if ( !$board_config['vault_enable'] )
{
vault_previous( Vault_closed , index , '' , Vault_index_return );
}
// Get the general config
$vault_general = vault_get_general_config();
$num_items = $vault_general['num_items'] + 1;
$base_amount = $vault_general['base_amount'];
$change_fee = $vault_general['change_fee']; //¤âÄò¶O
$open = isset($HTTP_POST_VARS['open']);
$close = isset($HTTP_POST_VARS['close']);
$deposit = isset($HTTP_POST_VARS['deposit']);
$withdraw = isset($HTTP_POST_VARS['withdraw']);
$loan = isset($HTTP_POST_VARS['loan']);
$loan_back = isset($HTTP_POST_VARS['loan_back']);
$preferences = isset($HTTP_POST_VARS['preferences']);
$list = isset($HTTP_POST_VARS['list']);
$stock_exchange = isset($HTTP_POST_VARS['stock_exchange']);
$new_stock_exchange = isset($HTTP_POST_VARS['new_stock_exchange']);
$deposit_sum = intval($HTTP_POST_VARS['deposit_sum']);
$withdraw_sum = intval($HTTP_POST_VARS['withdraw_sum']);
$due_off = isset($HTTP_POST_VARS['due_payoff']);
$loan_sum = intval($HTTP_POST_VARS['loan_sum']);
$exchange_submit = isset($HTTP_POST_VARS['exchange_submit']);
$prefs = isset($HTTP_POST_VARS['prefs']);
$prefs_submit = isset($HTTP_POST_VARS['prefs_submit']);
if(isset($HTTP_POST_VARS['from']))
{
$stock_exchange = ($HTTP_POST_VARS['from'] == 'pm') ? TRUE : FALSE;
$list = ($HTTP_POST_VARS['from'] == 'list') ? TRUE : FALSE;
}
else if(isset($HTTP_GET_VARS['from']))
{
$stock_exchange = ($HTTP_GET_VARS['from'] == 'pm') ? TRUE : FALSE;
$list = ($HTTP_GET_VARS['from'] == 'list') ? TRUE : FALSE;
}
if ( $due_off )
{
$due = intval($HTTP_POST_VARS['due']);
if ( $due > $userdata['user_points'] )
{
vault_previous( Vault_loan_lack_points , vault , '' , '');
}
$sql = "UPDATE " . USERS_TABLE ."
SET user_points = user_points - $due
WHERE user_id = $user_id";
if( !$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not obtain accounts information', "", __LINE__, __FILE__, $sql);
}
$sql = "UPDATE " . VAULT_USERS_TABLE ."
SET loan_sum = 0 ,
loan_time = 0
WHERE owner_id = $user_id";
if( !$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not obtain accounts information', "", __LINE__, __FILE__, $sql);
}
$sql = "DELETE FROM " . VAULT_BLACKLIST_TABLE . "
WHERE user_id = " . $user_id;
$result = $db->sql_query($sql);
if( !$result )
{
message_die(GENERAL_ERROR, "Couldn't delete user into black list", "", __LINE__, __FILE__, $sql);
}
vault_previous( Vault_due_ok, vault , '' , '');
}
$sql = "SELECT * FROM ".VAULT_USERS_TABLE."
WHERE owner_id = $user_id ";
if ( !($result = $db->sql_query($sql)) )
{
message_die(CRITICAL_ERROR, 'Error Getting Vault Users!');
}
$vault = $db->sql_fetchrow($result);
if ( $vault['loan_time'] != 0 )
{
if ( ($vault_general['loan_interests_time'] - ( time() - $vault['loan_time'])) < 0 )
{
$loan = $vault['loan_sum'] * ( 1 + ( $vault_general['loan_interests'] / 100 ));
$due = ceil($loan * ( 1 + ( $vault_general['loan_interests'] / 100 )));
$sql = "SELECT * FROM " . VAULT_BLACKLIST_TABLE . "
WHERE user_id = ".$user_id;
if (!$result = $db->sql_query($sql))
{
message_die(CRITICAL_ERROR, 'Error Getting Vault black list!');
}
$black = $db->sql_fetchrow($result);
if ( !(is_numeric($black['user_due'])) )
{
$sql = "INSERT INTO " . VAULT_BLACKLIST_TABLE . " ( user_id , user_due ) VALUES ( $user_id , $due ) ";
if (!$result = $db->sql_query($sql))
{
message_die(CRITICAL_ERROR, 'Error Getting Vault black list!');
}
}
else
{
$due = $black['user_due'];
}
$is_black = TRUE ;
$template->assign_block_vars( 'blacked' , array());
}
}
if ( $is_black != TRUE )
{
if ( !(is_numeric($vault['account_id'])) )
{
$template->assign_block_vars( 'no_account' , array());
}
else
{
$template->assign_block_vars( 'account' , array());
if ( $vault_general['vault_loan_enable'] )
{
$template->assign_block_vars( 'account.loan_authed' , array());
if ( $vault['loan_sum'] != 0 )
{
$template->assign_block_vars( 'account.loan_authed.active_loan' , array());
}
else if ( $userdata['user_posts'] < $vault_general['loan_requirements'] )
{
$template->assign_block_vars( 'account.loan_authed.no_loan' , array());
}
else
{
$template->assign_block_vars( 'account.loan_authed.loan' , array());
}
}
if ( $board_config['stock_use'] )
{
$template->assign_block_vars( 'account.stock' , array());
}
}
}
$account_time = time() - $vault['account_time'];
if ( $account_time > $vault_general['interests_time'] )
{
$interests_mult = floor ( $account_time / $vault_general['interests_time']);
$mult = 1 + ( $vault_general['interests_rate'] / 100 );
$puissance = 1 + (( $vault_general['interests_rate'] / 100 ) * $interests_mult);
$account_interests = floor ( $puissance * $vault['account_sum'] );
$sup_time = floor( $vault['account_time'] + ( $vault_general['interests_time'] * $interests_mult ));
$sql = "UPDATE " . VAULT_USERS_TABLE ."
SET account_sum = $account_interests ,
account_time = ".$sup_time."
WHERE owner_id = $user_id";
if( !$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not obtain accounts information', "", __LINE__, __FILE__, $sql);
}
}
if ( $open )
{
$sql = "SELECT account_id FROM " . VAULT_USERS_TABLE ."
ORDER BY account_id
DESC LIMIT 1";
if( !$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not obtain accounts information', "", __LINE__, __FILE__, $sql);
}
$max = $db->sql_fetchrow($result);
$account_id = $max['account_id'] + 1 ;
$sql = "INSERT INTO " . VAULT_USERS_TABLE . " ( owner_id , account_id , account_sum , account_time , loan_sum , loan_time)
VALUES ( $user_id , $account_id , $base_amount , '" . time() . "' , 0 , 0 )";
$result = $db->sql_query($sql);
if( !$result )
{
message_die(GENERAL_ERROR, "Couldn't insert new account", "", __LINE__, __FILE__, $sql);
}
vault_previous( Vault_account_opened , vault , '' , '');
}
if ( $close )
{
$loan = ( $vault['loan_sum'] > 0 ) ? ( $vault['loan_sum'] * ( 1 + ( $vault_general['loan_interests'] / 100 ))) : 0;
$due = ( $vault['account_sum'] - $loan - $base_amount );
$sql = "DELETE FROM " . VAULT_USERS_TABLE . "
WHERE owner_id = $user_id";
if( !$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not obtain accounts information', "", __LINE__, __FILE__, $sql);
}
$sql = "UPDATE " . USERS_TABLE . "
SET user_points = user_points + $due
WHERE user_id = $user_id ";
if( !$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not obtain accounts information', "", __LINE__, __FILE__, $sql);
}
$sql = "SELECT * FROM " . VAULT_EXCHANGE_USERS_TABLE . "
WHERE user_id = $user_id ";
$result = $db->sql_query($sql);
if( !$result )
{
message_die(GENERAL_ERROR, "Couldn't delete stock", "", __LINE__, __FILE__, $sql);
}
$users = $db->sql_fetchrowset($result);
for ( $i = 0 ; $i < count ( $users ) ; $i ++ )
{
$ssql = "SELECT stock_price FROM " . VAULT_EXCHANGE_TABLE . "
WHERE stock_id = " . $users[$i]['stock_id'];
$sresult = $db->sql_query($ssql);
if( !$sresult )
{
message_die(GENERAL_ERROR, "Couldn't delete stock", "", __LINE__, __FILE__, $ssql);
}
$prize = $db->sql_fetchrow($sresult);
$price = $prize['stock_price'] * $users[$i]['stock_amount'];
$usql = "UPDATE " . USERS_TABLE . "
SET user_points = user_points + $price
WHERE user_id = ".$users[$i]['user_id'];
$uresult = $db->sql_query($usql);
if( !$uresult )
{
message_die(GENERAL_ERROR, "Couldn't delete stock", "", __LINE__, __FILE__, $usql);
}
}
$sql = "DELETE FROM " . VAULT_EXCHANGE_USERS_TABLE . "
WHERE user_id = " . $user_id;
$result = $db->sql_query($sql);
if( !$result )
{
message_die(GENERAL_ERROR, "Couldn't delete stock", "", __LINE__, __FILE__, $sql);
}
vault_previous( Vault_account_closed , vault , '' , '');
}
if ( $exchange_submit )
{
$sql = "SELECT *
FROM " . VAULT_EXCHANGE_TABLE ."
ORDER BY stock_id
DESC LIMIT 1";
$result = $db->sql_query($sql);
if( !$result )
{
message_die(GENERAL_ERROR, 'µLªk¨ú±o¤½¥q¸ê®Æ', "", __LINE__, __FILE__, $sql);
}
$stock_data = $db->sql_fetchrow($result);
$max = $stock_data['stock_id'];
for ($i=0; $i <= $max; $i++)
{
$input = 'buy_item' . $i;
$$input = intval($HTTP_POST_VARS[$input]);
$input2 = 'sell_item' . $i;
$$input2 = intval($HTTP_POST_VARS[$input2]);
}
$sql = "SELECT stock_total , stock_price , stock_id , chairman FROM " . VAULT_EXCHANGE_TABLE ."
ORDER BY stock_id";
$result = $db->sql_query($sql);
if( !$result )
{
message_die(GENERAL_ERROR, 'Could not obtain items pets information', "", __LINE__, __FILE__, $sql);
}
$items = $db->sql_fetchrowset($result);
for ( $i = 0 ; $i < count($items) ; $i ++ )
{
$price = 0;
$a = $items[$i]['stock_id'] ;
$buys = 'buy_item'.$items[$i]['stock_id'].'';
$buy = $$buys;
$sells = 'sell_item'.$items[$i]['stock_id'].'';
$sell = $$sells;
$price = ( ( $buy - $sell ) * $items[$i]['stock_price'] );
$change_fee_price = abs(ceil($change_fee * ($price / 100))); // ÁʶRª÷ÃB¤§¤âÄò¶O(¨ú³Ì¤p¥¿¾ã¼Æ)
$ssql = "SELECT stock_amount FROM " . VAULT_EXCHANGE_USERS_TABLE ."
WHERE stock_id = ".$items[$i]['stock_id']."
AND user_id = ".$user_id;
$sresult = $db->sql_query($ssql);
if( !$sresult )
{
message_die(GENERAL_ERROR, 'Could not obtain shares information', "", __LINE__, __FILE__, $ssql);
}
$user_items = $db->sql_fetchrow($sresult);
if ( (( $sell - $buy ) > $user_items['stock_amount'] && is_numeric($user_items['stock_amount'])) || ( !(is_numeric($user_items['stock_amount'])) && (( $buy - $sell ) < 0) ) )
{
vault_previous( Vault_stock_lack , vault , '' , '');
}
if ( ($price + $change_fee_price) > $userdata['user_points'])
{
vault_previous( Vault_points_lack , vault , '' , '');
}
if ( $items[$i]['stock_total'] < $buy ) // pºâ¬O§_ÁÙ¦³ªÑ²¼
{
vault_previous( Vault_stock_total_lack , vault , '' , '');
}
else
{
$sql = "UPDATE " . USERS_TABLE ."
SET user_points = user_points - ($price + $change_fee_price)
WHERE user_id = $user_id";
if( !$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'µLªk§ó·s·|ûÂI¼Æ', "", __LINE__, __FILE__, $sql);
}
}
$userdata['user_points'] = $userdata['user_points'] - $price;
$prize = $buy - $sell;
if ( is_numeric($user_items['stock_amount']) && $prize != 0 )
{
$rsql = "UPDATE " . VAULT_EXCHANGE_USERS_TABLE ."
SET stock_amount = stock_amount + $prize,
stock_price = ".$items[$i]['stock_price']."
WHERE user_id = $user_id
AND stock_id = ".$items[$i]['stock_id'];
if( !$db->sql_query($rsql))
{
message_die(GENERAL_ERROR, 'µLªk§ó·s·|ûªÑ²¼', "", __LINE__, __FILE__, $rsql);
}
}
else if ( !(is_numeric($user_items['stock_amount'])) && $prize != 0 )
{
$rsql = "INSERT INTO " . VAULT_EXCHANGE_USERS_TABLE ."
( stock_id , user_id , stock_amount , stock_price)
VALUES ( ".$items[$i]['stock_id']." , $user_id , $prize ,".$items[$i]['stock_price'].")";
if( !$db->sql_query($rsql))
{
message_die(GENERAL_ERROR, 'µLªk§ó·s·|ûªÑ²¼', "", __LINE__, __FILE__, $rsql);
}
}
if ( $price != 0 ) // Åã¥Ü¤âÄò¶Oµe±
{
echo "¥æ©öª÷ÃB¬° " .$price. " !! (¤âÄò¶O: " .$change_fee_price. ")<br />";
}
$usql = "SELECT u.user_id, s.*
FROM " . USERS_TABLE . " u , " . VAULT_EXCHANGE_USERS_TABLE . " s
WHERE u.user_id = s.user_id
AND s.stock_id = ".$items[$i]['stock_id']."
ORDER BY s.stock_amount DESC
LIMIT 1"; // ¨ú±o¸³¨Æªø¦W³æ
$uresult = $db->sql_query($usql);
if( !$uresult )
{
message_die(GENERAL_ERROR, "µLªk¨ú±o¸³¨Æªø¦W³æ", "", __LINE__, __FILE__, $usql);
}
$chairman = $db->sql_fetchrow($uresult);
$tsql = "UPDATE " . VAULT_EXCHANGE_TABLE ."
SET stock_total = ".$items[$i]['stock_total']." - $prize,
chairman = ".$chairman['user_id']."
WHERE stock_id = ".$items[$i]['stock_id']; // §ó·sªÑ²¼Á`¼Æ¤Î¸³¨Æªø¦W³æ
if( !$db->sql_query($tsql))
{
message_die(GENERAL_ERROR, 'µLªk§ó·sªÑ²¼Á`¼Æ¤Î¸³¨Æªø¦W³æ', "", __LINE__, __FILE__, $tsql);
}
}
$stock_exchange = TRUE;
}
if ( $stock_exchange )
{
$template->set_filenames(array(
'body' => 'vault_exchange_body.tpl')
);
// ¨ú±oªÑ¥«¦Cªí
$sql = "SELECT *
FROM ". VAULT_EXCHANGE_TABLE ."
ORDER BY stock_id ";
$result = $db->sql_query($sql);
if( !$result )
{
message_die(GENERAL_ERROR, "Couldn't obtain stock exchange from database", "", __LINE__, __FILE__, $sql);
}
$exchange = $db->sql_fetchrowset($result);
for($i = 0; $i < count($exchange); $i++)
{
$a = $exchange[$i]['stock_id'];
$buy_item[$a] = "";
$buy_item[$a] = '<select name="buy_item'.$a.'" >';
for( $k = 0; $k < $num_items; $k++ )
{
$buy_item[$a] .= '<option value="' . $k . '" >' . $k . '</option>';
}
$buy_item[$a] .= '</select>';
$sell_item[$a] = "";
$sell_item[$a] = '<select name="sell_item'.$a.'" >';
for( $l = 0; $l < $num_items; $l++ )
{
$sell_item[$a] .= '<option value="' . $l . '" >' . $l . '</option>';
}
$sell_item[$a] .= '</select>';
$row_class = ( !($i % 2) ) ? $theme['td_class1'] : $theme['td_class2'];
// ¨ú±oªÑ²¼«ù¦³¤H²M³æ
$sql = "SELECT *
FROM " . VAULT_EXCHANGE_USERS_TABLE . "
WHERE stock_id = ".$exchange[$i]['stock_id']."
AND user_id = ".$user_id;
$result = $db->sql_query($sql);
if( !$result )
{
message_die(GENERAL_ERROR, "Couldn't obtain stock exchange from database", "", __LINE__, __FILE__, $sql);
}
$owned = $db->sql_fetchrow($result);
$actions_owned = $owned['stock_amount'];
$actions_owned_price = $owned['stock_price'];
if ( !$actions_owned )
{
$actions_owned = $lang['Vault_exchange_none'];
$actions_owned_price = $lang['Vault_exchange_none'];
}
// §ïÅܪѻùÃC¦â
if ( $exchange[$i]['stock_price'] > $exchange[$i]['stock_previous_price'] )
{
$stock_price_color = "<font color=red><b>". $exchange[$i]['stock_price'] ."</b></font>";
}
else if ( $exchange[$i]['stock_price'] < $exchange[$i]['stock_previous_price'] )
{
$stock_price_color = "<font color=green><b>". $exchange[$i]['stock_price'] ."</b></font>";
}
else
{
$stock_price_color = "<font color=gray><b>". $exchange[$i]['stock_price'] ."</b></font>";
}
// ¨ú±o¸³¨Æªø¦W³æ
$usql = "SELECT u.username, u.user_id, s.*
FROM " . USERS_TABLE . " u , " . VAULT_EXCHANGE_USERS_TABLE . " s
WHERE u.user_id = s.user_id
AND s.stock_id = ".$exchange[$i]['stock_id']."
ORDER BY s.stock_amount DESC
LIMIT 1";
$uresult = $db->sql_query($usql);
if( !$uresult )
{
message_die(GENERAL_ERROR, "µLªk¨ú±o¦W³æ", "", __LINE__, __FILE__, $usql);
}
$chairman = $db->sql_fetchrow($uresult);
if ( $chairman['stock_amount'] == 0 )
{
$chairman['username'] = $lang['Vault_exchange_none'];
}
if ( $exchange[$i]['chairman'] == $user_id ) // §PÂ_¬O§_¾Ö¦³×§ïÅv
{
$stock_control = append_sid("<a href=vault_edit.".$phpEx.">".$lang['Vault_exchange_control']."</a>");
}
else
{
$stock_control = '';
}
// ¨ú±o¤½¥q¥«È
$vsql = "SELECT *
FROM " . VAULT_EXCHANGE_USERS_TABLE . "
WHERE stock_id = ".$exchange[$i]['stock_id']."
AND stock_amount > 0";
if( !($vresult = $db->sql_query($vsql)) )
{
message_die(GENERAL_ERROR, "µLªk¨ú±o¤½¥q¥«È", "", __LINE__, __FILE__, $vsql);
}
$capital = $db->sql_fetchrowset($vresult);
$stock_capital = 0;
$stock_price = $exchange[$i]['stock_price'];
for($v = 0; $v < count($capital); $v++)
{
$stock_capital += $capital[$v]['stock_amount'] * $stock_price;
}
// ¤j½L«ü¼Æ
$stock_index += $exchange[$i]['stock_price'];
$template->assign_block_vars("exchange", array(
"ROW_COLOR" => "#" . $row_color,
"ROW_CLASS" => $row_class,
"STOCK_NAME" => vault_get_lang($exchange[$i]['stock_name']),
"STOCK_DESC" => vault_get_lang($exchange[$i]['stock_desc']),
"STOCK_TOTAL" => $exchange[$i]['stock_total'], // ¨ú±oªÑ²¼¼Æ¶q
"STOCK_CHAIRMAN" => $chairman['username'], // ¨ú±o¸³¨Æªø¦W³æ
"STOCK_CAPITAL" => $stock_capital, // ¨ú±o¥«È
"STOCK_AMOUNT" => $stock_price_color,
"STOCK_PREVIOUS" => $exchange[$i]['stock_previous_price'],
"STOCK_WORST" => $exchange[$i]['stock_worst_price'],
"STOCK_BEST" => $exchange[$i]['stock_best_price'],
"STOCK_BUY" => $buy_item[$a],
"STOCK_SELL" => $sell_item[$a],
"STOCK_OWNED_PRICE" => $actions_owned_price,
"STOCK_OWNED" => $actions_owned,
"STOCK_CONTROL" => $stock_control)
);
}
$template->assign_vars(array(
'L_STOCK_EXCHANGE_ACTIONS' => $lang['Vault_exchange_actions'],
'L_STOCK_NAME' => $lang['Vault_exchange_actions_name'],
'L_STOCK_CHAIRMAN' => $lang['Vault_exchange_actions_chairman'],
'L_STOCK_DESC' => $lang['Vault_exchange_actions_desc'],
'L_STOCK_CAPITAL' => $lang['Vault_exchange_capital'],
'L_STOCK_AMOUNT' => $lang['Vault_exchange_actions_amount'],
'L_STOCK_PREVIOUS' => $lang['Vault_exchange_previous_price'],
'L_STOCK_WORST' => $lang['Vault_exchange_worst_price'],
'L_STOCK_BEST' => $lang['Vault_exchange_best_price'],
'L_STOCK_OWNED' => $lang['Vault_exchange_owned'],
'L_STOCK_BUY' => $lang['Vault_exchange_buy'],
'L_STOCK_OWNED_PRICE' => $lang['Vault_exchange_owned_price'],
'L_STOCK_SELL' => $lang['Vault_exchange_sell'],
'L_SUBMIT' => $lang['Submit'],
'L_STOCK_TOTAL' => $lang['Vault_exchange_stock_total'],
'L_STOCK_EXCHANGE_CAPITAL' => $lang['Vault_exchange_capital'], // ¥«È
'L_STOCK_INDEX' => $lang['Vault_exchange_stock_index'],
'STOCK_INDEX' => $stock_index, // ¤j½L«ü¼Æ
));
}
if ( $new_stock_exchange ) // ¶}·s¤½¥q
{
$template->set_filenames(array(
'body' => 'vault_exchange_new_body.tpl')
);
$template->assign_vars(array(
'L_STOCK_NO_MONEY' => $lang['Vault_exchange_new_no_money'],
));
}
if ( $prefs )
{
$template->set_filenames(array(
'body' => 'vault_preferences_body.tpl')
);
if ( $board_config['stock_use'] )
{
$template->assign_block_vars( 'stock' , array());
}
$template->assign_vars(array(
'L_SUBMIT' => $lang['Submit'],
'L_VAULT_ACCOUNT_PROTECT' => $lang['Vault_pref_account_protect'],
'L_VAULT_LOAN_PROTECT' => $lang['Vault_pref_loan_protect'],
'L_VAULT_NEWSLETTER' => $lang['Vault_pref_newsletter'],
'VAULT_ACCOUNT_PROTECT_CHECKED' => ( $vault['account_protect'] ? 'CHECKED' :'' ),
'VAULT_LOAN_PROTECT_CHECKED' => ( $vault['loan_protect'] ? 'CHECKED' :'' ),
'VAULT_NEWSLETTER_CHECKED' => ( $vault['newsletter'] ? 'CHECKED' :'' ),
));
}
if ( $list )
{
$template->set_filenames(array(
'body' => 'vault_list_body.tpl')
);
if ( $board_config['stock_use'] )
{
$template->assign_block_vars( 'stock' , array());
}
$start = ( isset($HTTP_GET_VARS['start']) ) ? intval($HTTP_GET_VARS['start']) : 0;
if ( isset($HTTP_GET_VARS['mode']) || isset($HTTP_POST_VARS['mode']) )
{
$mode = ( isset($HTTP_POST_VARS['mode']) ) ? htmlspecialchars($HTTP_POST_VARS['mode']) : htmlspecialchars($HTTP_GET_VARS['mode']);
}
else
{
$mode = 'username';
}
if(isset($HTTP_POST_VARS['order']))
{
$sort_order = ($HTTP_POST_VARS['order'] == 'ASC') ? 'ASC' : 'DESC';
}
else if(isset($HTTP_GET_VARS['order']))
{
$sort_order = ($HTTP_GET_VARS['order'] == 'ASC') ? 'ASC' : 'DESC';
}
else
{
$sort_order = 'ASC';
}
$mode_types_text = array( $lang['Sort_Username'], $lang['Vault_account_amount'],$lang['Vault_loan_amount']);
$mode_types = array('username', 'account', 'loan');
$select_sort_mode = '<select name="mode">';
for($i = 0; $i < count($mode_types_text); $i++)
{
$selected = ( $mode == $mode_types[$i] ) ? ' selected="selected"' : '';
$select_sort_mode .= '<option value="' . $mode_types[$i] . '"' . $selected . '>' . $mode_types_text[$i] . '</option>';
}
$select_sort_mode .= '</select>';
$select_sort_order = '<select name="order">';
if($sort_order == 'ASC')
{
$select_sort_order .= '<option value="ASC" selected="selected">' . $lang['Sort_Ascending'] . '</option><option value="DESC">' . $lang['Sort_Descending'] . '</option>';
}
else
{
$select_sort_order .= '<option value="ASC">' . $lang['Sort_Ascending'] . '</option><option value="DESC" selected="selected">' . $lang['Sort_Descending'] . '</option>';
}
$select_sort_order .= '</select>';
switch( $mode )
{
case 'username':
$order_by = "u.username $sort_order LIMIT $start, " . $board_config['topics_per_page'];
break;
case 'account':
$order_by = "v.account_sum $sort_order LIMIT $start, " . $board_config['topics_per_page'];
break;
case 'loan':
$order_by = "v.loan_sum $sort_order LIMIT $start, " . $board_config['topics_per_page'];
break;
default:
$order_by = "u.username $sort_order LIMIT $start, " . $board_config['topics_per_page'];
break;
}
$sql = "SELECT u.username, u.user_id, v.*
FROM " . USERS_TABLE . " u , " . VAULT_USERS_TABLE . " v
WHERE u.user_id = v.owner_id
AND u.user_id > 0
ORDER BY $order_by";
if( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not query users', '', __LINE__, __FILE__, $sql);
}
if ( $row = $db->sql_fetchrow($result) )
{
$i = 0;
do
{
$username = $row['username'];
$user_id = $row['user_id'];
$account_sum = ( $row['account_protect'] && $row['user_id'] != $userdata['user_id'] && $userdata['user_level'] != ADMIN ) ? $lang['Vault_confidential'] : $row['account_sum'];
$row['loan_sum'] = ( $row['loan_sum'] != 0 ) ? $row['loan_sum'] : $lang['Vault_loan_none'];
$loan_sum = ( $row['loan_protect'] && $row['user_id'] != $userdata['user_id'] && $userdata['user_level'] != ADMIN ) ? $lang['Vault_confidential'] : $row['loan_sum'];
$temp_url = append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=$user_id");
$profile_img = '<a href="' . $temp_url . '"><img src="' . $images['icon_profile'] . '" alt="' . $lang['Read_profile'] . '" title="' . $lang['Read_profile'] . '" border="0" /></a>';
$profile = '<a href="' . $temp_url . '">' . $lang['Read_profile'] . '</a>';
$row_color = ( !($i % 2) ) ? $theme['td_color1'] : $theme['td_color2'];
$row_class = ( !($i % 2) ) ? $theme['td_class1'] : $theme['td_class2'];
$template->assign_block_vars('vault_users', array(
'ROW_NUMBER' => $i + ( $HTTP_GET_VARS['start'] + 1 ),
'ROW_COLOR' => '#' . $row_color,
'ROW_CLASS' => $row_class,
'USERNAME' => $username ,
'ACCOUNT' => $account_sum ,
'LOAN' => $loan_sum,
'PROFILE_IMG' => $profile_img,
'PROFILE' => $profile,
'U_VIEWPROFILE' => append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=$user_id"))
);
$i++;
}
while ( $row = $db->sql_fetchrow($result) );
}
$sql = "SELECT count(*) AS total FROM " . VAULT_USERS_TABLE;
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Error getting total users', '', __LINE__, __FILE__, $sql);
}
if ( $total = $db->sql_fetchrow($result) )
{
$total_members = $total['total'];
$pagination = generate_pagination("vault.$phpEx?from=list&mode=$mode&order=$sort_order", $total_members, $board_config['topics_per_page'], $start). ' ';
}
$template->assign_vars(array(
'L_SUBMIT' => $lang['Submit'],
'L_ON_ACCOUNT' => $lang['Vault_account_amount'],
'L_ON_LOAN' => $lang['Vault_loan_amount'],
'L_SELECT_SORT_METHOD' => $lang['Select_sort_method'],
'S_MODE_SELECT' => $select_sort_mode,
'S_ORDER_SELECT' => $select_sort_order,
'PAGINATION' => $pagination,
'PAGE_NUMBER' => sprintf($lang['Page_of'], ( floor( $start / $board_config['topics_per_page'] ) + 1 ), ceil( $total_members / $board_config['topics_per_page'] )),
'L_GOTO_PAGE' => $lang['Goto_page'],
));
}
if ( $prefs_submit )
{
$account_protect = intval($HTTP_POST_VARS['account_protect']);
$loan_protect = intval($HTTP_POST_VARS['loan_protect']);
$newsletter = intval($HTTP_POST_VARS['newsletter']);
$sql= "UPDATE ". VAULT_USERS_TABLE . "
SET account_protect = $account_protect ,
loan_protect = $loan_protect ,
newsletter = $newsletter
WHERE owner_id = ".$user_id;
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, $lang['Vault_update_error'] , "", __LINE__, __FILE__, $sql);
}
vault_previous( Vault_prefs_ok , vault , '' , '');
}
if ( $deposit && $deposit_sum > 0 )
{
if ( $deposit_sum > $userdata['user_points'] )
{
message_die( GENERAL_MESSAGE,$lang['Vault_deposit_lack'].'<br /><br />'.sprintf($lang['Vault_return'] , "<a href="" . append_sid("vault.$phpEx") . "">", "</a>"));
}
$sql = "UPDATE " . VAULT_USERS_TABLE ."
SET account_sum = account_sum + $deposit_sum
WHERE owner_id = $user_id";
if( !$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not obtain accounts information', "", __LINE__, __FILE__, $sql);
}
$sql = "UPDATE " . USERS_TABLE ."
SET user_points = user_points - $deposit_sum
WHERE user_id = $user_id";
if( !$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not obtain accounts information', "", __LINE__, __FILE__, $sql);
}
vault_previous( Vault_account_ok , vault , '' , '');
}
if ( $withdraw && $withdraw_sum > 0 )
{
if ( $withdraw_sum > $vault['account_sum'] )
{
vault_previous( Vault_withdraw_lack , vault , '' , '');
}
$sql = "UPDATE " . VAULT_USERS_TABLE ."
SET account_sum = account_sum - $withdraw_sum
WHERE owner_id = $user_id";
if( !$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not obtain accounts information', "", __LINE__, __FILE__, $sql);
}
$sql = "UPDATE " . USERS_TABLE ."
SET user_points = user_points + $withdraw_sum
WHERE user_id = $user_id";
if( !$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not obtain accounts information', "", __LINE__, __FILE__, $sql);
}
vault_previous( Vault_account_ok , vault , '' , '');
}
if ( $loan && $loan_sum > 0 )
{
if ( $vault['loan_sum'] != 0 )
{
vault_previous( Vault_loan_no_double , vault , '' , '');
}
if ( $userdata['user_posts'] < $vault_general['loan_requirements'] || $vault['loan_sum'] != 0 )
{
$message = $lang['Vault_loan_no_explain'].$vault_general['loan_requirements'].$lang['Posts'];
$message .= '<br /><br />'.sprintf($lang['Vault_return'] , "<a href="" . append_sid("vault.$phpEx") . "">", "</a>");
message_die( GENERAL_MESSAGE,$message );
}
if ( $loan_sum > $vault_general['loan_max_sum'] || $loan_sum < 0 )
{
vault_previous( Vault_loan_no_such , vault , '' , '');
}
$sql = "UPDATE " . USERS_TABLE ."
SET user_points = user_points + $loan_sum
WHERE user_id = $user_id";
if( !$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not obtain accounts information', "", __LINE__, __FILE__, $sql);
}
$sql = "UPDATE " . VAULT_USERS_TABLE ."
SET loan_sum = $loan_sum ,
loan_time = ".time()."
WHERE owner_id = $user_id";
if( !$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not obtain accounts information', "", __LINE__, __FILE__, $sql);
}
$message = $lang['Vault_loan_ok'].$loan_sum.' '.$board_config['points_name'];
$message .= '<br /><br />'.sprintf($lang['Vault_return'] , "<a href="" . append_sid("vault.$phpEx") . "">", "</a>");
message_die( GENERAL_MESSAGE,$message );
}
if ( $loan_back )
{
$pay_off = $vault['loan_sum'] * ( 1 + ( $vault_general['loan_interests'] / 100 ));
if ( $pay_off > $userdata['user_points'] )
{
vault_previous( Vault_loan_lack_points , vault , '' , '');
}
$sql = "UPDATE " . USERS_TABLE ."
SET user_points = user_points - $pay_off
WHERE user_id = $user_id";
if( !$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not obtain accounts information', "", __LINE__, __FILE__, $sql);
}
$sql = "UPDATE " . VAULT_USERS_TABLE ."
SET loan_sum = 0,
loan_time = 0
WHERE owner_id = $user_id";
if( !$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not obtain accounts information', "", __LINE__, __FILE__, $sql);
}
vault_previous( Vault_loan_pay_off_ok , vault , '' , '');
}
$sql = "SELECT * FROM ".VAULT_USERS_TABLE;
if ( !($result = $db->sql_query($sql)) )
{
message_die(CRITICAL_ERROR, 'Error Getting Vault Users!');
}
$vault_stats = $db->sql_fetchrowset($result);
$opened_accounts = 0;
$total_deposit = 0;
for ( $i = 0 ; $i < count($vault_stats) ; $i++ )
{
$opened_accounts = $opened_accounts +1;
$total_deposit = $total_deposit + $vault_stats[$i]['account_sum'];
}
$sql = "SELECT * FROM ".VAULT_USERS_TABLE."
WHERE owner_id = $user_id ";
if ( !($result = $db->sql_query($sql)) )
{
message_die(CRITICAL_ERROR, 'Error Getting Vault Users!');
}
$vault = $db->sql_fetchrow($result);
$remaining_time = $vault_general['loan_interests_time'] - ( time() - $vault['loan_time']);
$remaining_date = $vault['loan_time'] + $vault_general['loan_interests_time'];
$loan = $vault['loan_sum'] * ( 1 + ( $vault_general['loan_interests'] / 100 ));
$template->assign_vars(array(
'POINTS' => $userdata['user_points'],
'ACCOUNTS' => $opened_accounts,
'TOTAL_DEPOSIT' => $total_deposit,
'ACCOUNT_SUM' => $vault['account_sum'],
'INTEREST_TIME' => vault_make_time($vault_general['interests_time']),
'INTEREST_RATE' => $vault_general['interests_rate'],
'POSTS_REQ' => $vault_general['loan_requirements'],
'LOAN_RATE' => $vault_general['loan_interests'],
'LOAN_TIME' => vault_make_time($vault_general['loan_interests_time']),
'LOAN_MAX_SUM' => $vault_general['loan_max_sum'],
'LOAN_SUM' => $vault['loan_sum'],
'LOAN_REMAINING_TIME' => vault_make_time($remaining_time),
'LOAN_REMAINING_DATE' => create_date($board_config['default_dateformat'], $remaining_date, $board_config['board_timezone']),
'LOAN_LOAN' => $loan,
'DUE' => $due,
'L_OTHERS' => $lang['Vault_others'],
'L_PREFERENCES' => $lang['Vault_preferences'],
'L_LIST' => $lang['Vault_list'],
'L_EXCHANGE_NEW' => $lang['Vault_exchange_new'],
'L_STOCK_EXCHANGE' => $lang['Vault_stock_exchange'],
'L_LOAN_SUM' => $lang['Vault_loan_sum'],
'L_LOAN_REMAINING_TIME' => $lang['Vault_loan_remaining_time'],
'L_LOAN_REMAINING_DATE' => $lang['Vault_loan_remaining_date'],
'L_LOAN_LOAN' => $lang['Vault_loan_loan'],
'L_LOAN_BACK' => $lang['Vault_loan_back'],
'L_LOAN_ACTIVE' => $lang['Vault_loan_active'],
'L_LOAN_RATE' => $lang['Vault_loan_rate'],
'L_LOAN_TIME' => $lang['Vault_loan_time'],
'L_LOAN_MAX_SUM' => $lang['Vault_loan_max_sum'],
'L_ACCOUNT_LOAN' => $lang['Vault_loan_make'],
'L_LOAN' => $lang['Vault_loan_action'],
'L_POSTS_REQ' => $lang['Posts'],
'L_NO_LOAN_EXPLAIN' => $lang['Vault_loan_no_explain'],
'L_INTEREST_TIME' => $lang['Vault_interests_time'],
'L_LOAN_INFORMATIONS' => $lang['Vault_loan_informations'],
'L_INTEREST_RATE' => $lang['Vault_interests_rate'],
'L_ACCOUNT_DEPOSIT' => $lang['Vault_account_deposit'],
'L_DEPOSIT' => $lang['Vault_deposit'],
'L_ACCOUNT_WITHDRAW' => $lang['Vault_account_withdraw'],
'L_WITHDRAW' => $lang['Vault_withdraw'],
'L_PERSONAL_INFORMATIONS'=> $lang['Vault_user_informations'],
'L_ACCOUNT_INFORMATIONS' => $lang['Vault_account_informations'],
'L_OPENED_ACCOUNTS' => $lang['Vault_opened_accounts'],
'L_TOTAL_DEPOSIT' => $lang['Vault_accounts_sum'],
'L_OWNER_POINTS' => $lang['Vault_user_points'],
'L_POINTS' => $board_config['points_name'],
'L_PUBLIC_TITLE' => $board_config['vault_name'],
'L_NO_ACCOUNT' => $lang['Vault_no_account'],
'L_ACCOUNT' => $lang['Vault_account'],
'L_OPEN_ACCOUNT' => $lang['Vault_open_account'],
'L_CLOSE_ACCOUNT' => $lang['Vault_close_account'],
'L_BLACK_LISTED' => $lang['Vault_blacklist'],
'L_BLACK_LISTED_EXPLAIN' => $lang['Vault_blacklist_explain'],
'L_BLACK_LISTED_DUE' => $lang['Vault_blacklist_due'],
'L_DUE_PAYOFF' => $lang['Vault_blacklist_due_payoff'],
'S_VAULT_ACTION' => append_sid("vault.$phpEx"),
));
$template->pparse('body');
include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
?>您貼的檔案, 不過是該外掛的原始檔;squared 寫:抱歉師傅們 資料都補上了 請問可看出那裡有問題嗎
難道說, 您都沒有做過任何的修改嗎?
如果, 以您原主題內容 (錯誤訊息) 看來,
那麼, 您至少是有參考這個文章的修改才對.
http://phpbb-tw.net/phpbb/viewtopic.php?t=26305
但是, 您卻只是把原始檔案 (隨便轉個碼後) 貼出而已.
這種態度實在是不對!
您不能在自己有修改過外掛的原始碼, 而出現問題後, 回頭說這個外掛有 'bug'.
抱歉! 鎖定此主題.

