19

我遇到过使用以下脚本的脚本:

isset($_POST['submit'])

以及使用的代码:

$_SERVER['REQUEST_METHOD']=='POST'

我想知道这两者之间的区别以及哪种方法最好。

4

4 回答 4

10
isset($_POST['submit']) 

如果您已经知道将始终发送特定值,因此表示预期的表单提交(submit本例中的字段)此代码将告诉您两件事:

  1. 表单是通过方法提交的POST,而不是GET,PUT等。
  2. submit字段已通过。

$_SERVER['REQUEST_METHOD'] == 'POST'

POST这准确地告诉你一件事,一个表单是通过该方法提交的。使用它的原因包括:

  • 您想区分无效的表单提交(例如,并非所有字段都已传输)和其他类型的页面检索(GET,PUT等)
  • 你不知道你会收到什么。也许这段代码是在一个不知道其依赖部分的所有细节的控制器中运行的。

前者是

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (!isset($_POST['name'])) {
        // at this point you know that `name` was not passed as part of the request
        // this could be treated as an error
    }
}

相对:

if (!isset($_POST['name'])) {
    // the `name` field was not passed as part of the request
    // but it might also be a GET request, in which case a page should be shown
}

重要的

检查请求中的提交按钮字段是不可靠的,因为可以通过其他方式提交表单(例如在文本框中按 Enter)。


$_POST

只需使用此表达式,您就可以断言:

  1. 表格是通过提交的POST
  2. 至少已提交一个字段
于 2012-06-08T04:44:55.380 回答
4

他们做不同的事情。

第一个检查是否设置了数组submit中的键 ( ) 。$_POST

第二个检查$_SERVER数组中某个键的值是否为'POST'。我想有人会使用它来判断数据是否已使用“get”或“post”方法发送,但通常您不仅关心使用了哪种方法,而是发送了哪些数据。

你想做什么?

于 2012-06-08T04:28:54.463 回答
4

这意味着两个不同的东西。首先,检查表单提交时submit是否传递了参数。许多人使用此代码段来验证是否已发送表单。这是有效的,因为提交按钮在技术上是一个<input>,因此它的值与表单中的任何其他元素一起发送。

<?php
    if(isset($_POST['submit'])) { // This way form and form logic can be adjacent to each other
        // Logic
    }
?>
<form method='POST' action='<?= $_SERVER['REQUEST_URI'] ?>'>
   <!--- other form stuff -->
   <input type="submit" name="submit" value="Send!" />
</form>

第二个片段测试表单是否使用 POST 方法提交。这并不一定意味着表单按钮被按下。如果它没有通过 POST 提交,那么超全局$_POST将为空。

于 2012-06-08T04:30:52.470 回答
0

第一条语句检查请求方法是否是Post以及请求是否包含 element 的值submit。第二种方法只检查请求方法是否为Post.

要检查表单是否已发布,第二个更好,因为它稍微清晰一些,只做一件事。但是我不会太担心使用哪一个。

于 2012-06-08T04:32:17.490 回答