Verarbeitung von Kommazahlen in PHP und mysql

Hallo zusammen,

hab’ ein großes Problem bei der Weiterverarbeitung von Kommazahlen. Es soll ein Eurobetrag in mysql gespeichert werden und danach mit Komma als Trennzeichen für die Cents und den Punkt als Tausendertrennzeichen wieder angezeigt werden.

Hier der Teil des Quelltextes, der die Probleme macht.

Im Update Befehl für die Aktualisierung der Daten


betrag = REPLACE(’{$_POST[‚betrag‘]}’, ‚,‘ , ‚.‘),

und das Textfeld im HTML/PHP-Code, das als Ausgabe dient.

… value="<?php echo number_format($vertragfeld['betrag'],2,',' , '.');?>"

Solange es Beträge unter 1000€ sind, ist alles in Ordnung, aber sobald der Betrag die 1000er Marke erreicht passiert folgendes.

1000€ eingegeben, Speichern gedrückt, 1.000,00€ werden angezeigt. Bei erneutem Speichern (auch wenn der Beitrag unverändert blieb), wird nur noch 1,00€ angezeigt.

Wahrscheinlich liegt das daran, dass durch den Replace-Befehl der Punkt bei der Ausgabe durch ein Komma ersetzt wird und darauf 1,000,00 gespeichert werden, was aber nicht geht. Und somit wird daraus nur noch 1,00€.

Was kann ich da tun?

Gruß

PHP Version 5.2.4; mysql 5.0.51a

Hi,
Du solltest das Format lediglich zur Anzeige verwenden, aber nicht speichern. Genauer noch solltest Du die Eingabe auf ein bestimmtes Format normalisieren; entweder 1000,00 oder 1000.00 oder alternativ als 100000 (cent).

Gruß
Ingo

Hi,
wenn du Punkt zu Komma machst und einen Punkt hinzubastelst, musst du es auch wieder rausnehmen.

Ungefähr so: (ungetestet)

betrag = REPLACE(REPLACE('{$\_POST['betrag']}', '.' , ''),',','.')

Das wird aber nur funktionieren solange deine Umgebung Englisch lokalisiert ist. Das zur Laufzeit eingestellten Format ist so abzurufen:

http://www.php.net/manual/de/function.localeconv.php

Das musst du im Grunde vor deiner ‚number_format‘ Funktion auswerten.

Gruss
Joey

Ich schätze mal, dass die Ausgabe „1.000,00“ in einem Eingabefeld landet … wenn Du eine solche Zahl auswerten willst, müssen die Punkte raus, bevor Du das Komma durch einen Punkt ersetzt:

str\_replace(',','.',str\_replace('.','', $\_POST['betrag']))

Moin,

speichere entweder Zahlen (int, bigint, double,…) in der db oder Text (varchar, text, longtext,…)
Eine Spalte für die Euros und eine für die Cents. Das Formatzeug hat darin nichts zu suchen. Die Ausgabeformatierung übernimmt php (number_format()).
Der gepostete Wert wird erst gespeichert, wenn er um die Formatzeichen (Komma, Punkt,…) „erleichtert“ wurde (preg_replace(), nicht ereg!!!).

Dann bist du für alle Zeiten und Regionen auf der sicheren Seite.

widecrypt

Vielen Dank!
Genauso habe ich es auch gemacht. Die anderen Beiträge sind langfristig zwar besser, aber die geschachtelte REPLACE Anweisung hat mir am meisten gefallen.

Gruß