PHP如何以"正确的方式"过滤所有$ _POST变量

nde*_*cca 8 php post netbeans filter

使用Netbeans,每当我尝试访问$ _POST或$ _GET中的变量时,我建议使用类似于:filter_input(INPUT_POST,'id')'for safety'的东西(我认为它不比使用带有默认NON过滤器的filter_input更安全,但是无论如何..).

这让我想到了这篇文章的答案:如何抓住帖子中的所有变量(PHP)

你有:

foreach ($_POST as $key => $value) {
    //do something
    echo $key . ' has the value of ' . $value;
}
Run Code Online (Sandbox Code Playgroud)

filter_input()仅适用于$ _POST中的各个变量

我的问题是,如何$_POST as $key通过过滤来重写" "以适应NetBeans告诉我的这种假定的访问标准?

mle*_*eko 11

您可以$_POST使用filter_input_array过滤整个

$safePost = filter_input_array(INPUT_POST);
Run Code Online (Sandbox Code Playgroud)

使用第二个参数可以更改过滤器

$safePost = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
Run Code Online (Sandbox Code Playgroud)

您还可以定义每个属性过滤器

$safePost = filter_input_array(INPUT_POST, [
    "id" => FILTER_VALIDATE_INT,
    "name" => FILTER_SANITIZE_STRING,
    "email" => FILTER_SANITIZE_EMAIL
]);
Run Code Online (Sandbox Code Playgroud)

如果我对输入一无所知怎么办?

好吧,你总是知道一些事情,你知道你期望得到什么.如果用户提供无效输入,您应该对此作出反应.

如果您希望字段中的整数id并且用户向您发送tomato,那么您应该回复错误,通知用户他发送的请求有什么问题.