PHP - 没有操作的表单保持GET数据。形式与行动(相同的网址)不要

时间:2016-12-01 05:52:11

标签: php html forms post get

有点困惑。让我解释一下示例情况。

我在delete.php(普通PHP,没有框架)的表单中通过http get

接收参数

当我发送表单时,我一直认为GET值会因此丢失,如果我想保留这些值,我必须使用输入类型="隐藏" ,会议或任何其他机制。

但是使用PHP 7.0.8,Apache 2.4(肯定它不是版本问题只是想让你知道)我已经意识到以下几点:

a)如果表单的操作设置为delete.php(相同的URL),则提交表单后GET值将丢失。正如预期的那样

b)如果未设置表单的操作,则将数据发送到delete.php(按预期方式),但保留GET值。

我不知道为什么,我无法在任何文档或http espec中找到解释。

有人知道这种情况在哪里解释过吗?

这是代码

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>GET / POST TEST</title>
    <link rel="stylesheet" type="text/css" href=" ">
  </head>
  <body>

      <form method="post" action="get_post_test.php">
        Name<input type="text" name="name" required><br>
        LastName<input type="text" name="lastname" required><br>
        <p>
          <input type="submit">
        </p>
      </form>

      <?php

          if(isset($_GET['id'])) {
            echo "TENGO GET";
            var_dump($_GET);
          }

          if (isset($_POST['name'])) {
            echo "TENGO POST";
            var_dump($_POST);
          }
      ?>
  </body>
</html>

我通过链接获得$ _GET [&#39; id&#39;],如果:

a)action =&#34; get_post_test.php&#34;然后$ _GET [&#39; id&#39;]在表单提交时丢失(因为我预期因为get_post_test.php是当前文件的名称)

b)如果我没有设置任何操作$ _GET [&#39; id&#39;]在提交时仍然可用????????

亲切的问候。

1 个答案:

答案 0 :(得分:1)

让我们举个例子

  

案例1:定义行动时

     

定义操作后,表单将提交到该页面。

     

例如:如果您的操作为delete.php且网址为delete.php,那么   表单将按预期发送数据,URL将如下所示   delete.php?KEY=VALYE&...但表单的操作将是相同的   delete.php,因为您已定义它。这就是为什么以前的数据会在重新提交时丢失的原因

     

案例2:当操作留空时

     

当某个操作留空时表示操作将与之相同   网址。

     

例如:当您的网址为delete.php时,操作将与网址相同   delete.php这就是为什么表单会按预期发送数据。之后是URL   会变成这样delete.php?KEY=VALYE&...。当你重新提交   表单然后动作将与已经具有相同的url相同   得到价值。

希望这能帮助您理解