Php isset($#u POST[';submit';])与$#u SERVER[';REQUEST#u METHOD';]==';邮政';

Php isset($#u POST[';submit';])与$#u SERVER[';REQUEST#u METHOD';]==';邮政';,php,Php,我遇到过使用以下内容的脚本: isset($_POST['submit']) 以及使用以下各项的代码: $_SERVER['REQUEST_METHOD']=='POST' 我想知道这两种方法之间的区别以及哪种方法最好。它们做的事情不同 第一个检查是否设置了$\u POST数组中的键(submit) 第二个检查$\u服务器数组中键的值是否为'POST'。我想人们会用它来判断数据是使用“get”还是“post”方法发送的,但通常情况下,您不仅关心使用了什么方法,而是关心发送了什么数据 你想做什

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

isset($_POST['submit'])
以及使用以下各项的代码:

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

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

它们做的事情不同

第一个检查是否设置了
$\u POST
数组中的键(
submit

第二个检查
$\u服务器
数组中键的值是否为
'POST'
。我想人们会用它来判断数据是使用“get”还是“post”方法发送的,但通常情况下,您不仅关心使用了什么方法,而是关心发送了什么数据


你想做什么?

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

<?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
,以及请求是否包含元素
submit
的值。第二种方法只检查请求方法是否为
Post

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

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

  • 表单通过
    POST
    方法提交,而不是
    GET
    PUT
  • submit
    字段已通过

  • 这正好告诉您一件事,表单是通过
    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
  • 至少已提交一个字段

  • 它们是无与伦比的,它们做不同的工作检查
    $\u POST['submit']
    的存在,其中
    submit
    type=submit name=submit
    按钮的名称,是php程序员中最常见(也是最蹩脚)的习惯之一。当用户通过公共web浏览器库中相当大一部分的enter键提交表单时,您的代码将完全失败。不要这样做,这是非常业余的。@chris Thanx提供信息,他不知道。我对php非常陌生。superglobal
    $\u POST
    总是设置好的,并且总是一个数组。@Arjan很好的理解。更好的措辞:“将是空的”如果我错了,请纠正我,但是如果表单方法是POST,那么$u POST将是空的唯一方法不是没有按下按钮吗?@Madz是对的。但是,如果您的表单逻辑与表单位于同一页面上,请检查是否存在
    submit
    或其他字段,以验证表单是否已提交并应进行处理。不要检查提交按钮以检测表单提交。当用户通过enter键(在某些浏览器中)和某些javascript表单提交方法提交表单时,它会失败。当表单提交失败时,用户会非常恼火…@rambocoder在任何情况下,您的评论都让我改变了回答中的一些内容,以解决您的问题。。。请看一看
    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
    }
    
    $_POST