Php 检查是否设置了多个POST参数的最简单方法?

Php 检查是否设置了多个POST参数的最简单方法?,php,for-loop,post,isset,Php,For Loop,Post,Isset,大家好,我想知道检查是否设置了多个POST参数的最简单方法。我不想用多个由“&&”链接在一起的“isset($\u POST['example'])进行长时间的if检查,而是想知道是否有更干净的方法来进行检查 我最后做的是制作一个数组并在其上循环: $params_needed = ["song_name", "artist_name", "song_release_date", "song_genre", "song_medium"]; 然后我将调用下面的

大家好,我想知道检查是否设置了多个POST参数的最简单方法。我不想用多个由“&&”链接在一起的“isset($\u POST['example'])进行长时间的if检查,而是想知道是否有更干净的方法来进行检查

我最后做的是制作一个数组并在其上循环:

  $params_needed = ["song_name", "artist_name", "song_release_date",
                "song_genre", "song_medium"];
然后我将调用下面的函数,传入检查上述参数名称是否已设置所需的$params_:

  function all_params_valid($params_needed) {
     foreach ($params_needed as $param) {
        if (!isset($_POST[$param])) {
           error("Missing the " . $param . " variable in POST request.");
           return false;
        }
     }
     return true;
  }


  if (all_params_valid($params_needed)) {
     $song_name = $_POST["song_name"];
     $artist_name = $_POST["artist_name"];
     $song_release_date = $_POST["song_release_date"];
     $song_genre = $_POST["song_genre"];
     $song_medium = $_POST["song_medium"];

     ...
  }

然而,当我这样做时,它在第一个索引上卡住了,并说“缺少song_name变量…”,尽管实际上在POST请求中包含了它,我不知道为什么会发生这种情况。它的预期行为是继续,并告诉我下一个参数“Artister\u name”未设置,但这不会发生。

我是如何通过使用数组映射()来实现这一点的,这样我就可以在检查数组中的值是否
isset()

PHP 5.6>

$args = array_map(function($key) {
    return isset($_POST[$key]) ? array($key => $_POST[$key]) : someErrorMethod($key);
}, ["song_name", "artist_name", "song_release_date", "song_genre", "song_medium"]);
PHP7+

$args = array_map(function($key) {
    return array($key => $_POST[$key] ?? someErrorMethod($key));
}, ["song_name", "artist_name", "song_release_date", "song_genre", "song_medium"]);
您的错误方法可能如下所示:

function someErrorMethod($key) { die("$key cannot be empty."); }
  $params_needed = ["song_name", "artist_name", "song_release_date",
                "song_genre", "song_medium"];
  $given_params = array_keys($_POST);

  $missing_params = array_diff($params_needed, $given_params);

  if(!empty($missing_params)) {
    // uh oh, someone didn't complete the form completely...
  }
$args
变量中,将有一个key=>value数组。比如说,

echo $args['song_name'];

我是通过使用array_map()来实现这一点的,这样我就可以返回数组中的所有值,同时检查它是否
isset()

PHP 5.6>

$args = array_map(function($key) {
    return isset($_POST[$key]) ? array($key => $_POST[$key]) : someErrorMethod($key);
}, ["song_name", "artist_name", "song_release_date", "song_genre", "song_medium"]);
PHP7+

$args = array_map(function($key) {
    return array($key => $_POST[$key] ?? someErrorMethod($key));
}, ["song_name", "artist_name", "song_release_date", "song_genre", "song_medium"]);
您的错误方法可能如下所示:

function someErrorMethod($key) { die("$key cannot be empty."); }
  $params_needed = ["song_name", "artist_name", "song_release_date",
                "song_genre", "song_medium"];
  $given_params = array_keys($_POST);

  $missing_params = array_diff($params_needed, $given_params);

  if(!empty($missing_params)) {
    // uh oh, someone didn't complete the form completely...
  }
$args
变量中,将有一个key=>value数组。比如说,

echo $args['song_name'];

我个人喜欢在这个问题上使用
array\u diff

您关心的是您的预期输入与给定输入相同

因此,您可以像这样使用
array\u diff

function someErrorMethod($key) { die("$key cannot be empty."); }
  $params_needed = ["song_name", "artist_name", "song_release_date",
                "song_genre", "song_medium"];
  $given_params = array_keys($_POST);

  $missing_params = array_diff($params_needed, $given_params);

  if(!empty($missing_params)) {
    // uh oh, someone didn't complete the form completely...
  }

我个人喜欢在这个问题上使用
array\u diff

您关心的是您的预期输入与给定输入相同

因此,您可以像这样使用
array\u diff

function someErrorMethod($key) { die("$key cannot be empty."); }
  $params_needed = ["song_name", "artist_name", "song_release_date",
                "song_genre", "song_medium"];
  $given_params = array_keys($_POST);

  $missing_params = array_diff($params_needed, $given_params);

  if(!empty($missing_params)) {
    // uh oh, someone didn't complete the form completely...
  }

var_dump()您的$_POST-您的键是否都有值?
song_name
缺失、拼写错误、大写字母或出于某种原因具有额外的间距<代码>回显“”;变量转储($\u POST);回声'将显示您的问题。可能您没有发送POST请求?检查
$\u GET
。如果要在找到第一个缺少的参数后返回false,则函数没有问题。这个问题似乎更多地与在$\u帖子中没有得到您期望的内容有关,可能是因为前面评论中的原因之一。确实采用了多个参数,例如,
isset($\u POST[“song\u name”]、$\u POST[“Artister\u name”]、$\u POST[“song\u release\u date”]、…)
哪一个参数有点干净?您的$\u POST-您的键都有值吗?
song\u name
缺失、键入错误、大写字母或出于某种原因有额外的间距<代码>回显“”;变量转储($\u POST);回声'将显示您的问题。可能您没有发送POST请求?检查
$\u GET
。如果要在找到第一个缺少的参数后返回false,则函数没有问题。这个问题似乎更多地与在$\u帖子中没有得到您期望的内容有关,可能是因为前面评论中的原因之一。确实采用了多个参数,例如,
isset($\u POST[“song\u name”],$\u POST[“Artister\u name”],$\u POST[“song\u release\u date”],…)
这有点干净我喜欢这种方法,一直以来我都使用数组映射来实现这一点。回答得好!我非常喜欢这个答案,但我认为应该是array_diff($params_needed,$given_params);因为它“返回一个数组,该数组包含来自array1的所有条目,而这些条目在任何其他数组中都不存在。”@JoshuaMaza fixed。谢谢你指出这一点!很难记住所有这些PHP怪癖Dylan Pierce-将if(!empty($missing_params){更改为if(!empty($missing_params)){加上一个额外的)所以它的有效语法非常好。非常好的解决方案,看起来比大量的ISSET要好得多。我喜欢这种方法,一直以来我都使用array_map来实现。非常好的答案!我非常喜欢这个答案,但我认为应该是array_diff($params_needed,$given_params);因为它“返回一个数组,其中包含数组1中所有其他数组中不存在的条目。”@JoshuaMaza fixed。感谢您指出!很难记住所有这些PHP怪癖Dylan Pierce-将if(!empty($missing_params){更改为if(!empty($missing_params)){加上一个额外的)所以它的有效语法非常好。非常好的解决方案,看起来比大量的ISSET要好得多。