Why does is_int always return false in the following situation?
is_int
echo $_GET['id']; //3 if(is_int($_GET['id'])) echo 'int'; //not executed
Why does is_int always return false?
Because $_GET["id"] is a string, even if it happens to contain a number.
$_GET["id"]
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.
filter_input(INPUT_GET, "id", FILTER_VALIDATE_INT)
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)
(int)$_GET["id"]
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.
ctype_digit()
true
int
Do not use:
is_numeric()
2.1m questions
2.1m answers
60 comments
57.0k users