繁体   English   中英

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

[英]Easiest way to check if multiple POST parameters are set?

您好,我想知道检查是否设置了多个 POST 参数的最简单方法。 与其对通过“&&”链接在一起的多个“isset($_POST['example'])”进行长时间的 if 检查,我想知道是否有更简洁的方法。

我最终做的是制作一个数组并循环遍历它:

  $params_needed = ["song_name", "artist_name", "song_release_date",
                "song_genre", "song_medium"];

然后我将调用下面的函数,传入 $params_needed 以检查是否设置了上面的参数名称:

  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 请求中,我不确定为什么会这样。 预期的行为是它继续前进并告诉我下一个参数“artist_name”未设置,但这并没有发生。

我个人喜欢使用array_diff来解决这个问题。

PHP array_diff 文档

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

所以你可以像这样使用array_diff

  $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_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"]);

PHP 7+

$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."); }

在你的$args变量中,你将有一个 key => value 的数组。 例如,

echo $args['song_name'];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM