您应该使用哪一个来检查是否已单击表单提交按钮?
<input type="submit" name="action" value="Sign Up">
if (isset($_POST['action'] && $_POST['action'] == "Sign Up") ...
或if (isset(filter_input(INPUT_POST, 'action')) && filter_input(INPUT_POST, 'action') == "Sign Up")
注意:我使用$ _POST ['action] =='注册',因为我也使用'action'数组进行删除和注销,因为我的一些表单有两个提交按钮,所以我可以区分)。
答案 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
。