【问题标题】:Can I POST and GET to the same PHP page我可以 POST 和 GET 到同一个 PHP 页面吗
【发布时间】:2011-07-11 14:31:45
【问题描述】:

我想知道是否可以在同一个php页面上进行GET和POST,例如

我想发送数据到:

http://www.example.com/my.php

首先是 GET

http://www.example.com/my.php?task=dosomething

并发布一些$thexml = XML

http://www.example.com/my.php?task=dosomething

然后可以在一些代码中访问两者,例如(示例)

// Example Code ============================

    if($_GET["task"] == "dosomething"){
      $mynewxml = $_POST["$thexml"];
    }
//==========================================

【问题讨论】:

  • 你试过了吗?

标签: php xml post get


【解决方案1】:

技术上不行,你不能同时POSTGET。它们是两个不同的动词,您只能在请求时使用。

但是,您会发现,如果您执行 POST 并在 URL 中包含参数,例如 yourscript.php?param1=somevalue&param2=somevalue,那么 $_GET$_POST 都将填充各自的数据。

阅读 HTTP 的实际工作原理是明智的。 http://www.jmarshall.com/easy/http/

您应该考虑这是否是您的良好系统设计。 GET 应该用于不更改服务器上数据的请求。 POST 可以更改数据。尽管两者都可以实现,但最好遵循这种常见做法。否则,您永远不知道某些代理或其他程序会对它做什么。

【讨论】:

  • @Itay Moav,...这就是为什么我说你“应该考虑”这是否是一个好主意,而不是说它完全不坏。
【解决方案2】:

是的,您可以通过在表单操作中包含 $_GET 参数来做到这一点:

<form method='post' action='handler.php?task=dosomething'>
   ...
</form>

【讨论】:

    【解决方案3】:

    这就是我的做法......

    if (isset($_POST['somevar'])) { 
        $somevar = $_POST['somevar']; } 
        else { 
        $somevar = $_GET['somevar']; 
    }
    

    【讨论】:

      【解决方案4】:

      是的,你可以。确保使用$_GET 获取和$_POST。还有$_REQUEST 将两者合二为一。不鼓励使用它。

      【讨论】:

      • 向我解释一下有人用查询字符串覆盖POST 数据是如何造成威胁的?有人可以很容易地修改他们的POST 数据。如果您觉得使用POSTGET 相比更安全,那么您的脚本很可能会出现其他问题。
      • @Brad,这是一个很大的安全威胁,许多论坛都有记录。我添加了一个简单的例子来说明为什么会这样。当您想要获取数据时,您应该始终使用 GET,而当您想要发布数据时,您应该始终使用 POST。
      • 感谢 cmets。我忘记了饼干也包括在内。不知道 -1 是从哪里来的 :(
      • @bazmegakapa,我读到它仍然没有区别。在任何情况下,您都不应该信任来自客户端的数据。我绝对同意,如果您使用$_REQUEST,您需要注意,如果变量发生冲突,您的数据将被覆盖。但是,我认为在更具体的全局数组之一上使用 $_REQUEST 并没有任何内在危险。
      • @Brad 技术上不是。但建议初学者不要使用某些技术有时是不可避免的。如果他们不知道$_REQUEST 的危险,他们最好使用特定的超全局变量。
      【解决方案5】:

      当然。很简单:

      <?php
      
      if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        ... handle form submission here ...
      }
      
      ?>
      
      <html>
      
      <body>
      
      <form action="thisscript.php" method="post">
      ... form here ...
      </form>
      

      【讨论】:

        【解决方案6】:

        您不能从客户端使用这两种方法(两个不同的请求)并在 PHP 脚本的同一执行中查看所有参数。您需要选择 POST 或 GET。

        您可以使用来自同一请求的 GET 和 POST 数据,正如其他人所表示的那样。

        如果您需要整理来自多个不同请求的数据(出于任何原因),您需要自己存储和管理这些中间数据。

        【讨论】:

          【解决方案7】:

          是的,我年轻的学徒。就像更改表单中的 post 属性一样简单。

          <form method="post"....
          <input type="text" name="some_name"...
          

          <form method="get"....
          <input type="text" name="some_name"...
          

          并添加一个提交按钮。提交后,您可以访问存储在各自变量中的 HTTP 请求发布/GET 数据。

          $_POST['some_name'] or $_GET['some_name']
          

          【讨论】:

          • 他同时想要两种方法。
          • @bazmegakapa 啊,嗯.. 没有必要这样做。这实际上甚至没有意义,因为不可能同时从同一主机上的同一个盒子为相同的内容发出两个 http 请求。这与服务器/客户端关系背道而驰。
          • 是的,@Brad 很好地回答了这个问题。 可能以某种方式填充两个数组。我刚刚留下评论表明您没有回答问题。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-22
          • 2016-09-26
          • 1970-01-01
          • 1970-01-01
          • 2022-01-21
          • 1970-01-01
          相关资源
          最近更新 更多