本文目录导读:

在 PHP 中检查提交信息(通常指的是表单提交的数据)有多种方法,下面我来详细说明:
检查表单是否提交
检查请求方法
// 检查是否是 POST 请求
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 处理 POST 数据
}
// 检查是否是 GET 请求
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
// 处理 GET 数据
}
检查特定按钮是否被点击
// 表单中有一个 name="submit" 的提交按钮
if (isset($_POST['submit'])) {
// 表单已提交
}
// 或者在 HTML 中这样写
// <button type="submit" name="submit">提交</button>
检查提交的字段
检查字段是否存在
// 检查单个字段
if (isset($_POST['username'])) {
$username = $_POST['username'];
}
// 检查多个字段
$required_fields = ['username', 'email', 'password'];
foreach ($required_fields as $field) {
if (!isset($_POST[$field]) || empty(trim($_POST[$field]))) {
echo "字段 {$field} 不能为空";
break;
}
}
检查非空值
// 使用 empty() 检查(包含空字符串、0、null、false、空数组)
if (!empty($_POST['username'])) {
// 用户名不为空
}
// 使用 trim() 去除空格后检查
if (isset($_POST['username']) && trim($_POST['username']) !== '') {
// 用户名不为空且去除空格后不为空
}
完整的表单验证示例
<?php
// 初始化错误数组
$errors = [];
$success = '';
// 检查表单是否提交
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// 验证用户名
if (empty(trim($_POST['username'] ?? ''))) {
$errors[] = "用户名不能为空";
} else {
$username = trim($_POST['username']);
// 检查长度
if (strlen($username) < 3 || strlen($username) > 20) {
$errors[] = "用户名长度必须在3-20个字符之间";
}
}
// 验证邮箱
if (empty($_POST['email'] ?? '')) {
$errors[] = "邮箱不能为空";
} elseif (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$errors[] = "邮箱格式不正确";
}
// 验证密码
if (empty($_POST['password'] ?? '')) {
$errors[] = "密码不能为空";
} elseif (strlen($_POST['password']) < 6) {
$errors[] = "密码长度至少6位";
}
// 确认密码
if (($_POST['password'] ?? '') !== ($_POST['confirm_password'] ?? '')) {
$errors[] = "两次输入的密码不一致";
}
// 检查是否有错误
if (empty($errors)) {
// 处理数据(如保存到数据库)
$success = "注册成功!";
// 重定向或其他操作
}
}
?>
<!-- HTML 表单 -->
<form method="POST" action="">
<!-- 显示错误信息 -->
<?php if (!empty($errors)): ?>
<div class="errors">
<?php foreach ($errors as $error): ?>
<p><?php echo htmlspecialchars($error); ?></p>
<?php endforeach; ?>
</div>
<?php endif; ?>
<?php if (!empty($success)): ?>
<div class="success">
<p><?php echo htmlspecialchars($success); ?></p>
</div>
<?php endif; ?>
<input type="text" name="username" placeholder="用户名"
value="<?php echo htmlspecialchars($_POST['username'] ?? ''); ?>">
<input type="email" name="email" placeholder="邮箱"
value="<?php echo htmlspecialchars($_POST['email'] ?? ''); ?>">
<input type="password" name="password" placeholder="密码">
<input type="password" name="confirm_password" placeholder="确认密码">
<button type="submit" name="submit">提交</button>
</form>
不同类型字段的验证
// 数字验证
if (isset($_POST['age']) && filter_var($_POST['age'], FILTER_VALIDATE_INT) !== false) {
// 是有效的整数
}
// URL验证
if (isset($_POST['website']) && filter_var($_POST['website'], FILTER_VALIDATE_URL) !== false) {
// 是有效的 URL
}
// IP地址验证
if (isset($_POST['ip']) && filter_var($_POST['ip'], FILTER_VALIDATE_IP) !== false) {
// 是有效的 IP
}
// 正则表达式验证(如手机号)
if (preg_match('/^1[3-9]\d{9}$/', $_POST['phone'])) {
// 有效的手机号
}
防止重复提交
// 使用 Token 防止重复提交
session_start();
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (isset($_POST['token']) && $_POST['token'] === $_SESSION['form_token']) {
// 有效的提交,处理数据
// 处理完后删除 token
unset($_SESSION['form_token']);
} else {
// 重复提交或令牌无效
echo "无效的提交!";
}
}
// 生成表单时
$_SESSION['form_token'] = md5(uniqid(rand(), true));
?>
<input type="hidden" name="token" value="<?php echo $_SESSION['form_token']; ?>">
安全检查
// HTML 转义输出,防止 XSS
echo htmlspecialchars($_POST['comment']);
// 清理用户输入
$clean_username = filter_var($_POST['username'], FILTER_SANITIZE_STRING);
// 数据库查询使用预处理语句防止 SQL 注入
$stmt = $pdo->prepare("INSERT INTO users (username) VALUES (?)");
$stmt->execute([$_POST['username']]);
| 函数 | 用途 |
|---|---|
isset() |
检查变量是否存在 |
empty() |
检查变量是否为空 |
trim() |
去除字符串首尾空格 |
htmlspecialchars() |
HTML 转义,防止 XSS |
filter_var() |
过滤和验证数据 |
preg_match() |
正则表达式验证 |
这些方法可以组合使用,根据具体需求选择合适的检查方式,记得始终验证用户输入,确保数据的安全性和完整性。