如何用HTML表单填充$ _POST之类的PHP超全局变量?

时间:2019-04-12 20:45:27

标签: php html cgi

我了解,如果我创建一个HTML表单,并将action属性设置为PHP脚本,则可以通过超级全局$ _POST访问POST数据。我的问题是这是怎么发生的?

如果我有一个像这样的简单表格:

<form action="script.php" method="POST">
  <input type="text" name="fname">
  <input type="submit" value="Submit">
</form>

还有一个简单的脚本,如下所示:

<?php
    echo $_POST["name"];
?>

什么机制将POST请求中的原始表单数据带入PHP?有某种CGI脚本吗? Ruby说,另一种语言的等效含义是什么?

2 个答案:

答案 0 :(得分:1)

  

通过变量传递给当前脚本的变量关联数组   使用application / x-www-form-urlencoded或   multipart / form-data作为请求中的HTTP Content-Type。

     

$ HTTP_POST_VARS包含相同的初始信息,但不是   超全球(请注意,$ HTTP_POST_VARS和$ _POST是不同的   变量,而PHP照这样处理它们)

https://www.php.net/manual/en/reserved.variables.post.php

这只是一个超全局变量,PHP解释器将存储所有发布数据,直到清除下一个请求为止。

答案 1 :(得分:1)

通过浏览器提交表单时,浏览器将获取数据并对其进行序列化,然后将其通过HTTP / HTTPS请求发送至Web服务器。
对于GET表单,数据会序列化并附加到URL中的字符串查询中,例如myphp.php?field1=foo&field2=bar
对于POST数据,它被插入到请求的主体中。

然后,根据请求的类型,PHP引擎将解析接收到的数据,为方便起见,URL对其进行解码,并用它填充超全局变量。在上面的示例中,数据将如下所示:

$_GET = [
    'field1' => 'foo',
    'field2' => 'bar'
];

与PERL这样的语言相比,这是PHP的一个不错的功能,它迫使您自己解析输入数据。

Additionally PHP offers a way to read the input stream directly for the raw data which you would normally receive.