php实现表单
PHP 表单基础实现
创建一个简单的 PHP 表单需要 HTML 表单结构和 PHP 处理脚本。以下是一个完整的示例:
HTML 表单部分 (form.html)
<form action="process.php" method="post">
<label for="name">姓名:</label>
<input type="text" id="name" name="name" required>
<label for="email">邮箱:</label>
<input type="email" id="email" name="email" required>
<label for="message">留言:</label>
<textarea id="message" name="message" required></textarea>
<input type="submit" value="提交">
</form>
PHP 处理脚本 (process.php)
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = htmlspecialchars($_POST['name']);
$email = htmlspecialchars($_POST['email']);
$message = htmlspecialchars($_POST['message']);
echo "姓名:$name<br>";
echo "邮箱:$email<br>";
echo "留言:$message";
}
?>
表单验证增强
为确保数据安全性和有效性,应添加服务器端验证:
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$errors = [];
$name = trim($_POST['name']);
if (empty($name)) {
$errors[] = "姓名不能为空";
}
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
if (!$email) {
$errors[] = "邮箱格式无效";
}
$message = trim($_POST['message']);
if (empty($message)) {
$errors[] = "留言内容不能为空";
}
if (empty($errors)) {
// 处理有效数据
echo "表单提交成功";
} else {
foreach ($errors as $error) {
echo "<p>$error</p>";
}
}
}
?>
文件上传处理
处理文件上传需要特别注意安全性:
<?php
if (isset($_FILES['file'])) {
$allowed = ['jpg', 'jpeg', 'png', 'gif'];
$file_name = $_FILES['file']['name'];
$file_ext = strtolower(pathinfo($file_name, PATHINFO_EXTENSION));
if (in_array($file_ext, $allowed)) {
$target_dir = "uploads/";
$target_file = $target_dir . basename($file_name);
if (move_uploaded_file($_FILES['file']['tmp_name'], $target_file)) {
echo "文件上传成功";
} else {
echo "文件上传失败";
}
} else {
echo "不允许的文件类型";
}
}
?>
对应的 HTML 表单需要添加 enctype 属性:
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上传">
</form>
防止 CSRF 攻击
为表单添加 CSRF 保护:
session_start();
// 生成令牌
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
// 表单中隐藏字段
echo '<input type="hidden" name="csrf_token" value="'.$_SESSION['csrf_token'].'">';
// 验证令牌
if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die("CSRF 验证失败");
}
使用 PDO 安全存储数据
将表单数据安全存储到 MySQL 数据库:
try {
$pdo = new PDO("mysql:host=localhost;dbname=test", "username", "password");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare("INSERT INTO contacts (name, email, message) VALUES (:name, :email, :message)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':email', $email);
$stmt->bindParam(':message', $message);
$stmt->execute();
echo "数据保存成功";
} catch(PDOException $e) {
echo "错误: " . $e->getMessage();
}






