Why does is_int always return false in the following situation?
echo $_GET['id']; //3
if(is_int($_GET['id']))
echo 'int'; //not executed
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
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 returnfalse.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 returnstruealso with very large numbers that are beyondint‘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)