Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

is_int and GET or POST

Tags:

php

Why does is_int always return false in the following situation?

echo $_GET['id']; //3
if(is_int($_GET['id']))
    echo 'int'; //not executed
like image 938
user319854 Avatar asked Aug 17 '10 13:08

user319854


1 Answers

Why does is_int always return false?

Because $_GET["id"] is a string, even if it happens to contain a number.

Your options:

  • Use the filter extension. filter_input(INPUT_GET, "id", FILTER_VALIDATE_INT) will return an integer typed variable if the variable exists, is not an array, represents an integer and that integer is within the valid bounds. Otherwise it will return false.

  • Force cast it to integer (int)$_GET["id"] - probably not what you want because you can't properly handle errors (i.e. "id" not being a number)

  • Use ctype_digit() to make sure the string consists only of numbers, and therefore is an integer - technically, this returns true also with very large numbers that are beyond int's scope, but I doubt this will be a problem. However, note that this method will not recognize negative numbers.

Do not use:

  • is_numeric() because it will also recognize float values (1.23132)
like image 192
Pekka Avatar answered Oct 05 '22 23:10

Pekka