【问题标题】:php - filter_input - set to default value if GET key not setphp - filter_input - 如果 GET 键未设置,则设置为默认值
【发布时间】:2014-11-21 08:24:29
【问题描述】:

如果设置了 GET 参数(和数字),我希望有一种简洁、优雅的方式将变量设置为 GET 参数,如果未设置,则设置为 0(或其他默认值)。

现在我有:

if (($get_id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT))) {
    $opened_staff['id'] = $get_id;
    // some database queries etc.
} else { $opened_staff['id'] = 0; }

我尝试使用回调函数,如果值为 null 或不是数字,则返回 0,但如果未设置 GET 参数 'id',则甚至不会调用回调 - 它只是将 $get_id 设置为空。

包含 else 语句没什么大不了的,只是想我可能会错过 filter_input 的某些功能。

【问题讨论】:

  • 给我一些更清楚的解释

标签: php get filter-input


【解决方案1】:

filter_input 函数接受 options 参数。每个过滤器接受不同的选项。例如,FILTER_VALIDATE_INT 过滤器可以接受defaultmin_rangemax_range 选项as described here

$get_id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT, array("options" => array(
    "default" => 0,
    "min_range" => 0
)));
var_dump($get_id);

// $get_id = 0 when id is not present in query string, not an integer or negative
// $get_id = <that integer> otherwise

【讨论】:

  • 宾果游戏。这就是我所缺少的。选项数组中的默认键。谢谢!
  • 如果您还需要添加其他标志,它们应该在flags 键中。例如array("options" =&gt; array("default" =&gt; []), "flags" =&gt; FILTER_REQUIRE_ARRAY);.
【解决方案2】:

您可以使用默认选项来实现此目的,如果未设置值,则将分配默认值,示例如下

$options = array( 'options' => array('default'=> 0) ); 
$valid = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT, $options); 

filter_input() 不从 _POST/_GET/_COOKIE/_SERVER/_ENV 读取

$opened_staff['id'] = 0;
if($valid){
  $opened_staff['id'] = $_GET['id'];
}

您可以使用一些类来实现这一点。 [注意:- 这只是一个例子]

class RequestFilter{
 public static function get_filter_int($id){

   $options = array( 'options' => array('default'=> 0) ); 
   $valid = filter_input(INPUT_GET, $id, FILTER_VALIDATE_INT, $options); 

   if($valid){
     return $_GET[$id]; // Value will return
   }

   return $valid; // Default will return
 }
}

$opened_staff['id'] = RequestFilter::get_filter_int('id');

这里将返回值或默认值,这里为零。

【讨论】:

  • 为什么不简单地在 if 语句中返回 $valid,因为在这种情况下您已经提取了有效值,或者我错过了什么?(PHP 相对较新)
  • 您根本不需要 if,如果 valid 为“true”,则返回 $_GET[$id],这与 $valid 相同,因为 filter_input 如果有效则返回该值。在其他情况下,您返回$valid。所以你的回报总是和$valid一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-19
  • 2016-09-01
  • 2022-06-19
  • 2017-12-05
相关资源
最近更新 更多