Kommazahlen auf Formular in mySQL Datenbank bringen

Hallo zusammen,

aus einem Formular soll eine Zahl mit Komma als Dezimaltrennzeichen und Punkt aus Tausendertrennzeichen in eine mySQL Datenbank gespeichert werden. Die Spalte für den Wert ist als Decimal(11,2) angelegt. Bei der Zahl muss zuerst das Komma durch einen Punkt ersetzt werden und der Punkt gelöscht werden, damit die Speicherung funktioniert.

Ich mache das bisher über den DB Befehl REPLACE, den ich direkt in den INSERT bzw. UPDATE Befehl mit einbinde.

$mysqli->query("INSERT INTO … REPLACE(REPLACE($_POST[‚zahl‘], ‚.‘ , ‚‘), ‚,‘ , ‚.‘))

Das geht natürlich auch über PHP. Welchen weg nehmt ihr?

Gruß

Hallo Alex,

ich persöhnlich bevorzuge das über php zu machen, da man dort Zwischenergebnisse überprüfen kann.
Mit PHP kann man das z.B. mit strtr erledigen.
Was jetzt die bessere Methode ist, in einer 11-Stelligen Fließkomma-Zahl die Punkte und Kommas zu ersetzen, ist wohl jedem selbst überlassen… vom Zeitaufwand sollte es da kaum messbare Unterschiede geben…

Allerdings solltest du niemals POST oder GET Werte direkt in mysql-querys einbinden. Eine eigene POST-Anfrage lässt sich in jedem Browser schnell erstellen und der betreffende Teil soweit abgeändert werden, dass Benutzerdaten ausgelesen werden oder man dir deine Datenbank zerhaut.
Abhilfe schafft PHP’s mysql_real_escape_string().
$mysqli->query("INSERT INTO … REPLACE(REPLACE(mysql_real_escape_string($_POST[‚zahl‘]), ‚.‘ , ‚‘), ‚,‘ , ‚.‘))

Hi,

das ist wirklich reine Geschmackssache. Ich würde mich aber meinem Vorredner anschließen und auch PHP nehmen, weil man sich da einfach bei der Fehlersuche leichter tut.

Bevor du deine Daten in die Datenbank schreibst, solltest du sie aber noch mal prüfen oder wenigstens mit dem schon erwähnten mysql_real_escape_string alle mysql-eigenen Zeichen unschädlich machen, damit dir keiner SQL-Befehle unterjubeln kann.

Danke!
Herzlichen Dank für das Feedback!

Als Ergänzung. Über Prepared Statements lassen sich SQL-Injections auch verhindern.

Gruß

ich verwende entweder number_format oder money_format.
Aber ich gehe grundsätzlich vom englischen Format mit Punkt als Dezimaltrennzeichen aus.
Ansonsten musst du halt mit str_replace ran.
Aber auf jeden Fall mit PHP

Hi,

aus einem Formular soll eine Zahl mit Komma als
Dezimaltrennzeichen und Punkt aus Tausendertrennzeichen in
eine mySQL Datenbank gespeichert werden

aus meiner Erfahrung gibt kaum jemand einen Punkt als Tausendertrennzeichen ein und ich würde in PHP eine Plausibilitätsprüfung vornehmen bzgl. Punkte und Kommata.

Gruß
Ingo