PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ist $_POST[var] ein Integer?



tybalt0125
15-02-2006, 10:04
Hi Leute,

ich habe ein Problem, womit ich leider nicht zurecht komme.
Und zwar soll in einem Formular ein Wert eingegeben werde, dies soll eine
positive ganze Zahl sein. Wie kann ich jetzt ueberpruefen, ob dies auch eine positive
ganze Zahl ist?

$_POST[var] ist die Variable die ich wissen moechte.
Ich hoffe das Ihr mir weiterhelfen koennt.

PS: mit is_int() geht es leider net, da die Variable ein String ist.

inner.glow
15-02-2006, 10:17
Hi!

Vielleicht hilft dir die Funktion:

if(settype ( $_POST[var], "integer" )){
echo "Erfolg";
}

Aber schau dir die Referenz an:
http://de3.php.net/manual/de/function.settype.php
Es werden auch Strings mit Buchstaben und Zahlen in Zahlen umgewandelt...

sg.

tybalt0125
15-02-2006, 10:31
Hi!

Vielleicht hilft dir die Funktion:

if(settype ( $_POST[var], "integer" )){
echo "Erfolg";
}

Aber schau dir die Referenz an:
http://de3.php.net/manual/de/function.settype.php
Es werden auch Strings mit Buchstaben und Zahlen in Zahlen umgewandelt...

sg.
Das er die Buchstaben auch als Zahlen umwandelt, gerade das will ich ja nicht, ich will einfach nur wissen, ob das was eingegeben wurde eine positive Ganze Zahl ist.
Leider finde ich keine Lösung...

waxman
15-02-2006, 11:06
Hi

ich würde das mit dem folgend Beispiel probieren.


<?php
if(preg_match("/\d+/",$_POST['var']) {
echo "Variable ist Zahl";
} else {
echo "Variable ist keine Zahl";
}
?>

Sicherlich nicht die eleganteste Lösung, sollte aber für den Anfang reichen.


waxman

tybalt0125
15-02-2006, 12:24
Hi

ich würde das mit dem folgend Beispiel probieren.


<?php
if(preg_match("/\d+/",$_POST['var']) {
echo "Variable ist Zahl";
} else {
echo "Variable ist keine Zahl";
}
?>

Sicherlich nicht die eleganteste Lösung, sollte aber für den Anfang reichen.


waxman
kannst du mir vielleicht auch erklaeren, was dort gemacht wird, im speziellen der preg_match befehl? (d+) ?

edit: also es wird nach digits durchsucht. Wird dort dann auch true gesetzt wenn soetwas drin steht "zz3zz"?

waxman
15-02-2006, 12:32
Siehe nächstes Posting.

Bin noch nicht ganz da.

waxman
15-02-2006, 12:34
Hi.

preg_match vergleicht einen String mit einem Regular Expression. In dem Fall habe ich \d genommen, welches laut dem Manual die Zahlen von 0 bis 9 representiert. Das Pluszeichen dahinter gibt an, dass 1 oder n Zahlen gefunden werden sollen.

Nun gibt preg_match auch noch die Anzahl der gefundenen Ergebnisse zurück. In dem Fall die Häufigkeit einer Zahl mit der Länge n. D.h. wenn die Variable $_POST['var'] = 23 definiert ist, gibt die If-Abfrage ein "Variable ist Zahl" zurück.

Wie schon gesagt, dass ist keine elegante Lösung und du bist gerne eingeladen etwas besseres zu finden ;)



edit: ja es wird auch sowas wie "zzz3zzz" gefunden, aber dafür muss man das RegEx nur minimal ändern. Ne idee wäre dann "/^\d+$/" zu benutzen.

tybalt0125
15-02-2006, 12:58
Ok, ich werde das mal versuchen. Leider habe ich auch nur so eine Lösung gefunden. Wenn ich was anderes finden sollte, dann werde ich mich hier nochmal melden.
Vielleicht ist ja auch noch jemand anderes mit einer anderen Lösung da und wird sie posten. :)

thx erstmal

undefined
15-02-2006, 13:19
Die Antwort auf deinen Beitragstitel ist ganz einfach Nein
POST ist der Mime-Typ oder ENCTYPE application/x-www-form-urlencoded, das Programm erhält die kodierte Formulareingabe in der Standardeingabe. Der Server sendet kein EOF, sondern an Hand der Environmentvariablen CONTENT_LENGTH.
Dies kannst du ganz einfach sehen wenn du ein

var_dump( "<pre>", $_POST, "</pre>" );
auf deine Post Variablen machst.
Wenn du eine $_POST Variable auf einen Integer Wert prüfen möchtest musst du ein hinting verwenden.

if ( isset( $_POST['meinVar'] ) && (int)$_POST['meinVar'] != 0 ) { ... }

Turbohummel
15-02-2006, 17:08
is_integer()

Mehr sag ich net. Weil mehr braucht man dazu net sagen.

undefined
15-02-2006, 19:56
is_integer() Mehr sag ich net. Weil mehr braucht man dazu net sagen. Stimmt weil du komplett daneben liegst ;)
PS: mit is_int() geht es leider net, da die Variable ein String ist.http://www.php.net/manual/de/language.types.type-juggling.phpis_integer -- Prüft, ob eine Variable vom Typ integer ist

Romanday
15-02-2006, 20:26
Noch a bissle Senf :D

Daten die mit GET oder Post versenden werden sind generell Strings.
Von daher kann man auch nur für die Prüfung, Funktionen verwenden
die Strings als Parameter erwarten.

Turbohummel
15-02-2006, 20:35
Ok, vielleicht sollte man nach 10 Stunden Arbeit doch 2 mal denken.

is_integer ist eine Funktion meiner Klasse RemoteData, die eben diese Werte prüft. Intern ist das auch über einen PregMatch gelöst, wie er oben schon mal gepostet wurde.

Allerdings möchte ich anmerken, dass intVal() oder (int)$_POST['var'] in der Regel ausreicht.

Romanday
16-02-2006, 06:30
Ok, vielleicht sollte man nach 10 Stunden Arbeit doch 2 mal denken.


Ist doch nicht weiter schlimm.:D
Das ist eben eine klassische Bauernfalle.
Wenn man nicht weiter kommt,
einfach mit gettype() o. ä. nachschauen.