我已经阅读并理解了有关执行顺序的答案,但我仍然不清楚POST是如何工作的,因为它是一个HTML命令。如果php在HTML之前执行,那么php变量如何从POST获取数据,除非它们被发送到第二个文件?
我意识到如果我使用$_SERVER['php_SELF']
,表单实际上是以一种递归方式发送给自己的。这部分让我感到困惑:($_SERVER["REQUEST_METHOD"] == "POST"
)如果POST方法在php之后执行,这条线怎么能评估?
我不介意使用$_SERVER['PHP_SELF']
,因为那时另一部分是有道理的,但是如果我想在mysql搜索中使用这些变量并根据结果加载后续表单怎么办?
显然我是新手,如果我的问题看起来很简单,我道歉但我可以在脑海中清楚地了解这些概念,我相信我能够继续前进。
答案 0 :(得分:1)
让我向您解释PHP的工作原理。
PHP是一个预处理器。这意味着它处理HTTP请求,并在处理请求中的数据后,将结果发送到浏览器。
该结果是HTTP响应,其中包含“标题”和“内容”。
内容就是您所看到的(图像,文本,html,CSS,脚本,甚至是PDF等二进制文件)。
标头是一组告诉请求状态的值。一些重要的标题是Content-Type
,它告诉要接收的内容的字节大小,以及状态代码,它将给出操作的结果。这很重要,因为这些值是具有不同含义的数字,如:
嗯...回到PHP如何处理所有事情:
echo
命令的内容(基本上;它有其他输出句子)。通过这种方式:您需要传递数据,因此您需要事先获得表单。
这就是GET
给我们的地方:它是从特定网址获取内容。给定一个URL,预计在许多后续GET请求之后,GET返回的内容“基本上相同”。这意味着:GET不会改变服务器资源,因此它是预先检索表单(由PHP脚本打印)的最佳候选者。
要通过在服务器中执行更改的资源处理数据,请使用POST方法。 post方法影响服务器,并且在后续请求之后不一定产生相同的输出。
GET和POST(我不在这里讨论PUT和DELETE,因为它们在表单中不受支持)应返回内容或返回HTTP响应,证明没有内容(如201,204,301,302或错误代码)。因此,当您访问像www.facebook.com这样的常规页面时,您获取资源(显示的页面),当您将数据发送到登录表单时,您将数据POST到服务器(服务器会话和缓存被更改)。
所以顺序是:Get(GET)资源(提供“工具”发回数据),显示资源(浏览器在浏览器中构建它),然后发送数据(POST)(填充)表格并按下提交按钮)。
因此,您将执行TWICE相同的脚本(一个用于GET,一个用于POST)。
脚本可以帮助您解决此问题:
<?php
//code before this line executes in the first and second access
if ($_SERVER["REQUEST_METHOD"] == "POST") {
//code here executes when you send data by pressing a Submit button
} else {
//code here executes when you access the url via link, address bar, or javascript url change methods
}
//code after this line executes in the first and second access
答案 1 :(得分:0)
当浏览器首次连接到该页面时,它很可能使用GET请求。如果您只是输入网址或点击链接,您将发送GET。此时,$_POST
为空。但是,$_SERVER["REQUEST_METHOD"]
包含&#34; GET&#34;。因此,如果您检查此变量,则可以区分访问该页面或提交表单的人。
现在该人提交表单(使用POST)并填充$_POST
超全局。当你检查请求方法时(可能带有if),它现在包含&#34; POST&#34;你可以放入处理输入的代码。
所以事件链看起来像:GET - &gt;执行PHP代码 - &gt;表格已提交 - &gt; POST - &gt; PHP代码再次执行。重要的区别在于,当您的代码执行时,您可以判断它是GET还是POST请求。如果它是GET请求,您可能希望显示HTML表单。如果是POST,您可能希望放弃生成表单,而是显示结果页面。当然,您也可以进行验证:如果表单条目无效,请重新显示表单并显示错误消息。