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

标签 php html mysql

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

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

我不介意使用 $_SERVER['PHP_SELF'] 因为这样另一部分就有意义了,但是,如果我想在 mysql 搜索中使用这些变量并加载根据结果​​形成后续表格。

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

最佳答案

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

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

该结果是一个 HTTP 响应,其中包含“ header ”和“内容”。

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

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

  • 200( react 良好)
  • 500 及以上(服务器错误)
  • 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. 最后,将内容提供给客户端。

这样:你需要数据来传递,所以你事先需要一个表单。

这就是 GET 出现的地方:它是从特定 URL 获取内容。给定一个 URL,预计在多次后续 GET 请求后 GET 返回的内容“基本相同”。这意味着:GET 不会更改服务器资源,因此它是预先检索表单(将由 PHP 脚本打印)的最佳选择。

要通过在服务器中执行更改的资源处理数据,您可以使用 POST 方法。 post方法会影响服务器,后续请求后不一定会产生相同的输出。

GET 和 POST(我不在这里讨论 PUT 和 DELETE,因为它们在表单中不受支持)都应该返回内容或返回一个 HTTP 响应,证明没有内容(例如 201、204、301、302 或错误代码)。因此,当您访问像 www.facebook.com 这样的普通页面时,您会获取资源(显示的页面),而当您将数据发送到登录表单时,您会将数据发布到服务器(服务器 session 和缓存将被更改)。

所以顺序是:获取(GET)资源(它提供了发送回数据的“工具”),显示资源(浏览器在您的浏览器中构建它),然后发送回数据(POST)(您填充表单并按提交按钮)。

因此,您将执行两次相同的脚本(一次用于 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

关于php - php 和 POST (html) 之间的执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24461244/

相关文章:

PHP Composer 不会使用 php 5.6 安装 Drush : phpunit/phpunit 4. 8.x 需要 ext-dom

php - 我想自定义我的 yii URL

jQuery fadeIn 和 fadeOut 元素的兄弟

javascript - 如何随时间改变背景不透明度?

MySQL : Selecting alternative field if given field is empty

php 缩短显示的文本量

php - MYSQL 逗号分隔列表,可以添加和删除值吗?

php - 使用 bitnami wapp 时我们应该在哪里保存 html 和 php 文件?

javascript - 发出AJAX请求时如何显示进度?

mysql - 从另一个表中选择列并创建一个列