PHP Überprüfen ob Eigabe ganzzahlig ist

te one

Lt. Commander
Registriert
Apr. 2009
Beiträge
1.255
Hi,
habe in meinem script einen kleinen Fehler, und bekom ihn irgendwie nicht weg

kann mir einer sagen wie ich am besten überprüfe, ob die (aus einem Formular stammenden) Daten eine ganze Zahl (ohne kommastellen,...) sind?

Habe es gerade so probiert:

PHP:
if ((is_int($_POST['number'])) and (!preg_match('.', $_POST['number']))) {
echo 'Richtige Eingabe!';
} 
else {
echo 'Falsche Eingabe';
}
doch wo ist jetz des problem, dass es mir einfach immer "Falsche Eingabe" anzeigt??

des is_int funktioniert eigentlich, nur dann gehen ja noch kommazahlen!

hoffe ihr könnt mir bald helfen
mfg
to

Ps: bei den eingabefeldern für die Zahl, habe ich als type "int" genommen. (war am naheliegensten, fand ich)
 
Zuletzt bearbeitet:
Eben gerade nicht. Steht doch auf der Seite drauf was man braucht:
Hinweis: Um zu testen, ob eine Variable eine Zahl oder eine numerische Zeichenkette ist (wie zum Beispiel Formularangaben, die immer Zeichenketten sind), müssen Sie is_numeric() verwenden.
POST/GET/COOKIE usw. sind grundsätzlich immer erstmal Strings (egal was du im HTML-Formular angegeben hast; das wirkt sich hier nicht aus!) und somit wird bei bei is_int immer false zurückgegeben! is_numeric ist daher das Mittel der Wahl.
 
Tatsache, du hast Recht. Mein erster Post im Forum und direkt scheiße erzählt. Kommt davon, wenn man den Post vorher schon nicht richtig liest. :(

Aber um nochmal auf das is_int zurück zu kommen, so sollte es gehen. ;)

PHP:
if(is_int(intval($_POST['number'])))
 
Der Code vom letzten Post stimmt, ist nur leider recht sinnfrei, da er immer true zurückgibt. intval wandelt alles in einen Int um, was man ihm vorwirft.
PHP:
if(is_int(intval('unsinn')))

Eventuell hilft der einfache Regex:
PHP:
"^[\d]+$"
 
Würde es so prüfen:

PHP:
if(intval($variable) == $variable) {
 //Do Something...
}
Achtung: nicht getestet ;)
 
hm so wie krizzelfix das geschrieben hatte, könnt ichs denk ich machen!
was muss ich da noch angeben, damit keine kommazahl rauskommt??

das problem ist auch, dass, wenn ich extra noch immer das intval mit der variable vergleichen muss, das script immer unübersichtlicher wird! die if-abfrage umfasst zurzeit schon 7 zeilen, wenn ich jetz da noch des mit intval reinhaue und dann nochmal überprüfen lasse, ob dieser wert überhaupt kleiner ist, als das, was maximal eingegeben werden darf, komm ich geschätzt auf ca. 13 zeilen.

naja ich tests jetz mal mit intval, ich hoffe dass so viele if-bedingungen des ganze net zu langsam machen(webserver ist eh net der schnellste)

edit: also intval() funzt super. nur verstehe ich nicht, was es bringt nach der eigentlichen zahl noch was anzugaben (zb intval(5, 100))? habe ein testscript gemacht, und da kommt immer des gleiche raus, egal was ich noch mit hinschreib
 
Zuletzt bearbeitet:
Poste mal dein ganzen Skript. Veilleicht gibt es ja eine ganz andere Lösung.

te one schrieb:
was muss ich da noch angeben, damit keine kommazahl rauskommt??
Wo soll da eine Kommazahl rauskommen?

Wenn du eine Gleitkommazahl in die Funktion intval gibst, bekommst du einen Integer zurück. Danach wird geprüft, ob die Rückgabe gleich der Variable ist. Ist dies der Fall, muss es sich bereits um einen Integer handeln.

Wozu der Parameter base ist, weiß ich auch nicht aus dem Kopf (und php.net hat grade Probleme;)).
 
PHP-Doku geht enigermaßen:
intval

Der 2. Parameter gibt die Basis der Umwandlung an.
PHP:
<?php
echo intval(4.2);                     // 4
echo intval(42);                      // 42
echo intval('42',10);                 // 42
echo intval(42, 8);                   // 42
echo intval('42', 8);                 // 34
?>
Note: The base parameter has no effect unless the var parameter is a string.
 
habs jetz mit der lösung von krizzelfix gemacht!
lass einfach immer überprüfen ob intval() der eingabe des gleiche wie die eingabe ist!

und es funktioniert super

hab wegen der basis der umwandlung auch vorhin schon auf selfphp geguckt, aber da wars nicht erklärt! abba jetzt isses klar (für was auch immer man des braucht^^).

thx an alle helfer.
 
PHP:
if(ctype_digit($_POST['number'])) {...}

Prüft jedes Zeichen des Strings auf numerisch, Punkte und Kommas sind somit wie gewünscht nicht erlaubt.

Hier sieht man schön den Unterschied zu is_numeric:

PHP:
<?php

$numeric_string = '42';
$integer        = 42;

ctype_digit($numeric_string);  // true
ctype_digit($integer);         // false

is_numeric($numeric_string);   // true
is_numeric($integer);          // true
?>
 
Zuletzt bearbeitet:
Zurück
Oben