簡體   English   中英

我需要一種更有效的方法來檢查是否設置了多個 $_POST 參數

[英]I need a more efficient way of checking if multiple $_POST parameters isset

我有這些變量,我需要檢查它們是否都是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'];

嘗試這個

     $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
     }

像這樣的東西:

$jdmMethod = isset($_POST['jdmMethod']) ? $_POST['jdmMethod'] : NULL;

它是三元運算符

並不真地。 您可以列出預期字段:

$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,那將有所幫助 - 您可以在循環時對每個進行消毒。

我喜歡使用的另一件事是 function 在清理時提供默認值。

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);

我喜歡像這樣使用 function:

// $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]);
    }
}

如果您願意,您可以擴展鍵數組以包含每個后值的不同默認值。

編輯:

如果您想確保所有這些都具有非默認值,您可以執行以下操作:

if(sizeof(array_filter($values)) == sizeof($keys)){
    // Not all of the values are set
}

我認為這應該有效(未經測試,從記憶中)

function handleEmpty($a, $b) {
   if ($b === null) {
       return false;
   } else {
      return true;
}

array_reduce($_POST, "handleEmpty");

這不是您要尋找的答案,但不是。

您可以創建一個數組,並通過該數組循環來檢查一個值,但沒有比這更好的了。

例子:

$postValues = array("appData","tempData",... etc);
foreach($postedValues as $postedValue){
   if(isset($_POST[$postedValue])){
      ...
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM