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

Mad*_*adz 16 php

我遇到过使用的脚本:

isset($_POST['submit'])
Run Code Online (Sandbox Code Playgroud)

以及使用的代码:

$_SERVER['REQUEST_METHOD']=='POST'
Run Code Online (Sandbox Code Playgroud)

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

Ja͢*_*͢ck 7

isset($_POST['submit']) 
Run Code Online (Sandbox Code Playgroud)

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

  1. 形式经由提交POST方法,而不是GET,PUT
  2. submit领域已通过.

$_SERVER['REQUEST_METHOD'] == 'POST'
Run Code Online (Sandbox Code Playgroud)

这告诉你一件事,一个表单是通过该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
    }
}
Run Code Online (Sandbox Code Playgroud)

与:

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
}
Run Code Online (Sandbox Code Playgroud)

重要

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


$_POST
Run Code Online (Sandbox Code Playgroud)

通过使用此表达式,您可以声明:

  1. 表格通过提交 POST
  2. 至少提交了一个字段

  • 不要检查提交按钮以检测表单提交。当用户通过Enter键(在某些浏览器中)和某些javascript表单提交方法提交表单时,该操作将失败。当表单提交无提示失败时,它使用户非常烦恼... (2认同)

Bai*_*ker 5

这意味着两个不同的事情。首先,检查提交表单时是否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>
Run Code Online (Sandbox Code Playgroud)

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

  • 超全局 `$_POST` 总是被设置并且总是一个数组。 (2认同)