Vault Mod: max. Anzahl und Verügbare Aktien berechnen?

Allgemeiner Support zum phpBB 2 Board und phpBB 2 Modifikationen
Forumsregeln
Auch wenn hier der Support für phpBB 2 weiterhin aufrecht erhalten bleibt, weisen wir darauf hin, dass das phpBB 2 nicht mehr offiziell unterstützt und weiterentwickelt wird!
Antworten
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Vault Mod: max. Anzahl und Verügbare Aktien berechnen?

Beitrag von Dungeonwatcher »

Hi! :cool:

Ich möchte das eine vom Admin festgelegte Anzahl von Aktien zur Verfügung stehen und das beim Kauf/Verkauf von Aktien diese von den Verfügbaren abgezogen/addiert werden. Die Gesamtzahl und die noch zur Verfügung stehenden Aktien sollen dem User angezeigt werden. Bisher habe ich dazu 2 neue Tabellenfelder erstellt:

Code: Alles auswählen

ALTER TABLE `phpbb_vault_exchange` ADD `stock_name_max` `stock_name_max` INT( 10 ) NOT NULL 
ALTER TABLE `phpbb_vault_exchange` ADD `stock_name_max_free` `stock_name_max_free` INT( 10 ) NOT NULL 
stock_name_max - die vom Admin festgelegte Anzahl der Aktien
stock_name_max_free - die noch verfügbaren Aktien

Im ACP habe ich für stock_name_max die Möglichkeit geschaffen einen Wert einzutragen. Dieser wird korrekt in die Tabelle übernommen und wird dem User auch entsprechend angezeigt.

Soweit so gut. Ich lese den Zahlenwert aus der Datenbank mit diesen Variablen aus:

Code: Alles auswählen

$stock_name_max = isset($lang[$exchange[$i]['stock_name_max']]) ? $lang[$exchange[$i]['stock_name_max']] : $exchange[$i]['stock_name_max'];
$stock_name_max_free = isset($lang[$exchange[$i]['stock_name_max_free']]) ? $lang[$exchange[$i]['stock_name_max_free']] : $exchange[$i]['stock_name_max_free'];
bzw.:

Code: Alles auswählen

"STOCK_NAME_MAX" => $stock_name_max),
"STOCK_NAME_MAX_FREE" => $stock_name_max_free),
Seltsamerweise werden aber alle Zahlenwerte kleiner 14 beim Auslesen so angezeigt:

Code: Alles auswählen

GMT + 13 Stunden
GMT + 13 Stunden
bzw. wenn ich die Ausgabe dann so formatiere:

Code: Alles auswählen

"STOCK_NAME_MAX" => number_format(($stock_name_max),0, ",", "."),
"STOCK_NAME_MAX_FREE" => number_format(($stock_name_max_free),0, ",", "."),
wird bei Zahlenwerten kleiner 14 nur eine 0 ausgegeben. :-?

Was läuft da falsch?

Bye
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Wie kommt es denn überhaupt, daß "GMT + 13 Stunden" angezeigt wird, anstelle einer Zahl?

Da stimmt doch schon was an der Verwendung der $lang nicht.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

Moin! :cool:

[quote="oxpus";p="87893"]Wie kommt es denn überhaupt, daß "GMT + 13 Stunden" angezeigt wird, anstelle einer Zahl?[/quote]

Wenn ich das nur wüsste. In der Tabelle steht definitiv die Zahl, welche per ACP eingetragen wurde.
Da stimmt doch schon was an der Verwendung der $lang nicht.
Hmm, ich hatte für diese neuen Tabellenzellen die Zelle für den Aktiennamen als Vorlage genommen:

Code: Alles auswählen

