首页 / PHP 入门教程 / PHP 表单处理基础

PHP 入门教程

PHP 表单处理基础

本教程共 65 篇 · 第 23 篇 · 更新于 2026-07-24 · 约 5 分钟阅读

PHPPHP8表单处理GETPOSTXSS安全

23. PHP 表单处理基础

本节目标:掌握 HTML 表单与 PHP 的配合方式,学会用 $_GET$_POST 接收用户数据,并了解基本的安全处理。

Web 应用的核心就是与用户交互。用户通过表单提交数据,PHP 负责接收并处理。本章带你从零搭建第一个可运行的表单程序。

23.1 表单的基本结构

HTML 表单用 <form> 标签定义,有两个关键属性:

  1. action:数据提交到哪个 PHP 文件处理
  2. method:数据传输方式,常用 GETPOST
<!-- form.html -->
<!DOCTYPE html>
<html>
<body>
    <form action="welcome.php" method="post">
        姓名:<input type="text" name="username"><br>
        年龄:<input type="text" name="age"><br>
        <input type="submit" value="提交">
    </form>
</body>
</html>

对应的 welcome.php

<?php
$name = $_POST["username"] ?? "访客";
$age  = $_POST["age"] ?? 0;

echo "欢迎 {$name}!<br>";
echo "你今年 {$age} 岁。";
Tip

PHP 8.0 起可用 ??(空合并运算符)给未填写的字段设置默认值,避免报错。

23.2 GET 与 POST 的区别

特性GETPOST
数据位置URL 参数中(?name=值)HTTP 请求体中
数据长度受浏览器限制(约 2KB)理论上无限制
安全性低,数据暴露在地址栏较高,不在地址栏显示
用途搜索、筛选、幂等操作登录、提交、修改数据
缓存会被浏览器缓存不会缓存

使用 $_GET 接收数据

<?php
// 访问:search.php?keyword=php&page=2
$keyword = $_GET["keyword"] ?? "";
$page    = (int) ($_GET["page"] ?? 1);

echo "搜索词:{$keyword}<br>";
echo "当前页:{$page}";

使用 $_POST 接收数据

<?php
if ($_SERVER["REQUEST_METHOD"] === "POST") {
    $email = $_POST["email"] ?? "";
    $pwd   = $_POST["password"] ?? "";

    // 后续进行验证...
}
?>
Note

判断 REQUEST_METHOD 可以确保代码只在表单提交后执行,避免首次打开页面就处理空数据。

23.3 超级全局变量简介

$_GET$_POST 都是 PHP 的超级全局变量(详见第 15 章),在任何作用域都可直接使用,无需 global 声明。

<?php
function showInput() {
    // 超级全局变量无需 global
    print_r($_POST);
}
showInput();

23.4 基础安全处理

用户输入不可信任,接收后要先清理。推荐两步处理:

  1. 去空白trim()
  2. 转实体htmlspecialchars()
<?php
function cleanInput(string $data): string {
    $data = trim($data);
    $data = htmlspecialchars($data, ENT_QUOTES, "UTF-8");
    return $data;
}

$name = cleanInput($_POST["name"] ?? "");
echo "清理后的姓名:{$name}";
Note

htmlspecialchars()<>"'& 转为 HTML 实体,有效防止 XSS 攻击。PHP 8.1 起默认编码已为 UTF-8,但显式指定更安全。

23.5 小练习

创建一个简单的计算器表单,接收两个数字,用 PHP 计算并输出它们的和。

<?php
$num1 = (float) ($_POST["num1"] ?? 0);
$num2 = (float) ($_POST["num2"] ?? 0);
$sum  = $num1 + $num2;
?>

<form method="post">
    <input type="number" name="num1" step="0.1" value="<?= htmlspecialchars((string)$num1) ?>">
    +
    <input type="number" name="num2" step="0.1" value="<?= htmlspecialchars((string)$num2) ?>">
    <input type="submit" value="计算">
    = <?= $sum ?>
</form>
Tip

<?= ... ?><?php echo ... ?> 的简写,PHP 8 中完全可用,输出更简洁。


来源:参考了 runoob「PHP 表单」、w3cschool「PHP 表单」等,改写后所得。