了解如何在PHP中处理POST表单

时间:2014-02-15 02:22:04

标签: php forms post get

这更像是一个“理解”问题,一个具体的例子。我来自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按钮之后,实际发生了什么?显然,页面必须在某处创建这个关联数组并以某种方式传递它,但我不确定它是如何做到的。

获得的想法似乎更清楚。附加了URL,因此PHP引擎可以读取URL字符串并找到所有变量的值(我假设发生的是什么)?

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

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请求没有“正文”部分 - 请求的整个请求包含在请求标题的其余部分中。

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

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)组合成一个单一的数据结构,但它的数据来自完全相同的源。 / p>