【问题标题】:Can this code be used in order to validate $_GET variables?可以使用此代码来验证 $_GET 变量吗?
【发布时间】:2019-06-19 23:02:03
【问题描述】:

我正在构建一个使用 GET 参数的页面,我想知道这段代码是否成功评估了下一个条件:$_GET["id"] 必须是 integrer 和 $_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();
}

【问题讨论】:

  • 还应该添加一个 isset() 来检查这些参数是否被声明...

标签: php get


【解决方案1】:

您可以使用 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
}

【讨论】:

    【解决方案2】:

    FILTER_SANITIZE_NUMBER_INT 允许 .+-,您可能不想包含它们。使用FILTER_VALIDATE_INT 可以很好地进行常规整数检查,但请记住,这将为0 返回false。如果您希望您的 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
    }
    

    【讨论】:

      【解决方案3】:

      如果你需要检查 $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,您可以查看此答案

      Test if string could be boolean PHP

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

      的值

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-22
        • 1970-01-01
        • 2013-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多