当前位置: 首页 > 知识库问答 >
问题:

isset($\u POST['submit'])与$\u服务器['REQUEST\u METHOD']=='POST'

仉姚石
2023-03-14

我遇到的脚本使用:

isset($_POST['submit'])

以及使用以下各项的代码:

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

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

共有3个答案

凌景辉
2023-03-14

他们做不同的事情。

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

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

你想干什么?

慕容灿
2023-03-14

这意味着两件不同的事情。首先,检查表单提交时是否传递了参数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方法一起提交。这并不一定意味着表单按钮被按下。如果它没有与POST一起提交,那么超全局$_POST将为空。

颛孙炜
2023-03-14
isset($_POST['submit']) 

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

  1. 表单通过POST方法提交,而不是GETPUT等方法提交。
  2. submit字段已通过
$_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. 至少已提交一个字段
 类似资料:
  • 我使用以下html表单代码允许用户选择多个文件进行上传。 uploadFiles.php包含以下代码。 出于某种原因,isset($_POST['提交'])总是返回false。我得到以下输出

  • 我对计划中的应用程序的设计有一点问题,特别是数据库引擎和无服务器/非无服务器。目标是一个通过RESTAPI与数据库对话的Web应用程序。RESTAPI本身实际上只是CRUD操作,因此在我看来,无服务器aproach(AWS Lambda)非常适合。因此,最有效的数据库可能是DynamoDB(NoSQL)。 我熟悉RDBMS,对NoSQL数据库知之甚少。 应用程序的模式尚未完成,应该可以在以后进行扩

  • 我试图检索一个文件从SFTP服务器-而连接到这个SFTP工作与FileZilla-SFTP方法。 对于JSch,我使用JSch尝试了这段代码 虽然我有这个错误: 使用时,我也遇到了同样的错误: 给我这个错误: 我已经尝试了这些链接中提供的其他解决方案,但没有解决它: > 通用域名格式。jcraft。jsch。JSCHEException:SSH\u MSG\u DISCONNECT:2协议错误:r

  • 部署 PHP 应用程序到生产环境中有多种方式。 Platform as a Service (PaaS) PaaS 提供了运行 PHP 应用程序所必须的系统环境和网络架构。这就意味着只需做少量配置就可以运行 PHP 应用程序或者 PHP 框架。 现在,PaaS 已经成为一种部署、托管和扩展各种规模的 PHP 应用程序的流行方式。你可以在 资源部分 查看 PHP PaaS “Platform as

  • “Drools骆驼服务器”和“KIE-WB执行服务器”有什么区别?它们是否服务于在远程服务器中执行规则/进程的相同目的?

  • Request 参照symfony2的Request服务 GET {#get} public function testAction(Request $request) { //get $request -> query -> get('xxx'); $request -> query -> all(); } POST {#post} public function tes

  • 我正在EC2实例上开发apache2环境。为了安全起见,我想更改apache2的ssl端口。我已经确认默认的ssl端口443是通过检查页面与chrome浏览器工作。但修改ports.conf如下,我有一个错误,ERR_SSL_PROTOCOL_ERROR当访问这个服务器像https://xxxxxxx: 18443/ 是否有任何更改ssl端口的设置? 侦听端口 /etc/apache2/ports

  • 我访问了我网站的子文件夹,并出现以下错误: $\u服务器['DOCUMENT\u ROOT']似乎返回了一个错误的目录,如下所示: 如果我访问www.my.com。website/php,这应该是$\u服务器['DOCUMENT\u ROOT']应该返回的预期目录: 这些是我的虚拟主机配置: 如何配置virtualhost配置,以便访问www.my。website/php它应该返回Document