PHP 处理表单是 Web 开发的基础,核心是两个超全局变量 $_GET 和 $_POST,配合服务端验证保证数据的完整性。
GET 和 POST 的区别
GET:数据拼接在 URL 后面,适合获取数据、可收藏和分享,不适合传密码等敏感信息,长度有限制POST:数据放在请求体里,适合提交表单、上传文件,相对安全,长度基本不限
一个简单的表单:
<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">
姓名: <input type="text" name="name">
邮箱: <input type="text" name="email">
<input type="submit" value="提交">
</form>
读取表单数据
根据 method 的不同,用对应的超全局变量接收:
<?php
// method="post" 时
$name = $_POST['name'];
$email = $_POST['email'];
// method="get" 时
$name = $_GET['name'];
$email = $_GET['email'];
注意 $_SERVER['PHP_SELF'] 有被注入代码的风险,使用前必须用 htmlspecialchars() 处理,或者在 action 里留空让页面提交给自己。
必须字段验证
必须字段用 empty() 判断是否为空,为空时记录错误信息:
<?php
$name = $email = "";
$nameErr = $emailErr = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "姓名是必须字段";
} else {
$name = test_input($_POST["name"]);
}
if (empty($_POST["email"])) {
$emailErr = "邮箱是必须字段";
} else {
$email = test_input($_POST["email"]);
}
}
页面上显示错误:
姓名: <input type="text" name="name">
<span class="error">* <?php echo $nameErr; ?></span>
test_input 清理函数
对每个提交字段做统一的清理,去掉多余空格、反斜杠并转义特殊字符:
<?php
function test_input($data) {
$data = trim($data); // 去除首尾空格
$data = stripslashes($data); // 去除反斜杠
$data = htmlspecialchars($data); // 转义特殊字符,防 XSS
return $data;
}
格式验证示例
对邮箱、URL 等字段可以用正则做进一步验证:
<?php
// 验证邮箱格式
if (!empty($email) && !filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "邮箱格式不正确";
}
// 验证 URL 格式
if (!empty($website) && !preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i", $website)) {
$websiteErr = "URL 格式不正确";
}
小结
PHP 表单处理的固定套路是:先判断请求方法是否为 POST,再用 empty() 验证必须字段,所有数据经过 test_input() 清理,格式类字段用 filter_var() 或正则校验,最后把错误信息回显到表单旁边。养成在服务端做验证的习惯,客户端 JS 验证只能作为体验补充,不能替代服务端校验。