is_int in if-abfrage

florifliegt1

Grünschnabel
Hi,

wie bekomme ich es hin, in einer if-Abfrage (also ein EInzeiler, alles andere ist etwas zu umständlich) hin, die Eingabe prüfen ob es integer ist (also nicht bool(true) oder bool(false)).


PHP:
if ($_SESSION['uid'] != "" and is_int($_GET['id'])) {
#.....

denn das funktioniert auch nicht:
PHP:
if ($_SESSION['uid'] != "" and is_int($_GET['id'] = integer)) {
#.....

Viele Wege führen nach Rom, ich bevorzuge den kürzesten.

Danke!
 
Übergebene Werte aus GET und POST Abfragen enthalten immer Strings. Daher schlägt deine Abfrage immer fehl. Du könntest das stattdessen mit einer Regular Expression prüfen:

PHP:
if (preg_match("/^[0-9]+$/", $_GET['id']) {
  ...
}
 
mit is_int() wie du das da hast.
Kannst ja selber testen
PHP:
var_dump(is_int(NULL));
var_dump(is_int(false));
var_dump(is_int(true));

Mit var_dump($_GET['id']); kannst du mal debuggen in welchem Format das daherkommt.

Aber ganz ehrlich gesagt, versteh ich deine Frage nicht wirklich


Nachtrag:
Mit is_numeric() kannst du den String prüfen ob er eine Zahl darstellt.....
PHP:
if(is_numeric($_GET['id')) {
 
Zuletzt bearbeitet:
is_int wandelt doch einen Wert in eine Integerzahl um.

Ist jetzt vielleicht wieder zu komplizier gedacht aber das müste doch auch gehen:

PHP:
if ($_SESSION['uid'] != "" and strval($_GET['id']) == strval(intval($_GET['id']))) echo "ja";
 
Zuletzt bearbeitet:
Mit var_dump($_GET['id']); kannst du mal debuggen in welchem Format das daherkommt.

habe ich gesagt, integer. In diesem Fall NULL.


Aber ganz ehrlich gesagt, versteh ich deine Frage nicht wirklich

Wie bekomme ich es hin in diesem Einzeiler, das er nur integer (NULL)-Werte akzeptiert?


Eben eine Antwort per e-mail-benachrichtigung erhalten, sehe ich hier aber nicht:
Du kannst zumindest mit is_numeric (http://php.net/manual/de/function.is-numeric.php) prüfen ob es eine Zahl ist.

Leider ist die Funktion nicht hilfreich, da es auch mit einem Buchstaben akzeptiert ist.


Übergebene Werte aus GET und POST Abfragen enthalten immer Strings.

Wow, das würde ich gerne nachlesen, hast du eine Quellenangabe?

Muss ich also wirklich das tun, was ich vermeiden wollte: Noch eine if-Abfrage davor einfügen?

PHP:
if (preg_match("/^[0-9]+$/", $_GET['id']) {

Wie bekomme ich das so in meinen Einzeiler rein, garnicht, gell?
 
Nope. Lies meinen Nachtrag.
is_numeric() hilft. Oder auch ctype_digit() könnte dir helfen.

Aber ich denke, is_numeric() ist genau das was du suchst
 
PHP:
if ($_SESSION['uid'] != "" and preg_match("/^[0-9]+$/", $_GET['id'])) {
...

var_dump($_GET['id']); usw. sollte immer String ausgeben. Ist ja auch logisch: Die Werte kommen für das Script aus dem Querystring und der ist, wie der Name ja sagt: ein String.

Bei Java (starke Typisierung) z.B. sind die "Parameter" immer vom Typ String. Intern ist es in PHP mit Sicherheit nicht anders.

Edit: habe mir mal yaslaw's Vorschläge in der PHP-Doku angeschaut. Die sollten eigentlich das erfüllen, was du brauchst.
 
Zuletzt bearbeitet:
is_numeric wollte ich zu Beginn auch vorschlagen. Da er aber Wert auf Interger legt habe ich es mit meinem obigen Beispiel versucht.
 
Zurück