【问题标题】:Understanding how POST forms are processed in PHP了解 PHP 中如何处理 POST 表单
【发布时间】:2014-03-14 14:18:29
【问题描述】:

这更像是一个“理解”问题,而不是一个具体的例子。我来自 Python/R/科学计算背景,我通常在其中编译东西或通过解释器进行通信。但是一切通常都在机器上,因此服务器/客户端之间没有“通信”。

我现在正在尝试学习 PHP(希望让用户从 Web 界面运行我的脚本)并且很好奇 POST 期间会发生什么。

考虑以下脚本:

<!DOCTYPE html>
<html>
<head>
<title>Form Testing</title>
<meta charset="utf-8"/>
</head>
<body>

<?php
  if($_POST['formSubmit'] == "Submit")  {
    echo "Post Status is: ".$_POST['formSubmit']."\n";
    $varMovie = $_GET['formMovie'];
     echo "Your Favorite Movie Was: ".$varMovie;
  }else{
  echo "Post Status is: ".$_GET['formSubmit'] ."\n";

  }
?>

<form action="index.php" method="post">
    Which is your favorite movie?   
    <input type="text" name="formMovie" maxlength="50">
    <input type="submit" name="formSubmit" value="Submit">
</form>

</body>
</html>

我知道提交按钮将相当于 python 字典(关联数组?)发送到下一页。然后命令 $_POST['formSubmit'] 提取值。

但是当我点击提交按钮和页面加载之间的值在哪里。换句话说,在 sumbit 按钮之后,实际发生了什么?显然,页面必须在某处创建这个关联数组并以某种方式传递它,但我不确定它是如何做到的。

get 的想法似乎更清晰。附加了 URL,以便 PHP 引擎可以读取 URL 字符串并找到所有变量的值(我假设会发生这种情况)?

感谢您的帮助!

【问题讨论】:

  • 简而言之,Apache(或其他)从 http 请求中为您填充它。您可以使用任何流量记录程序(包括 Chrome 的开发工具)观察该 http 请求。
  • 您正在使用 POST 方法,但尝试使用 $_GET 读取它,请将其更改为 $_POST。是的,它确实创建了一个关联数组到 $_GET$_POST,具体取决于您的 URL 和表单方法的方式。
  • @Prix 如果他的表单方法设置为GET,他的代码可以正常工作
  • @AnidMonsur 并不是表单提交会失败
  • 这是一个相关问题,其中包含有关如何提交 $_POST 参数的答案。 stackoverflow.com/questions/4007969/…

标签: php forms post get


【解决方案1】:

HTTP GET 通过查询字符串中的 url 传递其所有数据:

http://example.com/script.php?key=value
                              ^^^^^^^^^^---GET query parameters

这可以通过以下方式完成:

<form method="GET" action="http://example.com/script.php"
   <input type="hidden" name="key" value="value" />
   <input type="submit" />
</form>

此 URL 成为 HTTP 请求标头的一部分:

GET /script.php?key=value HTTP/1.1
Host: example.com
Header1: value1
Header2: value2
Cookie: something=whatever

GET 请求没有“正文”部分 - 请求的全部内容包含在 URL 中,并包含请求的其余标头。

如果需要,HTTP POST 也可以有查询参数,但通常通过 POST 操作提交的任何内容都会在 HTTP 请求“正文”部分中发送数据:

POST /script.php?key=value HTTP/1.1
Host: example.com
Header1: value1
Header2: value2
Cookie: something=whatever

foo=bar

这将由以下形式生成:

<form method="POST" action="/script.php?key=value" />
   <input type="hidden" name="foo" value="bar" />
   <input type="submit" />
</form>

注意标题和键 foo 之间的空白行。该行是网络服务器如何知道标头何时完成以及正文何时开始。

对于这个特定的示例 POST 请求,您最终会得到:

$_GET['key'] = 'value'; // from the requested URL
$_POST['foo'] = 'bar'; // from the request body

在 PHP 中还有 $_REQUEST,它是一个仅限 PHP 的内部结构,它将各种来源(包括 $_GET 和 $_POST)组合成一个单一的整体数据结构,但它的数据来自完全相同的来源。

【讨论】:

  • True 'nuff,但它是 http 规范的一个静默部分,而不是应该依赖的功能
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
  • 2010-10-18
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 2015-12-28
相关资源
最近更新 更多