intval vs. ctype_digit
Mike
- php
ich möchte nach einer Formularübergabe ermitteln ob in der übergebenen Variable auch eine ganze Zahl drin ist,
intval oder ctype_digit
beides macht es, aber welches ist das richtige?
Mike
Hallo
ich möchte nach einer Formularübergabe ermitteln ob in der übergebenen Variable auch eine ganze Zahl drin ist,
intval oder ctype_digit
beides macht es …
nein
intval ist eine Typumwandlungsfunktion und wandelt den Wert einer Variable/einer Eingabe in eine Ganzzahl um. Besteht die Eingabe nur aus Ziffern, werden diese auch wieder ausgegeben, besteht die Eingabe (auch) aus Buchstaben, gibt die Funktion 0 zurück. Dabei kann eine Eingabe vom Typ String (z.B. eine Zeichenkette, die aus Ziffern besteht) sein, zurück kommt ein Integer (eine „richtige“ Zahl).
ctype_digit prüft, ob die Eingabe ausschließlich aus Ziffern besteht. Passt also auch nicht, wenn deine Bedingung „auch eine ganze Zahl drin“ ist (Betonung auf „auch“).
Tschö, Auge
Moin
ich möchte nach einer Formularübergabe ermitteln ob in der übergebenen Variable auch eine ganze Zahl drin ist,
intval oder ctype_digit
beides macht es, aber welches ist das richtige?
Moment. Ich würde beide als nicht richtig ansehen.
ctype_digit() prüft ob es sich um eine Dezimalzahl handelt: http://de3.php.net/manual/en/function.ctype-digit.php
intval() gibt den eingegebenen String als Integer zurück und zwar in der Form, dass von dre ersten Stelle an die Zeichenkette Position für Position geprüft wird. Solange es sich um Int handelt wird das Zeichen der Aktuellen Position an den Wert angehangen
also 123ik5 ergibt mit intval 123 http://de3.php.net/manual/en/function.intval.php
richtiger in meinen Augen wäre: is_int(). Denn nur diese Funktion testet ob der Wert auch wirklich int ist
http://de3.php.net/manual/en/function.is-int.php
Um zum Beispiel eine ID zu übergeben würde ich intval empfehlen. Einfach alles was nicht int ist herauslöschen. Wenn du aber wirklich überprüfen möchtest, dann bitte is_int()
Gruß Bobby
Hello,
[bis dahin richtig]
richtiger in meinen Augen wäre: is_int(). Denn nur diese Funktion testet ob der Wert auch wirklich int ist
Die Eingaben kommen aus einem Requeststring
is_int() ist also nicht richtig, da die Werte immer als String an PHP übergeben werden.
Man könnte is_numeric() benutzen, um festzustellen, ob der gesamte String eine numerische Größe repräsentiert, dann hätte man aber auch Floats, Exponentialschreibweise und so weiter mit dabei.
PHP stellt zum Zwecke der vorgesehen Prüfung die Filterfunktionen zur Verfügung. Die testen die übergebenen Werte daraufhin, ob sie den Zieltyp repräsentieren können, nicht aber vom Zieltyp sind.
http://de1.php.net/manual/en/ref.filter.php
http://de1.php.net/manual/en/filter.filters.validate.php
Um zum Beispiel eine ID zu übergeben würde ich intval empfehlen. Einfach alles was nicht int ist herauslöschen. Wenn du aber wirklich überprüfen möchtest, dann bitte is_int()
Das ist immer dann sinnvoll, wenn die ID==0 nicht zum zulässigen Wertebereich gehört, bzw. eben das "False-Element" darstellt.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Moin
Die Eingaben kommen aus einem Requeststring
is_int() ist also nicht richtig, da die Werte immer als String an PHP übergeben werden.
Ah... richtig... hab mich hier von der losen Typenbindung blenden lassen. Du hast natürlich vollkommen recht.
Um zum Beispiel eine ID zu übergeben würde ich intval empfehlen. Einfach alles was nicht int ist herauslöschen. Wenn du aber wirklich überprüfen möchtest, dann bitte is_int()
Das ist immer dann sinnvoll, wenn die ID==0 nicht zum zulässigen Wertebereich gehört, bzw. eben das "False-Element" darstellt.
Ich versuche die 0 als ID weitestgehend zu vermeiden. Sinn hin oder her, habs mir so angewöhnt da es weniger Probleme gibt. Ich kann so zum Beispiel auf empty prüfen. Die 0 ist dabei der false-Wert.
Gruß Bobby
Hello,
Ich versuche die 0 als ID weitestgehend zu vermeiden. Sinn hin oder her, habs mir so angewöhnt da es weniger Probleme gibt. Ich kann so zum Beispiel auf empty prüfen. Die 0 ist dabei der false-Wert.
Wenn Du dich in deiner Applikation konsequent daran hältst und keine Ausnahmen benötigst, dann ist das ein passabler Weg, der auch oft und gerne benutzt wird. Also nicht "weitestgehend", sondern "Konsequent" und alles wird gut ;-)
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg