is_int () не может проверить $ _GET в PHP? - PullRequest
7 голосов
/ 28 июня 2010

Вот мой код:

<?php
$id = $_GET["id"];

if (is_int($id) === FALSE)  {
    header('HTTP/1.1 404 Not Found');
    exit('404, page not found');
    }
?>

Он всегда входит в if.

Ответы [ 7 ]

32 голосов
/ 28 июня 2010

is_int проверяет, что тип данных является целым числом, но все в $_GET будет строкой. Следовательно, он всегда будет возвращать false.

В крайнем случае, вы можете привести к целому числу, а затем проверить! = 0.

$id = isset($_GET['id']) ? (int) $_GET['id'] : null;

if (!$id) { // === 0 || === null
  header('HTTP/1.1 404 Not Found');
  exit('404, page not found');
}

Но более надежное решение будет включать проверку или фильтрацию входных строк, например, встроенную в PHP filter_input_array().

(Отредактировано сообщение 13 октября, поскольку оно все еще получает голоса, и оно было несколько смутно сформулировано.)

5 голосов
/ 28 июня 2010

Пользовательский ввод в массиве $ _GET (как и в других суперглобалах) принимает форму строк.

is_int проверяет тип (т.е. string) значения, а не содержит ли оно целочисленные значения. Для проверки того, что входные данные являются целочисленной строкой, я бы предложил что-то вроде ctype_digit или целочисленный фильтр (FILTER_VALIDATE_INT) - это дает преимущество, фактически изменяя значение на введите целое число). Конечно, вы можете также ввести его с помощью (int).

3 голосов
/ 28 июня 2010

Из документации PHP для is_int:

Примечание. Чтобы проверить, является ли переменная число или числовая строка (например, ввод формы, которая всегда является строкой), Вы должны использовать is_numeric () .

1 голос
/ 28 июня 2010

Попробуйте использовать is_numeric вместо is_int.is_numeric проверяет, дано ли ему что-то, что может быть числом (я думаю, $_GET возвращает строки)is_int проверяет, имеет ли переменная тип int

1 голос
/ 28 июня 2010

Любой пользовательский ввод представлен в виде строки, потому что PHP не может определить тип данных, который вы ожидаете получить.

Приведите его к целому числу или используйте регулярное выражение, если хотите убедиться, что это целое число.

<?php
$id = $_GET["id"];

if ((int) $id == 0)  {
    header('HTTP/1.1 404 Not Found');
    exit('404, page not found');
    }
?>
0 голосов
/ 11 августа 2015

Или вы можете просто использовать соответствие регулярному выражению, чтобы проверить, является ли строка целым числом.

if(preg_match('/^\d+$/',$_GET['id'])) {
  // is an integer
}
0 голосов
/ 14 октября 2014

Используйте is_numeric () для оценки содержимого и is_int () для оценки типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...