$template->assign_vars(array(
 'STOCK_NAME' => $stock_data['stock_name'],
 'STOCK_NAME_MAX' => $stock_data['stock_name_max'],
 'STOCK_NAME_MAX_FREE' => $stock_data['stock_name_max_free'],
bzw.:

Code: Alles auswählen

$stock_name = ( isset($HTTP_POST_VARS['stock_name']) ) ? trim($HTTP_POST_VARS['stock_name']) : trim($HTTP_GET_VARS['stock_name']);
$stock_name_max = ( isset($HTTP_POST_VARS['stock_name_max']) ) ? doubleval($HTTP_POST_VARS['stock_name_max']) : doubleval($HTTP_GET_VARS['stock_name_max']);
$stock_name_max_free = ( isset($HTTP_POST_VARS['stock_name_max_free']) ) ? doubleval($HTTP_POST_VARS['stock_name_max_free']) : doubleval($HTTP_GET_VARS['stock_name_max_free']);
$stock_data wird davor so definiert:

Code: Alles auswählen

$stock_data = $db->sql_fetchrow($result);
Zuletzt geändert von Dungeonwatcher am Mo 24.Nov, 2008 11:48, insgesamt 1-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Ja, aber es wird doch an anderer Stelle z. b. so verwendet:

Code: Alles auswählen

$lang[$exchange[$i]['stock_name_max']]
Und da, denke ich mal, kommt dann normalerweise dann GMT +/- X Stunden raus!
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

Hi! :cool:

[quote="oxpus";p="87909"]Ja, aber es wird doch an anderer Stelle z. b. so verwendet:

Code: Alles auswählen

$lang[$exchange[$i]['stock_name_max']]
Und da, denke ich mal, kommt dann normalerweise dann GMT +/- X Stunden raus![/quote]

Hmmm, das kann ich nicht nachvollziehen. Der betroffene Codeblock sieht so aus:

Code: Alles auswählen

if ( $stock_exchange )
{
	$template->set_filenames(array(
		'body' => 'vault_exchange_body.tpl')
	);

	$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] = '<input class="post" type="text" maxlength="8" size="8" name="buy_item'.$a.'" style="text-align: right;" />';

		$sell_item[$a] = "";
		$sell_item[$a] = '<input class="post" type="text" maxlength="8" size="8" name="sell_item'.$a.'" style="text-align: right;" />';
		
		$row_class = ( !($i % 2) ) ? $theme['td_class1'] : $theme['td_class2'];

		$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'];
		if ( !$actions_owned )
		{
			$actions_owned = $lang['Vault_exchange_none'];
		}

		$template->assign_block_vars("exchange", array(
			"ROW_COLOR" => "#" . $row_color,
			"ROW_CLASS" => $row_class,
			"STOCK_NAME" => vault_get_lang($exchange[$i]['stock_name']),
			"STOCK_NAME_MAX" => number_format(vault_get_lang($exchange[$i]['stock_name_max']),0, ",", "."),
			"STOCK_NAME_MAX_FREE" => number_format(vault_get_lang($exchange[$i]['stock_name_max_free']),0, ",", "."),
			"STOCK_DESC" => vault_get_lang($exchange[$i]['stock_desc']),
			"STOCK_AMOUNT" => number_format($exchange[$i]['stock_price'],2, ",", "."),
			"STOCK_PREVIOUS" => number_format($exchange[$i]['stock_previous_price'],2, ",", "."),
			"STOCK_WORST" => number_format($exchange[$i]['stock_worst_price'],2, ",", "."),
			"STOCK_BEST" => number_format($exchange[$i]['stock_best_price'],2, ",", "."),
			"STOCK_BUY" => $buy_item[$a],
			"STOCK_SELL" => $sell_item[$a],
			"STOCK_OWNED" => $actions_owned)
		);
	}
:(
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Hinter z. B.

Code: Alles auswählen

vault_get_lang($exchange[$i]['stock_name'])
verbirgt sich eine Funktion, die irgendwie den Titel der Währung anzeigt.
Wie Du in Post 5 nanntest, wird z. B. Text so formatiert:

Code: Alles auswählen

$stock_name_max = isset($lang[$exchange[$i]['stock_name_max']]) ? $lang[$exchange[$i]['stock_name_max']] : $exchange[$i]['stock_name_max'];
Gerade der Punkt $lang[$exchange[$i]['stock_name_max']] bedeutet nichts anderes, als die Verwendung einer der nachfolgenden, in der lang_main.php befindlichen Sprachvariablen:

Code: Alles auswählen

$lang['-12'] = 'GMT - 12 Stunden';
$lang['-11'] = 'GMT - 11 Stunden';
$lang['-10'] = 'GMT - 10 Stunden';
$lang['-9'] = 'GMT - 9 Stunden';
$lang['-8'] = 'GMT - 8 Stunden';
$lang['-7'] = 'GMT - 7 Stunden';
$lang['-6'] = 'GMT - 6 Stunden';
$lang['-5'] = 'GMT - 5 Stunden';
$lang['-4'] = 'GMT - 4 Stunden';
$lang['-3.5'] = 'GMT - 3.5 Stunden';
$lang['-3'] = 'GMT - 3 Stunden';
$lang['-2'] = 'GMT - 2 Stunden';
$lang['-1'] = 'GMT - 1 Stunden';
$lang['0'] = 'GMT';
$lang['1'] = (date("I")) ? "MESZ (Sommerzeit)" : "MEZ (Normalzeit)";
$lang['2'] = 'GMT + 2 Stunden';
$lang['3'] = 'GMT + 3 Stunden';
$lang['3.5'] = 'GMT + 3.5 Stunden';
$lang['4'] = 'GMT + 4 Stunden';
$lang['4.5'] = 'GMT + 4.5 Stunden';
$lang['5'] = 'GMT + 5 Stunden';
$lang['5.5'] = 'GMT + 5.5 Stunden';
$lang['6'] = 'GMT + 6 Stunden';
$lang['6.5'] = 'GMT + 6.5 Stunden';
$lang['7'] = 'GMT + 7 Stunden';
$lang['8'] = 'GMT + 8 Stunden';
$lang['9'] = 'GMT + 9 Stunden';
$lang['9.5'] = 'GMT + 9.5 Stunden';
$lang['10'] = 'GMT + 10 Stunden';
$lang['11'] = 'GMT + 11 Stunden';
$lang['12'] = 'GMT + 12 Stunden';
$lang['13'] = 'GMT + 13 Stunden';
da sich nun mal hinter $exchange[$i]['stock_name_max'] wohl Zahlen verbergen.

Da ich die MOD nun eben wirklich nicht kenne, wende Dich bitte hierzu an den Autoren.
Ich habe auch nicht nicht wirklich Zeit und Lust mich in diese MOD einzuarbeiten...
Zuletzt geändert von oxpus am So 07.Dez, 2008 16:50, insgesamt 1-mal geändert.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

Perfekt, nun hat's bei mir endlich geklingelt. ;)

Damit habe ich die Lösung wohl gefunden.

Es gibt diese Funktion, welche hierbei aufgerufen wird:

Code: Alles auswählen

function vault_get_lang($key)
{
	global $lang;

	$lang_key = isset($lang[$key]) ? $lang[$key] : $key;

	return $lang_key ;
}
Diese habe ich testweise mal so geändert:

Code: Alles auswählen

function vault_get_lang($key)
{
	global $lang1;

	$lang_key = isset($lang1[$key]) ? $lang1[$key] : $key;

	return $lang_key ;
}
Dito dann diese Zeile:

Code: Alles auswählen

$stock_name_max = isset($lang1[$exchange[$i]['stock_name_max']]) ? $lang1[$exchange[$i]['stock_name_max']] : $exchange[$i]['stock_name_max'];
Jetzt wird korrekt der Zahlenwert angezeigt. Irgendwelche Nebenwirkungen habe ich bei diversen Transaktionen nicht festgestellt. :cool:
Da ich die MOD nun eben wirklich nicht kenne, wende Dich bitte hierzu an den Autoren.
Würde ich gerne, wenn es ihn denn noch gäbe. :(
Ich habe auch nicht nicht wirklich Zeit und Lust mich in diese MOD einzuarbeiten...
Neee, sollst du auch garnicht. Was mir fehlt ist immer der winkende Zaunpfahl bzw. die sprichwörtlichen "Schläge auf den Hinterkopf..." :pfff
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Was mir fehlt ist immer der winkende Zaunpfahl bzw. die sprichwörtlichen "Schläge auf den Hinterkopf..."
Dann bin ich ja beruhigt, daß ich dennoch helfen konnte *eisbeutelrüberreicht*
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

[quote="oxpus";p="87966"]*eisbeutelrüberreicht*[/quote]

Danke... :)

Die nächste Frage steht schon im Raum.. :pfff
Antworten