过滤器vs $ _POST(或$ _GET)

时间:2010-12-18 22:17:08

标签: php filter

您应该使用哪一个来检查是否已单击表单提交按钮?

<input type="submit" name="action" value="Sign Up">
  1. if (isset($_POST['action'] && $_POST['action'] == "Sign Up") ...
  2. if (isset(filter_input(INPUT_POST, 'action')) && filter_input(INPUT_POST, 'action') == "Sign Up")
  3. 注意:我使用$ _POST ['action] =='注册',因为我也使用'action'数组进行删除和注销,因为我的一些表单有两个提交按钮,所以我可以区分)。

6 个答案:

答案 0 :(得分:4)

假设您有<form method="post" ...>,则应使用$_POST。您可以检查单个字段,例如:

if ( isset($_POST['action']) )

或任何字段:

if ( 0 < count($_POST) )

或检查请求方法:

if ( $_SERVER['REQUEST_METHOD'] === 'POST' )

或以上的组合:)

我不建议检查提交按钮的值,如果更改,则还需要修改代码。更不用说如果网站是多语言,你需要做什么。

答案 1 :(得分:2)

实际上没有回答这个问题。但是我会给不同的提交按钮提供不同的name,因此它们不会绑定到按钮上显示的值。这反过来使得更改按钮上的文本的错误更少。

例如name='signup'name='action[signup]'

分别与isset($_POST['signup'])isset($_POST['action']['signup'])核对。

答案 2 :(得分:2)

我不确定,但我想我曾遇到过这个问题: 可以通过按Enter来发布表单,在这种情况下,不会发布按钮的值。因此,我强烈反对使用三个不同的提交按钮进行三种不同的操作。相反,我会使用三种形式,并使用另一种方式来区分它们,例如在其中放置隐藏字段或发布到其他网址(或在表单?action=signup属性中添加action之类的内容

答案 3 :(得分:1)

如果它只是想要非常具体值的输入的确切值,那么只需使用#1。

使用过滤器可以节省所需的代码量。而不是写出检查你所提供的IP地址所需的所有代码,而不是私有范围,你可以将代码减少到这个......


$var = "192.168.2.1";
echo (int) filter_var($var, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE); // 0

有关其他过滤器类型和选项标志,请参阅http://www.php.net/manual/en/filter.filters.validate.php。此外,您可以将值传递给callback function以自定义过滤数据的方式。

您还可以使用更少的代码更改/清理输入。见http://www.php.net/manual/en/filter.filters.sanitize.php

$var = "te)st@test.com";
echo filter_var($var, FILTER_SANITIZE_EMAIL); // "test@test.com"

虽然使用filter_x函数可以编写更少的代码,但我个人不知道它与实际详细代码相比是如何执行的,我个人也不知道滤镜和消毒剂的确切可靠性。

答案 4 :(得分:0)

只是检查它是否存在,您不需要filter_var。 <{1}}就足够了。

答案 5 :(得分:0)

第一个是正确的:

if (isset($_POST['action'] && $_POST['action'] == "Sign Up") ...

因为在isset中使用函数会触发解析错误。只有变量可以与isset和其他语言结构一起使用,例如empty