php实现填表
PHP 实现表单填写
使用 HTML 创建表单
创建一个 HTML 文件,包含表单元素如输入框、下拉菜单、复选框等。表单的 action 属性指向处理表单数据的 PHP 文件,method 属性通常设置为 POST 或 GET。
<form action="process_form.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 文件
创建一个 PHP 文件(如 process_form.php)来接收并处理表单提交的数据。使用 $_POST 或 $_GET 超全局变量获取表单字段的值。
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = $_POST["name"];
$email = $_POST["email"];
$message = $_POST["message"];
// 验证数据
if (empty($name) || empty($email) || empty($message)) {
echo "所有字段必须填写";
} else {
// 处理数据(如保存到数据库或发送邮件)
echo "表单提交成功!姓名:$name, 邮箱:$email, 留言:$message";
}
}
?>
数据验证与过滤
为确保数据安全,应对用户输入进行验证和过滤。使用 filter_var 函数验证邮箱格式,使用 htmlspecialchars 防止 XSS 攻击。
$name = htmlspecialchars($_POST["name"]);
$email = filter_var($_POST["email"], FILTER_VALIDATE_EMAIL);
if (!$email) {
echo "邮箱格式无效";
}
保存数据到数据库
如果需要将表单数据保存到数据库,可以使用 PDO 或 MySQLi 扩展。以下是一个使用 PDO 的示例:
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("INSERT INTO form_data (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();
}
$conn = null;
发送邮件通知
使用 PHP 的 mail 函数或第三方库(如 PHPMailer)发送表单数据到指定邮箱。
$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 攻击
生成并验证 CSRF 令牌,确保表单提交来自合法来源。
session_start();
if ($_SERVER["REQUEST_METHOD"] == "GET") {
$_SESSION["token"] = bin2hex(random_bytes(32));
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (!hash_equals($_SESSION["token"], $_POST["token"])) {
die("CSRF 验证失败");
}
}
在表单中添加隐藏的 CSRF 令牌字段:
<input type="hidden" name="token" value="<?php echo $_SESSION["token"]; ?>">
文件上传处理
如果表单包含文件上传,使用 $_FILES 超全局变量处理上传的文件,并确保限制文件类型和大小。

if (isset($_FILES["file"])) {
$allowed_types = ["image/jpeg", "image/png"];
$max_size = 2 * 1024 * 1024; // 2MB
if (in_array($_FILES["file"]["type"], $allowed_types) && $_FILES["file"]["size"] <= $max_size) {
move_uploaded_file($_FILES["file"]["tmp_name"], "uploads/" . basename($_FILES["file"]["name"]));
echo "文件上传成功";
} else {
echo "文件类型或大小不符合要求";
}
}






