Php 简明教程

PHP - GET & POST

由于 PHP 主要用于 Web 应用程序开发,因此浏览器客户端发送的数据主要与 GET 和 POST 类型的 HTTP 请求方法有关。HTTP 协议还定义了向服务器发送请求的其他方法。除了 GET 和 POST 方法之外,还有 PUT、DELETE、HEAD 和 OPTIONS 方法。在本章中,我们主要研究 PHP 如何处理 GET 和 POST 方法。

The GET Method

GET 方法发送编码的用户信息,并将其附加到页面请求。页面和编码信息由 ? 字符分隔。

http://www.test.com/index.htm?name1=value1&name2=value2
  1. GET 方法生成一个较长的字符串,它显示在服务器日志中和浏览器的 Location: 方框中。

  2. GET 方法只能发送最多 1024 个字符。

  3. 如果你要向服务器发送密码或其他敏感信息,请切勿使用 GET 方法。

  4. GET 不能用于向服务器发送二进制数据,例如图像或 word 文档。

  5. 通过 QUERY_STRING 环境变量可以访问 GET 方法发送的数据。

  6. PHP 提供了 $_GET 关联数组来使用 GET 方法访问所有发送的信息。

通过将源代码放入 test.php 脚本中,尝试以下示例。

<?php
   if( $_GET["name"] || $_GET["age"] ) {
      echo "Welcome ". $_GET['name']. "<br />";
      echo "You are ". $_GET['age']. " years old.";

      exit();
   }
?>
<form action = "<?php <b>$_PHP_SELF</b> ?>" method = "GET">
   Name: <input type = "text" name = "name" />
   Age: <input type = "text" name = "age" />
   <input type = "submit" />
</form>

它将产生以下结果 −

forms

The POST Method

POST 方法通过 HTTP 标头传输信息。该信息已被编码,就像 GET 方法中所描述的那样,并放入名为 QUERY_STRING 的标头中。

  1. POST 方法对要发送的数据量没有任何限制。

  2. POST 方法可用于发送 ASCII 和二进制数据。

  3. POST 方法发送的数据会通过 HTTP 标头,因此安全性取决于 HTTP 协议。通过使用安全 HTTP,你可以确保你的信息安全。

  4. PHP 提供了 $_POST 关联数组来使用 POST 方法访问所有发送的信息。

通过将源代码放入 test.php 脚本中,尝试以下示例。

<?php
   if( $_POST["name"] || $_POST["age"] ) {
      if (preg_match("/[^A-Za-z'-]/",$_POST['name'] )) {
         die ("invalid name and name should be alpha");
      }
      echo "Welcome ". $_POST['name']. "<br />";
      echo "You are ". $_POST['age']. " years old.";

      exit();
   }
?>
<form action = "<?php <b>$_PHP_SELF</b> ?>" method = "POST">
   Name: <input type = "text" name = "name" />
   Age: <input type = "text" name = "age" />
   <input type = "submit" />
</form>

它将产生以下结果 −

forms

Difference between GET and POST

GET 方法和 POST 方法之间的主要区别在于,虽然附加到 URL 的请求参数在浏览器的 URL 中公开出来,但 POST 数据包含在消息正文中,并且不会在 URL 中显示出来。因此,GET 方法不应用于将敏感数据发送到服务器。

其次,GET 方法中的请求数据不能超过 2048 个字符,只能由 ASCII 字符组成,而使用 POST 方法时,对请求数据没有限制,也可以是二进制的(POST 数据的默认最大大小由 php.ini 文件中的 post_max_size 设置决定)

PHP 提供了以下三个 superglobals 来检索和处理请求参数 −

  1. $_GET − 用于使用 GET 方法访问所有发送信息的一个关联数组。

  2. $_POST − 用于使用 POST 方法访问所有发送信息的一个关联数组。

  3. $_REQUEST − 用于获取通过 GET 和 POST 方法发送的表单数据的结果的一个关联数组。

$_GET Array

你可以在查询字符串中以直接附加到 URL 的形式传递请求参数。

将以下 PHP 脚本保存在文档根文件夹 ( htdocs ) 中,并将其命名为“hello.php” −

<?php
   echo "First name: " . $_REQUEST['first_name'] . " " .
      "Last Name: " . $_REQUEST['last_name'] . "";
?>

在浏览器窗口中输入 http://localhost/hello.php?first_name=Amar&last_name=Sharma 作为 URL(确保 PHP 服务器正在运行)。

$_GET 数组通过请求填充,输出显示如下 −

First name: Amar Last Name: Sharma

如果 HTML 表单数据的方法属性为 GET,您也可以使用该数据填充 $_GET 数组。

使用以下 HTML 表单收集数据并将其发送到“hello.php”。在文档根目录下,将以下脚本另存为“hello.html” −

<form action="hello.php" method="get">
   First Name: <input type="text" name="first_name"/>  <br/>
   Last Name: <input type="text" name="last_name" />
   <input type="submit" value="Submit" />
</form>

在浏览器中,输入 URL“http://localhost/hello.html” −

php get post

您应该会在浏览器窗口中获取类似 output 的内容。

$_POST Array

使用 POST 请求向服务器发送数据的最简单方法是将 HTML 表单的方法属性指定为 POST。假设浏览器中的 URL 为“http://localhost/hello.php”,那么在 HTML 表单“hello.html”中将 method=POST 设置为前面的示例 −

<form action="hello.php" method="post">
   First Name: <input type="text" name="first_name"/>  <br/>
   Last Name: <input type="text" name="last_name" />
   <input type="submit" value="Submit" />
</form>

“hello.php”脚本(位于文档根目录文件夹中)在 $_POST 数组中检索表单数据并将其作为 HTTP 响应呈现给浏览器 −

<?php
   echo "First name: " . $_POST['first_name'] . " " .
      "Last Name: " . $_POST['last_name'] . "";
?>

在浏览器中打开 "http://localhost/hello.html" 。输入的数据将由服务器检索,然后像前面的示例一样呈现在客户端。