可以使用此代码来验证$ _GET变量吗?

时间:2019-06-19 23:02:03

标签: php get

我正在建立一个使用GET参数的页面,并且我想知道这段代码是否成功评估了以下条件: $ _ GET [“ id”] 必须是 integrer < / strong>和 $ _ GET [“状态”] 必须为“真” “假”

$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 :(得分:0)

您可以使用is_int和is_bool来实现。在执行此操作之前,请确保还检查是否设置了$ _GET变量,以避免潜在的提示

pip list

答案 1 :(得分:0)

FILTER_SANITIZE_NUMBER_INT允许您可能不想包含的.+-。使用FILTER_VALIDATE_INT对于常规整数检查会很好,尽管请记住,这将为false返回0。如果您希望ID也包含0,则需要明确检查以下内容:

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

假设您希望$rawStatustrue / 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
}

答案 2 :(得分:0)

如果您需要检查$ 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是否为布尔值,您可以看到此答案

Test if string could be boolean PHP

如果需要解析值,则可以使用 intval() boolval()