【发布时间】:2019-05-22 05:30:36
【问题描述】:
嗨,我想知道检查是否设置了多个 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”未设置,但这不会发生。
【问题讨论】:
-
var_dump() 你的 $_POST - 你的键值都存在吗?
-
song_name要么丢失、有错字、有大写字母,要么由于某种原因有多余的间距。echo '<pre>'; var_dump($_POST); echo '</pre>';将揭示您的问题。 -
也许您没有发送 POST 请求?检查您的
$_GET。 -
如果你想在找到第一个丢失的参数后返回false,你的函数没有问题。这个问题似乎与在 $_POST 中没有得到你所期望的更相关,这可能是之前 cmets 中的原因之一。
-
isset确实采用多个参数,例如isset($_POST["song_name"], $_POST["artist_name"], $_POST["song_release_date"], ...)有点干净