2012-10-05 90 views
0
if(isset($_POST['submit'])){ 
//code here 
} 

纠正我,如果我错了,但我相信上面的代码不会工作,如果用户使用“输入”键提交表单。

这是真的吗?如果是这样,是否有另一个if语句可以用来代替这个来覆盖用户使用submit按钮并按下回车键?

+0

我认为,有些IE版本不检测进入键,提交 – FirmView

回答

7

要检查的形式发布到服务器,使用:

if ($_SERVER['REQUEST_METHOD'] === 'POST') { 
    // … 
} 
+1

+1。检查它是否是POST请求,呃,检查它是否是POST请求。这比检查隐藏的输入更好,希望按钮被称为提交,看着窗外等。 – deizel

+0

或'if(!empty($ _ POST))' – martincarlin87

+0

是的,除非想法是区分不同的提交按钮。我的意思是不同的形式。 –

3

这是不正确的,如果submit是默认提交按钮。

此外,还有一个$_SERVER['REQUEST_METHOD'] - 我认为这将是POST当您提交您的表格或GET否则,如果我明白你的意图的权利。

4

如果你不能确定是否submit将在POST你可以使用矫枉过正的方法:创建隐藏<input>在此<form>有一些独特的名称和POST数据如果验证:

<input type="hidden" name="some_name" value="OK" /> 

而且在PHP代码:

if (isset($_POST['some_name']) && $_POST['some_name'] == "OK") { 
    // ... 
} 
+0

这是最有可能矫枉过正考虑的问题。 – Prisoner

+0

这不是过度杀伤,这是一个完全可以接受的答案。 – martincarlin87

+0

这是一个完全可以接受的矫枉过正的答案。如果通过阐述你的意思是为你做,那么''并检查'secret_submit'。 –

1

我会扩展其他答案:如果submitinput type=submit并且回车键触发该按钮,则可能不是这样。如果是type=img<button>,则其行为可能与输入密钥不同(并且可能不会设置该值)。

0

提交应该没问题,如果它是页面上的唯一提交按钮或页面上的第一个提交按钮(如果有多个提交按钮),这可能不太可能。

另一种方法是使用隐藏的输入。

例如

<input type="hidden" id="processed" name="processed" value="1" /> 

然后在提交脚本

if(isset($_POST['processed'])){ 
    //code here 
} 
+0

'id'肯定是一种矫枉过正的行为,它可能会被复制到某个地方;) –

+0

也许,很多人喜欢在它们的输入上有符合名称的id,并且它提供了一个简单的选择器来使用jQuery等。虽然! – martincarlin87

+0

如果重复,*会造成伤害。我不会说'ID'在这里一般是特别有害的,但它肯定不会以任何方式处理这个问题;-) –