php实现表单成功提交
PHP 表单提交实现方法
创建 HTML 表单
在 HTML 文件中创建表单元素,设置 method 为 POST 并指定 action 为处理表单的 PHP 文件路径。
<form method="POST" action="process_form.php">
<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>
<button type="submit">提交</button>
</form>
处理表单数据
在 process_form.php 文件中接收并验证表单数据。

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// 获取表单数据并过滤
$name = htmlspecialchars($_POST["name"]);
$email = htmlspecialchars($_POST["email"]);
$message = htmlspecialchars($_POST["message"]);
// 验证数据
if (empty($name) || empty($email) || empty($message)) {
die("所有字段必须填写");
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
die("邮箱格式无效");
}
// 处理数据(如保存到数据库或发送邮件)
// ...
// 显示成功消息
echo "表单提交成功!";
}
?>
数据存储
将表单数据存储到数据库或文件中。
// 连接数据库
$conn = new mysqli("localhost", "username", "password", "database");
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 准备并执行 SQL 语句
$stmt = $conn->prepare("INSERT INTO form_data (name, email, message) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $name, $email, $message);
$stmt->execute();
$stmt->close();
$conn->close();
发送邮件通知
使用 PHP 的 mail() 函数发送表单数据到指定邮箱。

$to = "admin@example.com";
$subject = "新表单提交";
$body = "姓名: $name\n邮箱: $email\n留言: $message";
$headers = "From: webmaster@example.com";
if (mail($to, $subject, $body, $headers)) {
echo "邮件发送成功";
} else {
echo "邮件发送失败";
}
安全性增强
添加 CSRF 保护和更严格的数据验证。
session_start();
// 生成 CSRF 令牌
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
// 在表单中添加隐藏字段
// <input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
// 验证 CSRF 令牌
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die("CSRF 验证失败");
}
错误处理与重定向
处理错误并重定向用户。
try {
// 表单处理逻辑
// ...
// 成功后重定向
header("Location: success.php");
exit();
} catch (Exception $e) {
// 记录错误
error_log($e->getMessage());
header("Location: error.php");
exit();
}
注意事项
- 始终验证和清理用户输入
- 使用预处理语句防止 SQL 注入
- 实施 CSRF 保护
- 考虑使用 PHP 框架(如 Laravel)简化表单处理
- 对于生产环境,建议使用专业的邮件库(如 PHPMailer)代替
mail()函数






