Integer aus Formular prüfen

Ich wollte in einem Formular etwas eingeben und es soll per PHP geprüft werden, ob es wirklich ein Integer ist und nicht ein String. Leider übergibt die Form aber alles per String. Wie wandel ich diesen String in einen Integer um, bzw. prüfe, ob es wirklich ein Integer ist und kein String?

So sieht mein Code aus:

Integer:

String:

<?php if(isset($_GET['integer']) OR isset($_GET['string']))
{ $integer=$\_GET['integer']; $string=$\_GET['string']; echo is\_int('$integer')." "; // Ergebnis: nichts echo is\_numeric('$integer')." "; // Ergebnis: nichts echo intval('$integer')." "; // Ergebnis bei String: 0 und bei Int: 0 } else { echo "Nichts gesetzt"; } ?\>

Ach ja, folgendes klappt auch nicht:

 if(preg\_match("#\d{,2}#", $integer)) echo "ist ein Integer."; 
> if(isset($\_GET['integer']) OR isset($\_GET['string']))  
> {  
> $integer=$\_GET['integer'];  
> $string=$\_GET['string'];  
>   
> echo is\_int('$integer')."  
> "; // Ergebnis: nichts

wenn du dir die single-quotes anschaust, erstaunt dich das ergebnis aber nciht wirklich, oder?

-)

Ach ja, folgendes klappt auch nicht:

if(preg_match("#\d{,2}#", $integer)) echo „ist ein
Integer.“;

wo und wie ist {,2} definiert? {1,2} tut auf alle faelle, {0,2} auch

Und jetzt wäre ein Lösungsvorschlag super, wenn du das Ergebnis weißt.

Und jetzt wäre ein Lösungsvorschlag super, wenn du das
Ergebnis weißt.

Mein Vorschlag (is_int() geht hier nämlich nicht):

Integer:

String:

<?php if( $_SERVER['REQUEST_METHOD'] == 'POST') {
$intval = strlen( $\_POST['integer'] ) ? $\_POST['integer'] : 'undef'; $strval = strlen( $\_POST['string'] ) ? $\_POST['string'] : 'undef'; printf("string: %s integer: %s ", $strval , $intval); printf("ctype\_digit %s =\> %d ", $intval, ctype\_digit($intval)); printf("is\_numeric %s =\> %d ", $intval, is\_numeric($intval)); printf("intval %s =\> %d ", $intval, intval($intval)); } else { echo "kein request "; } ?\> Verwende keine regulären Ausdrücke, wenn Du nicht \*genau\* weißt, was Du tust:wink: Grüße CMБ

Für die Nachwelt:

if(preg_match("/[^0-9]+/", $nr)==1) echo „Integer!“;

Habe die Lösung von netten Leuten aus einem anderen Forum bekommen.

Und jetzt wäre ein Lösungsvorschlag super, wenn du das
Ergebnis weißt.

lösungsvorschlag? stand doch alles da:

bzgl. deiner ausgangsfrage:

echo is_int(’$integer’)."
"; // Ergebnis: nichts

wenn du dir die single-quotes anschaust, erstaunt dich das ergebnis aber nciht wirklich, oder?

die loesung ware hier: lass die singlequotes weg!
und weiter: is_numeric ist was du willst.

bzgl. deiner notloesung mit preg:

if(preg_match("#\d{,2}#", $integer)) echo „ist ein Integer.“;

wo und wie ist {,2} definiert? {1,2} tut auf alle faelle, {0,2} auch

steht da: {1,2} tut auf alle faelle, {0,2} auch

Für die Nachwelt:

Abwarten:

if(preg_match("/[^0-9]+/", $nr)==1) echo „Integer!“;
Habe die Lösung von netten Leuten aus einem anderen Forum
bekommen.

Das ist leider komplett falsch. Der Ausdruck [^0-9]
bedeutet „wahr, wenn *keine* Ziffer vorkommt“.

Was Du meinst, ist wahrscheinlich sowas:

 ...
 if(preg\_match('/^\d+$/', $intval) == 1) echo "
Integer!";
 ...

Aber sei gewarnt, benutze niemals reguläre Ausdrücke,
wenn Du nicht genau weißt, was diese tun …

Grüße

CMБ

if( $_SERVER[‚REQUEST_METHOD‘] == ‚POST‘) {
$intval = strlen( $_POST[‚integer‘] ) ? $_POST[‚integer‘] : ‚undef‘;
$strval = strlen( $_POST[‚string‘] ) ? $_POST[‚string‘] : ‚undef‘;

da darfst du aber keine notices anhaben, wenn integer mal nicht uebertragen wird.
besser: isset( $_POST[‚integer‘] )

printf("string: %s
integer: %s
", $strval , $intval);

Verwende keine regulären Ausdrücke, wenn
Du nicht *genau* weißt, was Du tust:wink:

printf-syntax ist an der stelle nciht wesentlich eingaengiger.

is_numeric waere die loesung gewesen - wie schon oben notiert.

Hallo dog.je

if( $_SERVER[‚REQUEST_METHOD‘] == ‚POST‘) {
$intval = strlen( $_POST[‚integer‘] ) ? $_POST[‚integer‘] : ‚undef‘;
$strval = strlen( $_POST[‚string‘] ) ? $_POST[‚string‘] : ‚undef‘;

da darfst du aber keine notices anhaben, wenn integer mal
nicht uebertragen wird.
besser: isset( $_POST[‚integer‘] )

Hmmmm, ich glaube fast sicher zu sein, daß isset($_POST(‚xyz‘))
*immer* true ist, wenn es den FORM-Namen ‚xyz‘ gibt, *auch wenn*
dieses FORM-Element uninitialisiert bleibt. $_POST(‚xyz‘) hätte
dann als Wert den leeren String, dies testet man mit strlen().

printf("string: %s
integer: %s
", $strval , $intval);

Verwende keine regulären Ausdrücke, wenn
Du nicht *genau* weißt, was Du tust:wink:

printf-syntax ist an der stelle nicht wesentlich eingaengiger.

Aber die Komplexität von printf ist gering (obwohl es sehr mächtig
und expressiv ist). Die Komplexität von regulären Ausdrücken ist
dagegen enorm hoch (imho).

is_numeric waere die loesung gewesen - wie schon oben notiert.

IMHO nicht, weil Du ja Sachen wie 3.1415 ausschliessen möchtest,
daher ist imho ctype_digit das richtige Werkzeug.

Grüße

CMБ

Hallo dog.je

if( $_SERVER[‚REQUEST_METHOD‘] == ‚POST‘) {
$intval = strlen( $_POST[‚integer‘] ) ? $_POST[‚integer‘] : ‚undef‘;
$strval = strlen( $_POST[‚string‘] ) ? $_POST[‚string‘] : ‚undef‘;

da darfst du aber keine notices anhaben, wenn integer mal
nicht uebertragen wird.
besser: isset( $_POST[‚integer‘] )

Hmmmm, ich glaube fast sicher zu sein, daß
isset($_POST(‚xyz‘))
*immer* true ist, wenn es den FORM-Namen ‚xyz‘ gibt, *auch
wenn*
dieses FORM-Element uninitialisiert bleibt.

nö, das bleibt fast dem client ueberlassen - eine nicht angehakte checkbox z.b. wird nicht uebertragen

$_POST(‚xyz‘)
hätte
dann als Wert den leeren String, dies testet man mit strlen().

ach so, ich dachte validierung kommt dann erst unten.

is_numeric waere die loesung gewesen - wie schon oben notiert.

IMHO nicht, weil Du ja Sachen wie 3.1415
ausschliessen möchtest,
daher ist imho ctype_digit das richtige Werkzeug.

stimmt - an floats habe ich nciht gedacht.

naja, einen haette ich noch:

$xyz = (int) $_POST[‚xyz‘];

und halt warnings abschalten :smile: