表单处理
表单是 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 语法速查
常用条目速查,完整版见对应教程章节。可复制代码到在线运行中测试。
| 写法 / 语法 | 作用 |
|---|---|
<?php ... ?> | 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) | 写入文件 |