检查$ _GET变量

时间:2017-09-14 21:54:54

标签: php if-statement

我必须在PHP中检查$_GET变量是否已设置,还是整数。

我认为这两种方法中的哪一种可以安全地用于此目的?

方法1:

$debtor_id = intval($_GET['id']);
if ($debtor_id > 0){
    //everything is good continue.
}else{
    header("location: error404.php");
}

方法2

if (isset($_GET['id'])){
    $debtor_id = intval($_GET['id']);
    //everything is good continue.
}else{
    header("location: error404.php");
}

请随时告诉我任何不同的方法。

2 个答案:

答案 0 :(得分:2)

方法3:使用one of PHP's built-in filter functions

$debtor_id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);

if (!$debtor_id) {
    header('location: error404.php');
    exit;
}
// everything is good continue.

使用该过滤功能,

  • 如果$_GET['id']未设置,$debtor_id将设置为null
  • 如果设置$_GET['id']并且不是int,则$debtor_id将设置为false
  • 如果$_GET['id']已设置且为int,则$debtor_id将设置为该int
在您的if条件中,

nullfalse0将全部评估为false。 (在你的方法1中,你检查它是否大于零,所以我认为它也是一个条件。)

答案 1 :(得分:0)

将方法2与isset函数一起使用。 为什么?

因为在方法1中,您不检查变量$ _GET ['id]是否存在,这意味着inval($ _ GET ['id'])将返回错误,因为您的参数不存在。 这是isset函数的主要目标,顺便说一下,这是PHP中处理GET值的传统方式。

相关问题