检查设置gpr?

时间:2011-03-08 17:48:29

标签: php

检查set get / post / request是什么最佳做法?

现在我正在做

if(!isset($_GET['account']) || !isset($_GET['ssid']) || !isset($_GET['mssid']) || !isset($_GET['max'])) { die("missing info"); }
if($_GET['account'] == "" || $_GET['ssid'] == "" || $_GET['mssid'] == "" || $_GET['max'] == "") { die("missing info"); }

我认为这是可怕的而且非常糟糕...似乎无法弄清楚'接受'的方式来做到这一点

3 个答案:

答案 0 :(得分:2)

根据您要测试的字段,可能始终设置它们(如文本字段)。

更好的方法是:

$fields = array('account', 'ssid', 'mssid', 'max');

$error = array();
foreach($fields as $field) {
    if(!isset($_GET[$field]) || empty($_GET[$field])) {
        $error[] = $value;
    }
}

if(!empty($error)) {
    echo 'Error: Missing data for ', implode(',', $error);
    exit;
}

答案 1 :(得分:2)

一种方法是创建一个接受数组的函数和一个要检查的超全局函数,以确保完整性:

function arrayIsset(Array $keys, $array){
    $notSet = array();
    foreach($keys as $key){
        if(!isset($array[$key] || empty($array[$key]){
            $notSet[] = $key;
        }
    }
    return empty($notSet)
        ? true
        : $notSet;
}

$valid = arrayIsset(array('account', 'ssid', 'mssid'), $_GET);

如果值全部设置且非空,则返回true,否则返回缺失值的键数组。


根据您对 Felix Kling 的评论;除了验证值是否设置/为空之外,您还需要执行更强大的验证技术。有很多可用的核心(过滤器)和第三方。


虽然这不包括过滤器,但使用Regex很容易进行基于字符串的验证:

function validateArray(Array $validators, Array $array){

    foreach($validators as $key => $regex){

        if(!isset($array[$key])
        || empty($array[$key])
        || !preg_match($regex, $array[$key])){

            //failed

        }

    }

}

$isValid = validateArray(array(
    // alphanumeric, must start with alpha
    'username'       => '#^ [a-z] [a-z0-9]* $#Dix',
    // numeric 3 digits, space, 6 digits
    'account_number' => '#^ [0-9]{3} \s [0-9]{6} $#Dix',
), $_GET);

您可以使用复杂的正则表达式,但上述过滤器可能是更好的解决方案,具体取决于您希望实现的复杂程度。

答案 2 :(得分:1)

这是一个更整洁的方法。它检查每个密钥是否存在并包含非空值:

foreach (array('account','ssid','mssid','max') as $param)
{
  if (!isset($_GET[$param]) || (isset($_GET[$param] && empty($_GET[$param])))
  {
    // exit or handle errors
  }
}