在PHP中使用isset和filter_input正确的方法

iSe*_*See 2 php isset superglobals

我正在为一些简单的功能开发基本API.我正在捕获如下输入:

if ($action == 'delete' && isset($_POST['targetId']) && isset($_POST['userId'])) {
//The isset causes "Do not access Superglobal _POST array directly" warning in Netbeans
        $userId = filter_input(INPUT_POST, 'userId');
        $beamId = filter_input(INPUT_POST, 'targetId');
}
Run Code Online (Sandbox Code Playgroud)

我是否应该使用filter_input来检查值是否已设置?喜欢:

if ($action == 'delete' && filter_input(INPUT_POST, 'targetId') && filter_input(INPUT_POST, 'userId')) {

}
Run Code Online (Sandbox Code Playgroud)

我不是在看这里的选项而是我会对最安全和防黑客的最正确的解决方案感到满意.

编辑:是的,上述信息将用作SQL的输入

NEO*_*ine 7

另一个解决方案可能是使用filter_has_var().

if (filter_has_var(INPUT_POST, "userId")) {
    //occurs when $_POST['userId'] is set, even when empty
}
Run Code Online (Sandbox Code Playgroud)

更多信息:官方文件