Z
ZHANK
表单与请求

表单处理实战

HTML 表单 + PHP 后端处理、数据验证、XSS 防御 htmlspecialchars

表单处理实战

表单是 Web 应用最基础的交互方式。正确处理表单包括:接收数据、验证、错误提示、安全输出。

学完本章你将: 掌握 HTML 表单 + PHP 后端处理、数据验证、XSS 防御。


完整的表单处理

php
<?php
$name = $email = "";
$errors = [];

if ($_SERVER["REQUEST_METHOD"] === "POST") {
    // 验证姓名
    $name = trim($_POST["name"] ?? "");
    if ($name === "") {
        $errors["name"] = "姓名不能为空";
    }

    // 验证邮箱
    $email = trim($_POST["email"] ?? "");
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $errors["email"] = "请输入有效邮箱";
    }

    // 无错误则处理
    if (empty($errors)) {
        // 保存到数据库或发送邮件...
        $success = "注册成功!";
    }
}
?>

<!-- HTML 表单 -->
<?php if (!empty($success)): ?>
    <p style="color:green"><?= htmlspecialchars($success) ?></p>
<?php endif; ?>

<form method="POST" action="">
    <input name="name" value="<?= htmlspecialchars($name) ?>"
           placeholder="姓名">
    <span style="color:red"><?= $errors["name"] ?? "" ?></span>

    <input name="email" value="<?= htmlspecialchars($email) ?>"
           placeholder="邮箱">
    <span style="color:red"><?= $errors["email"] ?? "" ?></span>

    <button type="submit">提交</button>
</form>

XSS 防御

php
<?php
// ❌ 危险——直接输出用户输入
echo $_GET['name'];

// ✅ 安全——HTML 转义
echo htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');
// <script> 会变成 &lt;script&gt;——无法执行

⚠️ 铁律:任何输出到 HTML 的用户数据都必须经过 htmlspecialchars() 处理。