1. 创建HTML表单
设置action
和method
属性,包含输入字段和提交按钮。
<form method="post" action="process.php">
用户名:<input type="text" name="username">
密码:<input type="password" name="password">
<input type="submit" value="提交">
</form>
2. 处理表单数据(process.php)
使用$_POST
或$_GET
获取数据,并进行验证与过滤。
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 获取并清理数据
$username = htmlspecialchars($_POST['username'] ?? '');
$password = $_POST['password'] ?? '';
// 验证必填字段
if (empty($username) || empty($password)) {
die("用户名和密码不能为空!");
}
// 进一步处理(例如:数据库操作)
// 假设验证成功
echo "欢迎, $username!";
}
?>
3. 文件上传处理
设置表单的enctype="multipart/form-data"
,使用$_FILES
处理上传。
HTML表单:
<form action="upload.php" method="post" enctype="multipart/form-data">
选择文件:<input type="file" name="file">
<input type="submit" value="上传">
</form>
PHP处理(upload.php):
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$targetDir = "uploads/";
$targetFile = $targetDir . basename($_FILES['file']['name']);
$uploadOk = true;
// 检查文件类型
$allowedTypes = ['jpg', 'png', 'jpeg', 'gif'];
$fileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));
if (!in_array($fileType, $allowedTypes)) {
echo "仅支持JPG, PNG, JPEG, GIF文件。";
$uploadOk = false;
}
// 检查文件大小(最大2MB)
if ($_FILES['file']['size'] > 2000000) {
echo "文件过大,最大支持2MB。";
$uploadOk = false;
}
// 上传文件
if ($uploadOk && move_uploaded_file($_FILES['file']['tmp_name'], $targetFile)) {
echo "文件上传成功!";
} else {
echo "上传失败。";
}
}
?>
4. 安全注意事项
验证输入:使用
filter_var()
验证邮箱、URL等。防止XSS:用
htmlspecialchars()
转义输出。防止SQL注入:使用预处理语句(如PDO或MySQLi)。
CSRF防护:生成并验证Token。
5. 完整示例:登录表单
login.php(自提交表单):
<?php
session_start();
$error = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = $_POST['username'] ?? '';
$password = $_POST['password'] ?? '';
// 模拟验证(实际应查询数据库)
if ($username === 'admin' && $password === '123456') {
$_SESSION['user'] = $username;
header('Location: welcome.php');
exit;
} else {
$error = "用户名或密码错误!";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>登录</title>
</head>
<body>
<?php if ($error): ?>
<p style="color: red;"><?= htmlspecialchars($error) ?></p>
<?php endif; ?>
<form method="post">
用户名:<input type="text" name="username" required><br>
密码:<input type="password" name="password" required><br>
<input type="submit" value="登录">
</form>
</body>
</html>
关键点总结
表单属性:正确设置
method
(POST/GET)和action
。数据获取:使用
$_POST
、$_GET
或$_FILES
。输入验证:检查必填字段、格式、长度等。
安全处理:转义输出、使用预处理语句、限制文件上传。
用户体验:客户端验证(HTML5/JavaScript)和清晰错误提示。