检查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"); }
我认为这是可怕的而且非常糟糕...似乎无法弄清楚'接受'的方式来做到这一点
答案 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
}
}