php和POST之间的执行顺序(html)

时间:2014-06-27 21:47:40

标签: php html mysql

我已经阅读并理解了有关执行顺序的答案,但我仍然不清楚POST是如何工作的,因为它是一个HTML命令。如果php在HTML之前执行,那么php变量如何从POST获取数据,除非它们被发送到第二个文件?

我意识到如果我使用$_SERVER['php_SELF'],表单实际上是以一种递归方式发送给自己的。这部分让我感到困惑:($_SERVER["REQUEST_METHOD"] == "POST")如果POST方法在php之后执行,这条线怎么能评估?

我不介意使用$_SERVER['PHP_SELF'],因为那时另一部分是有道理的,但是如果我想在mysql搜索中使用这些变量并根据结果加载后续表单怎么办?

显然我是新手,如果我的问题看起来很简单,我道歉但我可以在脑海中清楚地了解这些概念,我相信我能够继续前进。

2 个答案:

答案 0 :(得分:1)

让我向您解释PHP的工作原理。

PHP是一个预处理器。这意味着它处理HTTP请求,并在处理请求中的数据后,将结果发送到浏览器。

该结果是HTTP响应,其中包含“标题”和“内容”。

内容就是您所看到的(图像,文本,html,CSS,脚本,甚至是PDF等二进制文件)。

标头是一组告诉请求状态的值。一些重要的标题是Content-Type,它告诉要接收的内容的字节大小,以及状态代码,它将给出操作的结果。这很重要,因为这些值是具有不同含义的数字,如:

  • 200(反应良好)
  • 500和upper(服务器错误)
  • 400和更高(最多499,请求错误),
  • 300到399这可能意味着重定向。实际上301和302很重要,因为它们强制浏览器重定向到给定的URL。
  • 许多其他人喜欢100到199,但你很少使用它们。

嗯...回到PHP如何处理所有事情:

  1. 您的服务器(支持PHP)收到http://a.request.to/a/specific.url.php
  2. 服务器告诉目标是一个php文件,而不是返回它,它“执行”它。
  3. PHP脚本开始一个独立的执行(这意味着:脚本的执行完全独立于其他脚本的执行 - 甚至是对现在,之前和将来对同一脚本的其他访问)。 PHP脚本知道$ _SERVER中的PHP_SELF var之类的东西,因为它保存了被调用资源的uri。
  4. 当脚本执行时,它正在发送(除非使用特殊的配置或调用)脚本具有的每个echo命令的内容(基本上;它有其他输出句子)。
  5. 最后,内容将提供给客户。
  6. 通过这种方式:您需要传递数据,因此您需要事先获得表单。

    这就是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,您可能希望放弃生成表单,而是显示结果页面。当然,您也可以进行验证:如果表单条目无效,请重新显示表单并显示错误消息。