isset($ _ POST ['submit'])vs $ _SERVER ['REQUEST_METHOD'] =='POST'

时间:2012-06-08 04:26:24

标签: php

我遇到过使用的脚本:

isset($_POST['submit'])

以及使用的代码:

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

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

4 个答案:

答案 0 :(得分:7)

isset($_POST['submit']) 

如果您已经知道某个特定值总是被发送,因此表示预期的表单提交(在这种情况下为submit字段),此代码将告诉您两件事:

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

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

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

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

    前者是

    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. 提交
    3. 至少提交了一个字段

答案 1 :(得分:4)

他们做不同的事情。

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

第二个检查$_SERVER数组中的键的值是否为'POST'。我想有人会用这个来判断数据是否已经使用“get”或“post”方法发送,但通常你不关心使用的是什么方法,而是关注发送了什么数据。

你想做什么?

答案 2 :(得分: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将为空。

答案 3 :(得分:0)

第一个语句检查请求方法是否为Post以及请求是否包含元素submit的值。第二种方法仅检查请求方法是否为Post

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