Vault Mod & Preise größer 3stellig

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 & Preise größer 3stellig

Beitrag von Dungeonwatcher »

Hi große Meister der PHP Künste! :cool:

Ich nutze seit langer Zeit den Vault Mod inkl. diverse persönlicher Erweiterungen. Letztere habe ich in diversen Foren alle dokumentiert. Bis auf ein Problem tut dieser Mod bisher alles was ich mir wünsche. Dieses eine Problem ärgert mich aber mächtig weil ich es nicht gelöst bekomme und er den Usern das schummeln erlaubt. :(
Daher mein Hilferuf hier im Forum.

Wenn der Preis einer Aktie 4stellig oder größer ist, lässt sich diese weder kaufen noch verkaufen. D.h. bis zu einem Wert von 999,99 funktioniert der Handel aber ab 1000,00 nicht mehr. Es kommt hierbei zu folgender Fehlermeldung:
Could not update user stock 2
Das betrifft den else if Bereich in folgendem Code:

Code: Alles auswählen

		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);
			}
		}
Woran kann dies liegen?

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

Re: Vault Mod & Preise größer 3stellig

Beitrag von oxpus »

Wie ist denn das Feld "stock_amount" in besagter Tabelle angelegt?
6-stellig? Oder decimal(3,2)?
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:

Re: Vault Mod & Preise größer 3stellig

Beitrag von Dungeonwatcher »

Hi! :cool:

Es ist decimal(20,0).
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: Vault Mod & Preise größer 3stellig

Beitrag von oxpus »

Das ist ein wenig unsinnig ohne Nachkommastellen, besser dann auf BIGINT(20) umstellen.
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:

Re: Vault Mod & Preise größer 3stellig

Beitrag von Dungeonwatcher »

oxpus hat geschrieben:Das ist ein wenig unsinnig ohne Nachkommastellen, besser dann auf BIGINT(20) umstellen.
Jupp, geändert. Der Fehler bleibt aber.
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: Vault Mod & Preise größer 3stellig

Beitrag von oxpus »

Füg doch mal nach

Code: Alles auswählen

            $rsql = "INSERT INTO " . VAULT_EXCHANGE_USERS_TABLE ."
            ( stock_id , user_id , stock_amount , price_transaction )
            VALUES ( ".$items[$i]['stock_id']." , $user_id , $prize , $price2 )";
ein

Code: Alles auswählen

echo $rsql
aus und poste das Ergebnis.
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:

Re: Vault Mod & Preise größer 3stellig

Beitrag von Dungeonwatcher »

Das sieht beim kaufen einer Aktie dann so aus:

Code: Alles auswählen

UPDATE phpbb_vault_exchange_users SET stock_amount = stock_amount + 1 , price_transaction = 1,009.26 WHERE user_id = 6 AND stock_id = 11
Am Tausender Trennzeichen kann es nicht liegen, denn auch eine Zahl wie 1009.26 bringt den Fehler.
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: Vault Mod & Preise größer 3stellig

Beitrag von oxpus »

Vielleicht wäre es besser, die Zahl als Ganzzahl zu speichern.
Also * 100 vor dem Speichern und / 100 nach dem Auslesen.
Dann könnte man auch mit einem Integer-Feld arbeiten.
Allerdings sollte decimal(20,2) auch gehen. Nur bringt decimal(20,0) klar entweder einen SQL-Fehler oder die Nachkommastellen werden abgeschnitten. Je nach Einstellung des DB-Servers...
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:

Re: Vault Mod & Preise größer 3stellig

Beitrag von Dungeonwatcher »

Hi! :cool:

So der Fehler ist gefunden. Ich habe mal dies

Code: Alles auswählen

UPDATE phpbb_vault_exchange_users SET stock_amount = stock_amount + 2 , price_transaction = 1,009.26 WHERE user_id = 24 AND stock_id = 10
in PHPMyAdmin ausführen lassen. Ergebnis:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '009.26 WHERE user_id = 24 AND stock_id = 10' at line 1
Ändere ich den Wert price_transaction = 1,009.26 auf 1009.26 dann funktioniert es. Schuld ist also das Komma als Tausender Trennzeichen. Nur wie kommt es dort hin? In der ganzen PHP Datei ist wenn überhaupt der Punkt als Trennzeichen definiert. Bliebe noch MySQL als Verursacher. :eek:

Wie kann ich dieses Trennzeichen verhindern?

Nachtrag:

Das Problem ist endlich gelöst. Folgende Zeile war die Schuldige:

Code: Alles auswählen

$price2 = number_format(floatval($items[$i]['stock_price']),2);
Geändert auf

Code: Alles auswählen

$price2 = number_format(floatval($items[$i]['stock_price']),2, ".", "");
und jetzt klappt es endlich. :p

THNX. :)

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

Re: Vault Mod & Preise größer 3stellig

Beitrag von oxpus »

Oder du hättest es in Hochkommas gesetzt.
Modernere Datenbankversionen können damit dann auch umgehen.
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:

Re: Vault Mod & Preise größer 3stellig

Beitrag von Dungeonwatcher »

Hmmm, das ist mir neu. Egal, ich merke es mir für's nächste Problem. :)
Antworten