我有这些变量,我需要检查它们是否都是isset()。我觉得 是一种更有效的方法来检查它们而不是一次检查它们。
$jdmMethod = $_POST['jdmMethod'];
$cmdMethod = $_POST['cmdMethod'];
$vbsMethod = $_POST['vbsMethod'];
$blankPage = $_POST['blankPage'];
$facebook = $_POST['facebook'];
$tinychat = $_POST['tinychat'];
$runescape = $_POST['runescape'];
$fileUrl = escapeshellcmd($_POST['fileUrl']);
$redirectUrl = escapeshellcmd($_POST['redirectUrl']);
$fileName = escapeshellcmd($_POST['fileName']);
$appData = $_POST['appData'];
$tempData = $_POST['tempData'];
$userProfile = $_POST['userProfile'];
$userName = $_POST['userName'];
答案 0 :(得分:1)
试试这个
$allOk = true;
$checkVars = array('param', 'param2', …);
foreach($checkVars as $checkVar) {
if(!isset($_POST[$checkVar]) OR !$_POST[$checkVar]) {
$allOk = false;
// break; // if you wish to break the loop
}
}
if(!$allOk) {
// error handling here
}
答案 1 :(得分:0)
答案 2 :(得分:0)
不是真的。您可以列出预期字段:
$expected = array(
'jdmMethod',
'cmdMethod',
'fileName'
); // etc...
...然后循环那些并确保所有键都到位。
$valid = true;
foreach ($expected as $ex) {
if (!array_key_exists($ex, $_POST)) {
$valid = false;
break;
}
$_POST[$ex] = sanitize($_POST[$ex]);
}
if (!$valid) {
// handle the problem
}
如果你可以开发一个通用的清理功能,这将有所帮助 - 你可以在循环时清理每个功能。
我喜欢使用的另一个功能是在消毒时提供默认值。
function checkParam($key = false, $default = null, $type = false) {
if ($key === false)
return $default;
$found_option = null;
if (array_key_exists($key,$_REQUEST))
$found_option = $_REQUEST[$key];
if (is_null($found_option))
$found_option = $default;
if ($type !== false) {
if ($type == 'string' && !is_string($found_option))
return $default;
if ($type == 'numeric' && !is_numeric($found_option))
return $default;
if ($type == 'object' && !is_object($found_option))
return $default;
if ($type == 'array' && !is_array($found_option))
return $default;
}
return sanitize($found_option);
}
当可以使用默认值时,您不想进行循环,而是单独检查每个循环:
$facebook = checkParam('facebook', 'no-facebook', 'string);
答案 3 :(得分:0)
我喜欢使用这样的函数:
// $k is the key
// $d is a default value if it's not set
// $filter is a call back function name for filtering
function check_post($k, $d = false, $filter = false){
$v = array_key_exists($_POST[$k]) ? $_POST[$k] : $d;
return $filter !== false ? call_user_func($filter,$v) : $v;
}
$keys = array("jdmMethod", array("fileUrl", "escapeshellcmd"));
$values = array();
foreach($keys as $k){
if(is_array($k)){
$values[$k[0]] = check_post($k[0],false,$k[1]);
}else{
$values[$k] = check_post($k[0]);
}
}
如果您愿意,可以扩展keys数组以包含每个post-value的不同默认值。
编辑:
如果您想确保所有这些都具有非默认值,您可以执行以下操作:
if(sizeof(array_filter($values)) == sizeof($keys)){
// Not all of the values are set
}
答案 4 :(得分:0)
我认为这应该有效(未经过内存测试)
function handleEmpty($a, $b) {
if ($b === null) {
return false;
} else {
return true;
}
array_reduce($_POST, "handleEmpty");
答案 5 :(得分:-1)
这不是你要找的答案,但没有。
你可以通过该数组创建一个循环来检查一个值,但它没有比这更好。
示例:
$postValues = array("appData","tempData",... etc);
foreach($postedValues as $postedValue){
if(isset($_POST[$postedValue])){
...
}
}