PHP处理表单需确保HTML中form的method和action正确、输入字段有name属性;用isset()和!empty()判断数据存在与非空,filter_input()或filter_var()过滤,预处理语句防SQL注入。

PHP处理表单数据的核心在于:表单用method="post"(或get)提交,PHP脚本通过$_POST或$_GET超全局数组获取值,再做验证、过滤、使用或存储。
表单HTML怎么写才和PHP配合好
确保表单的action指向处理脚本(可以是自身),method明确指定,每个输入字段有name属性——PHP靠这个name取值,不是id或class。
例如:
立即学习“PHP免费学习笔记(深入)”;
注意:
• 多选框、多选下拉需加[](如hobbies[]),PHP才能收到数组
• textarea、radio同理,必须设name
PHP怎么安全地获取并判断表单数据
不能直接用$_POST['xxx']——可能未提交、为空或被篡改。先检查是否存在,再过滤,再验证逻辑。
- 用
isset($_POST['username'])确认字段已提交 - 用
!empty($_POST['username'])确认不为空(比== ''更稳妥) - 用
filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING)过滤XSS风险内容(PHP 8.1后FILTER_SANITIZE_STRING已废弃,推荐FILTER_SANITIZE_SPECIAL_CHARS) - 对数字用
filter_var($_POST['age'], FILTER_VALIDATE_INT)校验是否为合法整数
常见错误和避坑提醒
• 表单没写method="post"却在PHP里读$_POST → 改成$_GET或补上method
• 字段name拼错(比如写成user_name但PHP读username)→ 前后保持一致
• 直接把$_POST数据插入数据库 → 必须预处理(PDO/MySQLi prepared statement)或至少用mysqli_real_escape_string()
• 忘记处理数组型字段(如hobbies[])→ 要用is_array()判断再遍历
一个简洁可用的处理示例(handle.php)
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_SPECIAL_CHARS);
$city = filter_input(INPUT_POST, 'city', FILTER_SANITIZE_SPECIAL_CHARS);
$hobbies = $_POST['hobbies'] ?? [];
if (is_array($hobbies)) {
$hobbies = array_map('filter_var', $hobbies, array_fill(0, count($hobbies), FILTER_SANITIZE_SPECIAL_CHARS));
}
if ($username && $city) {
echo "您好,{$username}!您来自{$city},爱好:" . implode('、', $hobbies);
} else {
echo "请填写完整信息";
}
}
?>
这个例子做了存在性检查、基础过滤、数组安全处理,适合入门理解流程。
基本上就这些。表单处理不复杂,但细节容易忽略——关键是每一步都别跳过校验和过滤。











