我必须在PHP中检查$_GET
变量是否已设置,还是整数。
我认为这两种方法中的哪一种可以安全地用于此目的?
$debtor_id = intval($_GET['id']);
if ($debtor_id > 0){
//everything is good continue.
}else{
header("location: error404.php");
}
if (isset($_GET['id'])){
$debtor_id = intval($_GET['id']);
//everything is good continue.
}else{
header("location: error404.php");
}
请随时告诉我任何不同的方法。
答案 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 null
,false
和0
将全部评估为false
。 (在你的方法1中,你检查它是否大于零,所以我认为它也是一个条件。)
答案 1 :(得分:0)
将方法2与isset函数一起使用。 为什么?
因为在方法1中,您不检查变量$ _GET ['id]是否存在,这意味着inval($ _ GET ['id'])将返回错误,因为您的参数不存在。 这是isset函数的主要目标,顺便说一下,这是PHP中处理GET值的传统方式。