Zahlenwerte überprüfen

gnuisnotunix

Mitglied
Hallo zusammen,

ich hänge gerade an folgendem Problem und hoffe dass ihr mir dabei helfen könnt:

Ich erhalte über ein Formularfeld eine Zahl. Dies kann sowohl eine Ganze Zahl sein, aber auch mit Nachkommastellen.

Mögliche Zahlen wären z.B.:

100000 // Einhunderttausend
100.000 // Einhunderttausend mit Interpunktion
100.000,00 // Einhunderttausend mit Interpunktion und 2 Nachkommastellen

Maximal dürfen es zwei Nachkommastellen sein. Diesen Wert will ich dann in eine Datenbank schreiben. Das Feld dort habe ich als double(100,2) deklariert.

Wie kann ich die übergebene Zahl nun a) auf Richtigkeit prüfen und b) wie schreib ich das dann korrekt in die Datenbank?


Meine Idee, die aber nur suboptimal funktioniert:

PHP:
if(!preg_match('~^[0-9]+(?:\.[0-9]{1,2})?$~', $zahl))
				{
				if(preg_match('~^[0-9]+(?:\,[0-9]{1,2})?$~', $zahl))
					{
					$new = split ('[,]', $zahl);
					$zahl= $new[0].".".$new[1];

$insert = mysql_query("INSERT INTO datenbank (zahlenfeld) VALUES ('".$zahl."')");
					}
				else
					{
					echo "Falsche Zahl";				}
				}
 
Hi,

bin noch phpanfaenger, aber was hälst du von folgenden Funktionen zum Prüfen $zahl:
is_int()
is_float()
is_numeric()

Gruß, phpanfaenger
 
Werte die über ein Formular übergeben werden sind immer strings. Daher helfen diese Funktionen nicht weiter.

Mit ctype_digit() könnte ich prüfen ob es Ganze Zahlen sind, aber das wars dann auch schon...
 
Also ich hab das kürzlich so gelöst:

PHP:
strval(doubleval($_GET["zahl"])) == $_GET["zahl"] ? $fehler = 0 : $fehler = 1;

Die übergebene Zahl wird zuerst mit DOUBLEVAL in eine Nachkommezahl umgewandelt.
Dann - da POST / GET Angaben als String übergeben werden - wird das Ergebnis wieder in einen String umgewandelt und mit dem Originalwert verglichen.

PHP bzw. mySQL erwartet normalerweise eine Nachkommazahl ja im Format 1.5.
Gibt man jetzt 1,5 (Komma) ein wird diese Zahl bei der Umwandlung mit DOUBLEVAL in 1 umgewandelt. Der Vergleich trifft somit nicht zu!

Gruß Thomas
 
Erstmal würde ich den Tausendertrenner entfernen.
Dann das eventuell vorhandene Komma durch einen Punkt ersetzen, falls keiner vorhanden die Zahl richtig formatieren. Die Zahl zwanghaft als float casten und dann prüfen ob es wirklich ein float ist...

Falls das alles klappt, eintragen.
 
Die Tausendertrennpunkte und das Komma kannst du in etwa so entfernen/umwandeln:
PHP:
$zahl = str_replace(array('.', ','), array('', '.'), $zahl);
 
Zuletzt bearbeitet:
@über mir.


Wenn du erst alle Kommas mit Punkten ersetzt, und dann alle Punkte löscht, ich bezeifle, dass das rauskommt was geplant ist :O

Außerdem wäre noch wichtig zu klären. Wird die Tausendertrennung grundsätzlich NUR mit einem Punkt und die Kommastellen Grundsätlich NUR mit einem Komma getrennt?
 
Ehm, ich entferne ja erst die Punkte und wandle dann das Komma in einen Punkt. Und deine andere Frage kann ich dir nicht beantworten, dass kann nur der Themaersteller. Ich hätte aber eine Lösung, wie man das prüfen könnte (:
 
Naja da das Formular von mehreren Benutzern verwendet werden soll, kann ich nie sicher sagen in welcher Form die Zahlen ankommen. Daher benötige ich eine möglichst universelle Lösung.

Die obigen Lösungen wären zwar ein Ansatz, allerdings denke ich mal das man das noch etwas optimieren könnte...
 
Zurück