PHP GET 和 POST

在本教程中,你将学习如何使用 HTTP GET 和 POST 方法向服务器发送信息,并使用 PHP 检索它们。

向服务器发送信息的方法

Web 浏览器通常使用两种 HTTP(超文本传输​​协议)方法之一(GET 和 POST)与服务器通信。两种方法都以不同方式传递信息,并具有不同的优点和缺点,如下所述。

GET 方法

在 GET 方法中,数据作为 URL 参数发送,这些参数通常是由&符号(&) 分隔的名称和值对的字符串。通常,具有 GET 数据的 URL 将如下所示:

http://www.example.com/action.php?name=john&age=24

URL 中的粗体部分是 GET 参数,斜体部分是这些参数的值。大于一个的 parameter=value 参数可通过 & 符号级联被嵌入 URL。人们只能通过 GET 方法发送简单的文本数据。

使用 GET 方法的优点和缺点

  • 由于 GET 方法发送的数据显示在 URL 中,因此可以使用特定查询字符串值为页面添加书签。
  • GET 方法不适合传递用户名和密码等敏感信息,因为这些信息在 URL 查询字符串中完全可见,并且可能作为访问页存储在客户端浏览器的内存中。
  • 由于 GET 方法将数据分配给服务器环境变量,因此 URL 的长度是有限的。因此,要发送的总数据存在限制。

PHP 提供了超全局变量 $_GET 来访问通过 URL 发送的所有信息或使用 method="get" 通过 HTML 表单提交信息。

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Example of PHP GET method</title>
</head>
<body>
<?php
if(isset($_GET["name"])){
    echo "<p>Hi, " . $_GET["name"] . "</p>";
}
?>
<form method="get" action="<?php echo $_SERVER["PHP_SELF"];?>">
    <label for="inputName">Name:</label>
    <input type="text" name="name" id="inputName">
    <input type="submit" value="Submit">
</form>
</body>

POST 方法

在 POST 方法中,数据作为包在与处理脚本的单独通信中发送到服务器。通过 POST 方法发送的数据在 URL 中不可见。

使用 POST 方法的优点和缺点

  • 它比 GET 更安全,因为用户输入的信息在 URL 查询字符串或服务器日志中永远不可见。
  • 可以传递的数据量有一个更大的限制,一个人可以使用 POST 发送文本数据和二进制数据(上传文件)。
  • 由于 POST 方法发送的数据在 URL 中不可见,因此无法使用特定查询为页面添加书签。

就像 $_GET ,PHP 提供另一个超全局变量 $_POST 来访问通过 post 方法发送的所有信息或通过 method="post" 提交 HTML 表单。

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Example of PHP POST method</title>
</head>
<body>
<?php
if(isset($_POST["name"])){
    echo "<p>Hi, " . $_POST["name"] . "</p>";
}
?>
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
    <label for="inputName">Name:</label>
    <input type="text" name="name" id="inputName">
    <input type="submit" value="Submit">
</form>
</body>

$_REQUEST 变量

PHP 提供了另一个超全局变量 $_REQUEST ,它包含变量 $_GET$_POST 变量的值以及 $_COOKIE 超全局变量的值。

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Example of PHP $_REQUEST variable</title>
</head>
<body>
<?php
if(isset($_REQUEST["name"])){
    echo "<p>Hi, " . $_REQUEST["name"] . "</p>";
}
?>
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
    <label for="inputName">Name:</label>
    <input type="text" name="name" id="inputName">
    <input type="submit" value="Submit">
</form>
</body>

你将在高级部分中了解有关 PHP cookie表单处理的更多信息。

注: 超全局变量 $_GET$_POST 并且 $_REQUEST 是内置变量,在整个脚本中都是有效的。