检查是否设置了多个 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"];
...
}
然而,当我这样做时,它卡在第一个索引上并显示 "Missing the song_name variable...",尽管它实际上包含在 POST 请求中,我不确定为什么会这样。预期的行为是它继续前进并告诉我下一个参数 "artist_name" 未设置,但这并没有发生。
我的方法是使用 array_map() 这样我就可以 return 数组中的所有值,同时检查它是否 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
变量中,您将拥有一个键 => 值数组。例如,
echo $args['song_name'];
我个人喜欢用 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...
}
您好,我想知道检查是否设置了多个 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"];
...
}
然而,当我这样做时,它卡在第一个索引上并显示 "Missing the song_name variable...",尽管它实际上包含在 POST 请求中,我不确定为什么会这样。预期的行为是它继续前进并告诉我下一个参数 "artist_name" 未设置,但这并没有发生。
我的方法是使用 array_map() 这样我就可以 return 数组中的所有值,同时检查它是否 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
变量中,您将拥有一个键 => 值数组。例如,
echo $args['song_name'];
我个人喜欢用 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...
}