表单处理

PHP 教程 · 第 10 章 · 7 次浏览

表单是 Web 应用收集用户输入的主要方式。PHP 通过 $_GET(URL 参数)和 $_POST(请求体)接收数据。

method 选择

  • GET:数据在 URL 中,适合搜索、分页等无副作用操作;
  • POST:数据在请求体中,适合登录、注册、提交数据。

安全要点

  • htmlspecialchars() 转义输出,防 XSS;
  • trim() 清理首尾空格;
  • 必填校验:empty() 判断;
  • SQL 注入防护见 MySQL 章节(使用预处理语句);
  • 文件上传要校验类型和大小。

代码示例

<!-- form.html -->
<form action="handle.php" method="post">
    <p>用户名:<input type="text" name="username"></p>
    <p>邮箱:<input type="email" name="email"></p>
    <p>留言:<textarea name="message" rows="4"></textarea></p>
    <p><input type="submit" value="提交"></p>
</form>

<?php
// handle.php
if ($_SERVER["REQUEST_METHOD"] === "POST") {
    // 接收 + 清理 + 转义
    $username = htmlspecialchars(trim($_POST["username"] ?? ""));
    $email    = htmlspecialchars(trim($_POST["email"] ?? ""));
    $message  = htmlspecialchars(trim($_POST["message"] ?? ""));

    // 必填校验
    if ($username === "" || $email === "") {
        echo "用户名和邮箱为必填项";
        exit;
    }

    // 邮箱格式校验
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        echo "邮箱格式不正确";
        exit;
    }

    echo "提交成功!<br>";
    echo "用户名:$username<br>";
    echo "邮箱:$email<br>";
    echo "留言:$message";
}
?>
📚 PHP 语法速查
常用条目速查,完整版见对应教程章节。可复制代码到在线运行中测试。
写法 / 语法作用
&lt;?php ... ?&gt;PHP 代码块标记
echo "hello";输出字符串
$name = "张三";变量(以 $ 开头,无需声明类型)
if ($x > 0) { } else { }条件判断
foreach ($arr as $k => $v) { }遍历数组(最常用)
for ($i = 0; $i < 10; $i++) { }计数循环
function fn($a) { return $a; }定义函数
array("a" => 1)关联数组(PHP 的"字典")
count($arr)数组长度
isset($x) / empty($x)变量是否存在 / 是否为空
$_GET["key"] / $_POST["key"]获取表单 / 查询参数
$_SESSION["user"]会话数据读写(需 session_start())
$_COOKIE["key"]读取 Cookie
header("Location: /index.php");页面跳转
mysqli_connect($host, $user, $pass, $db)连接 MySQL(旧接口,新项目用 PDO)
new PDO($dsn, $user, $pass)连接 MySQL(推荐,防 SQL 注入)
$stmt->prepare($sql)预处理语句(防 SQL 注入)
htmlspecialchars($str)HTML 转义(防 XSS)
strlen($s) / mb_strlen($s)字符串长度
explode(",", $s) / implode(",", $arr)字符串拆分 / 拼接
json_encode($arr) / json_decode($s)数组与 JSON 互转
include / require引入文件(require 报错即停)
date("Y-m-d H:i:s")当前时间格式化
$_FILES["file"]文件上传数据
file_put_contents($path, $data)写入文件