Можно ли использовать этот код для проверки переменных $ _GET? - PullRequest
0 голосов
/ 20 июня 2019

Я создаю страницу, где используются параметры GET, и мне интересно, если этот фрагмент кода успешно оценивает следующие условия: $ _ GET ["id"] должно быть Integer и $ _ GET ["status"] должно быть "true" или "false" .

$rawId = $_GET["id"];
$rawStatus = $_GET["status"];

$Id = filter_var($rawId, FILTER_SANITIZE_NUMBER_INT);
$Id = filter_var($Id, FILTER_VALIDATE_INT);

if (!$Id) {
    die();
}

if ($rawStatus != "true" && $rawStatus != "false") {
    die();
}

Ответы [ 3 ]

0 голосов
/ 20 июня 2019

FILTER_SANITIZE_NUMBER_INT допускает ., + и -, которые вы, вероятно, не хотите включать.Использование FILTER_VALIDATE_INT было бы хорошо для регулярных целочисленных проверок, хотя имейте в виду, что это вернет false для 0.Если вы хотите, чтобы ваши идентификаторы также включали 0, то вам необходимо явно проверить это:

$Id = filter_var($rawId, FILTER_VALIDATE_INT) === 0 || filter_var($rawId, FILTER_VALIDATE_INT));

Предполагая, что вы хотите, чтобы $rawStatus была литеральной строкой true / false, тогда то, как вы сейчас это рассматриваете, является, вероятно, наиболее оптимальным подходом, хотя, похоже, вы пытаетесь здесь выполнить булеву проверку.В этом случае вы можете просто проверить наличие из $rawStatus, используя его отсутствие для обозначения ложного значения:

if ($rawStatus)

И, как вы упоминаете в своем комментарии, вы действительно захотите проверить, что оба установлены с isset() ... но вы также захотите проверить, что значения не пусты.Это можно сделать с помощью !empty().

Я бы также рекомендовал переходить только в известное действительное состояние, а не вызывать die() в известном недопустимом состоянии.

Соединение всего этого вместеу вас будет что-то похожее на следующее:

$rawId = null;

if (isset($_GET["id"]) && !empty($_GET["id"])) {
    $rawId = $_GET["id"];
}
if (isset($_GET["status"]) && !empty($_GET["status"])) {
    $rawStatus = $_GET["status"];
}

$Id = filter_var($rawId, FILTER_VALIDATE_INT) === 0 || filter_var($rawId, FILTER_VALIDATE_INT);

if ($Id && $rawStatus) {
    // Logic
}
0 голосов
/ 20 июня 2019

Если вам нужно проверить тип $ rawId и $ rawStatus, вы можете сделать это

is_integer($rawId); // return true if $rawId is integer
is_bool($rawStatus); // return true if $rawStatus is boolean

Чтобы проверить, что $ rawId содержит только цифры, вы можете сделать это

is_numeric($rawId)

Чтобы проверить, является ли $ rawStatus значением bool, вы можете посмотреть этот ответ

Проверка, может ли строка быть логическим PHP

Если необходимо проанализировать значения, вы можете использовать intval () и boolval ()

0 голосов
/ 20 июня 2019

Вы можете использовать is_int и is_bool для достижения этой цели.Убедитесь, что вы также проверяете, установлены ли переменные $ _GET, прежде чем делать это, чтобы избежать потенциальных уведомлений

$rawId = (isset($_GET["id"]) ? $_GET["id"] : null);
$rawStatus = (isset($_GET["status"]) ? $_GET["status"] : null);

if (!is_int($rawId)) {
     //handle
}

if (!is_bool($rawStatus)) {
     //handle
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...