有没有更好的方法来检查PHP中的POSTed变量?

时间:2009-07-30 23:07:00

标签: php initialization

我发现在我的PHP页面中,我最终得到的行和代码行如下所示:

$my_id = isset($_REQUEST['my_id']) ? $_REQUEST['my_id'] : '';
$another_var = isset($_REQUEST['another_var']) ? $_REQUEST['another_var'] : 42;
...

是否有更好,更简洁或更易读的方法来检查此数组并将它们分配给局部变量(如果它们存在)或应用默认值(如果它们不存在?)

编辑:我不想使用register_globals() - 我仍然有问题。

6 个答案:

答案 0 :(得分:6)

如何将它包装在函数中?

<?php

function getPost($name, $default = null) {
    return isset($_POST[$name]) ? $_POST[$name] : $default;
}

答案 1 :(得分:4)

更好的方法可能是创建一个单例/静态类来抽象出检查请求数据的细节。

类似的东西:

class Request {

  private $defaults = array();
  private static $_instance = false;

  function getInstance () {
    if (!self::$_instance) {
     $c = __CLASS__;
      self::$_instance = new $c;
    }
    return self::$_instance;
  }

  function setDefaults($defaults) {
    $this->defaults = $defaults;
  }

  public function __get($field) {
    if (isset($_REQUEST[$field]) && !empty($_REQUEST[$field])) {
        return $_REQUEST['field'];        
      } elseif (isset($this->defaults[$field])) {
        return $this->defaults[$field];
      } else {
        return ''; # define a default value here.
      }
   }
}
然后你可以这样做:

# get an instance of the request
$request = Request::getInstance();

# pass in defaults.
$request->setDefaults(array('name'=>'Please Specify'));

# access properties
echo $request->name;
echo $request->email;

我认为这会使你的个人脚本加载更清晰,并抽象出验证等。加上这个设计的范围,以扩展它/添加替代行为,添加更复杂的默认处理等等。

答案 2 :(得分:2)

首先,对POSTed变量使用$_POST$_REQUEST是许多不同传入变量的混搭,而不只是$_POST,可能会导致问题。

您的问题的一个解决方案是创建一个处理isset()逻辑的函数。

function ForceIncomingValue($Key, $Default) {
    if (!isset($_POST[$Key]))
         return $Default;
    else return $_POST[$Key];
}

答案 3 :(得分:2)

首先,永远不要使用$ _REQUEST变量,它会在开发过程中导致错误和其他问题


function getPOST($key) {
    if(isset($_POST[$key])) {
        return $_POST[$key];
    }
}

note that this code leaves the variable empty when $_POST[$key]未设置

您还可以调整该代码,以便在无法加载值时为您提供(合理的)默认值。

function getPOST($key, $default = NULL) {
    if(isset($_POST[$key])) {
        return $_POST[$key];
    } else {
        return $default;
    }
}

答案 4 :(得分:1)

在脚本编写时您期望知道的变量集,或者您是否想要为任意值集合执行此操作?如果前者是真的,你可以这样做:

# This array would hold the names of all the variables you're expecting
# and a default value for that variable name
$variableNames = array (...); 
foreach ($variableNames as $key => $default) {
    if (isset ($_REQUEST[$key])) $$key = $_REQUEST[$key];
    else $$key = $default;
}

基本上,这利用了PHP能够评估变量来创建其他变量(因此$$键的双元 - 这意味着创建一个名为$ key值的新变量)。

我还没有找到解决后一种情况的好方法。

答案 5 :(得分:0)

PHP&#39; null coalescing operator

  

$username = $_GET['user'] ?? 'nobody';

对于很多变量,通过需求检查,任何人都可以免费使用我的expect function