is_numeric + is_int? Find den Fehler nicht.

2Pac

Erfahrenes Mitglied
Hallo,

ich übergebe via url die id durch ?section=lalala&id=1

Aber er sagt mir bei meiner Abfrage:

PHP:
if (is_numeric($id) AND is_int($id))
{
 do .....
}
else
{
 echo "Die eingegebene ID ist keine korrekte Zahl!"
}

Er sagt mir wenn ich id=1 übergeben habe ($id enthält wirklich wirklich die 1 hab es schon probiert mit echo $id!) immer, es wäre keine korrekte Zahl. Jemand eine Idee warum? Hab ich einen Denkfehler? Irgendwas am Syntax falsch gemacht? Ich versteh es echt nicht...

Hilfe :(
 
Während [phpf]is_numeric[/phpf] den Inhalt prüft, ist [phpf]is_int[/phpf] eine reine Typprüfung!
Und da PHP so locker im Umgang mit Typen ist, sind so ziemlich alle Daten aus der URI ein String... Und schlagen somit bei der Prüfung fehl.

[phpf]intval[/phpf] sollte dir eher helfen.

Alternativ:
Die Ctype Funktionen.
 
Also da ich erreichen will dass $id eine Zahl sowie eine ganze Zahl ist hatte ich gedacht das wäre okay so?

Die Funktion intval() gibt mir was genau jetzt zurück? Konvertiert Sie strings etc. in Integerzahlen?

Reicht eine Überprüfung mit intval() aus, um mein Vorhaben zu realisieren, oder muss ich is_numeric() trotzdem überprüfen?

Danke nochmal im Voraus und im Nachhinein für die Hilfe!
 
versuch mal:

PHP:
if(ctype_digit($id))
{
echo "alles ok, die ID ist ne Zahl";
}
else
{
echo "Something went wrong. Das ist kein Integer!";
}
 
Als erstes würde ich mit is_numeric überprüfen, ob der String eine Zahl ist, und dann mit intval() einen echten int draus machen.

Erscheint mir wie die einfachste Methode.
 
Also, meine grundsätzliche Überprüfung, falls ich MySQL IDs prüfen will (auto_increment, also != 0)

PHP:
if(intval($number) > 0)
{
  /* Aktion */
}

Falls auch 0 zugelassen sein soll, ist es ein wenig komplexer, denn [phpf]intval[/phpf] gibt bei Fehlschlag 0 zurück. Dann solltest du auf eine intensivere Prüfung mit [phpf]is_numeric[/phpf] oder [phpf]ctype_digit[/phpf] zurückgreifen.
 
Moin,


Code:
filter_input(INPUT_GET,'id',FILTER_VALIDATE_INT,FILTER_NULL_ON_FAILURE)

...liefert:
  1. false(boolean) , wenn die Variable nicht gesetzt ist
  2. NULL , wenn die Variable kein Integer ist
  3. andernfalls die Variable (kann auch 0 sein, also beim prüfen der Fälle 1+2 auch den Typ berücksichtigen)
 
Also, meine grundsätzliche Überprüfung, falls ich MySQL IDs prüfen will (auto_increment, also != 0)

PHP:
if(intval($number) > 0)
{
  /* Aktion */
}

Falls auch 0 zugelassen sein soll, ist es ein wenig komplexer, denn [phpf]intval[/phpf] gibt bei Fehlschlag 0 zurück. Dann solltest du auf eine intensivere Prüfung mit [phpf]is_numeric[/phpf] oder [phpf]ctype_digit[/phpf] zurückgreifen.

Da genau das bei mir der Fall ist, werde ich deine Funktion nutzen. Vielen Dank für die Hilfe! :)
 
Zurück