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

了解如何在PHP中处理POST表单,php,forms,post,get,Php,Forms,Post,Get,这更多的是一个“理解”问题,而不是一个具体的例子。我来自Python/R/Scientific Computing的背景,在那里我通常编译东西或通过解释器进行通信。但是所有东西通常都在机器上,因此服务器/客户端之间没有“通信” 我现在正试图学习PHP(希望让用户从web界面运行我的脚本),我很好奇在发布过程中会发生什么 考虑以下脚本: <!DOCTYPE html> <html> <head> <title>Form Testing</tit

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

我现在正试图学习PHP(希望让用户从web界面运行我的脚本),我很好奇在发布过程中会发生什么

考虑以下脚本:

<!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>

形式测试
你最喜欢哪部电影?
我发现Submit按钮将相当于python字典(关联数组?)的内容发送到下一页。然后命令$\u POST['formSubmit']提取该值

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

带有get的想法似乎更清晰。URL是附加的,因此PHP引擎可以读取URL字符串并找到所有变量的值(我假设是这样的情况)


谢谢你的帮助

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>
GET
请求没有“body”部分-整个请求包含在URL中,而请求的其余部分则包含在URL头中

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

这将由以下形式生成:

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

PHP中还有
$\u REQUEST
,这是一个仅限PHP的内部构造,它将各种源(包括$\u GET和$\u POST)组合到一个单一的数据结构中,但其数据来自完全相同的源。

简言之,Apache(或其他)通过http请求为您填充它。您可以使用任何流量记录程序(包括Chrome的开发工具)观察http请求。您使用的是POST方法,但尝试使用
$\u GET
,将其更改为
$\u POST
。是的,它确实会创建一个关联数组,用于
$\u GET
$\u POST
,具体取决于URL和表单方法的方式。@Prix如果其表单的方法设置为
GET
,他的密码会有用的fine@AnidMonsurformSubmit并不是真的会失败这里有一个相关的问题,回答了关于如何提交$u 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>
$_GET['key'] = 'value'; // from the requested URL
$_POST['foo'] = 'bar'; // from the request body