Vault Mod: max. Anzahl von Aktien festlegen
Verfasst: Mi 17.Nov, 2010 20:24
Hi großer Meister!
Seit Wochen grübel ich über ein Problem und komme nicht weiter.
Ich will den Vault Mod (Aktien) erweitern, indem nur eine festgelegte Anzahl pro Aktie verfügbar und somit gekauft/verkauft werden kann. Dazu habe ich die entsprechende Tabelle (vault_exchange) um zwei Felder erweitert:
stock_name_max = max. Anzahl verfügbare Aktien
stock_name_max_free = noch verfügbare Aktien
Die entsprechenden Einträge darin werden beim Anlegen/Bearbeiten einer Aktie im ACP eingetragen. Das funktioniert bestens. Das Auslesen und Anzeigen dieser Werte aus der DB in der Übersicht klappt auch problemlos. Nun hänge ich daran fest, das ich es nicht hinbekomme, das beim kaufen/verkaufen einer Aktie diese beiden Werte berücksichtigt werden und das jeweilige Ergebnis in die DB eingetragen wird.
Folgender Code ist hierfür verantwortlich:
Legende:
buy_item = kaufen
sell item = verkaufen
stock_amount = Anzahl der Aktien des Users
Einige "Hiebe" auf meinen Hinterkopf wären jetzt sicher angebracht. Sei bitte so nett und versuche mich auf den richtigen Weg zu bringen.
Bye
Seit Wochen grübel ich über ein Problem und komme nicht weiter.
Ich will den Vault Mod (Aktien) erweitern, indem nur eine festgelegte Anzahl pro Aktie verfügbar und somit gekauft/verkauft werden kann. Dazu habe ich die entsprechende Tabelle (vault_exchange) um zwei Felder erweitert:
stock_name_max = max. Anzahl verfügbare Aktien
stock_name_max_free = noch verfügbare Aktien
Die entsprechenden Einträge darin werden beim Anlegen/Bearbeiten einer Aktie im ACP eingetragen. Das funktioniert bestens. Das Auslesen und Anzeigen dieser Werte aus der DB in der Übersicht klappt auch problemlos. Nun hänge ich daran fest, das ich es nicht hinbekomme, das beim kaufen/verkaufen einer Aktie diese beiden Werte berücksichtigt werden und das jeweilige Ergebnis in die DB eingetragen wird.
Folgender Code ist hierfür verantwortlich:
Code: Alles auswählen
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, 'Could not obtain stock exchange information', "", __LINE__, __FILE__, $sql);
}
$stock_data = $db->sql_fetchrow($result);
$max = $stock_data['stock_id'];
$owned = $db->sql_fetchrow($result);
for ($i=0; $i <= $max; $i++)
{
$input = 'buy_item' . $i;
$$input = doubleval($HTTP_POST_VARS[$input]);
$input2 = 'sell_item' . $i;
$$input2 = doubleval($HTTP_POST_VARS[$input2]);
}
$sql = "SELECT stock_price , stock_id 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;
$sell_price = ($sell * $items[$i]['stock_price']);
$bank_profit = round($sell_price * $stock_sell_tax/100,2);
$sell_user_profit = $sell_price - $bank_profit;
$price = ((( $buy - $sell ) * $items[$i]['stock_price'] ) + $bank_profit);
$price2 = number_format(floatval($items[$i]['stock_price']),2, ".", "");
$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 > $userdata['user_points'])
{
vault_previous( Vault_points_lack , vault , '' , '');
}
else
{
$sql = "UPDATE " . USERS_TABLE ."
SET user_points = user_points - $price
WHERE user_id = $user_id";
if( !$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not obtain update user points', "", __LINE__, __FILE__, $sql);
}
$sql = "UPDATE " . VAULT_GENERAL_TABLE ."
SET config_value = config_value + $bank_profit
WHERE config_name = 'bank_profit_sum'";
if( !$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not obtain update bank profit', "", __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 ,
price_transaction = $price2
WHERE user_id = $user_id
AND stock_id = ".$items[$i]['stock_id'];
if( !$db->sql_query($rsql))
{
message_die(GENERAL_ERROR, 'Could not update user stock 1', "", __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 , price_transaction )
VALUES ( ".$items[$i]['stock_id']." , $user_id , $prize , $price2 )";
if( !$db->sql_query($rsql))
{
message_die(GENERAL_ERROR, 'Could not update user stock 2', "", __LINE__, __FILE__, $rsql);
}
}
}
$stock_exchange = TRUE;
}
buy_item = kaufen
sell item = verkaufen
stock_amount = Anzahl der Aktien des Users
Einige "Hiebe" auf meinen Hinterkopf wären jetzt sicher angebracht. Sei bitte so nett und versuche mich auf den richtigen Weg zu bringen.
Bye