PHP 表单教程:GET 与 POST 提交、必须字段与验证

· PHP笔记 get请求和post请求 html 表单验证 PHP 入门笔记 · 0 阅读 · 约 5 分钟

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 验证只能作为体验补充,不能替代服务端校验。