Мне нужен более эффективный способ проверки наличия нескольких параметров $ _POST 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']; 

Solutions Collecting From Web of "Мне нужен более эффективный способ проверки наличия нескольких параметров $ _POST isset"

Попробуй это

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

Мне нравится использовать такую ​​функцию:

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

Что-то вроде этого:

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

Это Тернарный оператор .

Я думаю, что это должно работать (не проверено, из памяти)

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

На самом деле, нет. Вы можете составить список ожидаемых полей:

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

Это не тот ответ, который вы ищете, но нет.

Вы можете создать массив, проходящий через этот массив, чтобы проверить значение, но оно не улучшается.

Пример:

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