我正在建立一个使用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();
}
答案 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));
假设您希望$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
}
答案 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()