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";
}
?\>
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().
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.
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.