php实现报名
PHP 实现报名功能
数据库设计
创建数据库表存储报名信息,通常包括字段如姓名、联系方式、报名时间等。以下是一个简单的MySQL表结构示例:
CREATE TABLE registrations (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL,
phone VARCHAR(20),
register_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
表单处理
创建HTML表单收集用户信息,通过POST方法提交到PHP处理脚本:
<form action="register.php" method="post">
<input type="text" name="name" placeholder="姓名" required>
<input type="email" name="email" placeholder="邮箱" required>
<input type="tel" name="phone" placeholder="电话">
<button type="submit">提交报名</button>
</form>
PHP处理脚本
创建register.php文件处理表单提交并存入数据库:
<?php
// 连接数据库
$conn = new mysqli('localhost', 'username', 'password', 'database_name');
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 获取表单数据
$name = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
// 防止SQL注入
$name = mysqli_real_escape_string($conn, $name);
$email = mysqli_real_escape_string($conn, $email);
$phone = mysqli_real_escape_string($conn, $phone);
// 插入数据
$sql = "INSERT INTO registrations (name, email, phone) VALUES ('$name', '$email', '$phone')";
if ($conn->query($sql) === TRUE) {
echo "报名成功";
} else {
echo "错误: " . $sql . "<br>" . $conn->error;
}
$conn->close();
?>
数据验证
在PHP脚本中添加数据验证确保输入有效性:
// 验证邮箱格式
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
die("无效的邮箱格式");
}
// 验证电话号码(简单示例)
if (!preg_match("/^[0-9]{10,15}$/", $phone)) {
die("电话号码格式不正确");
}
防止重复提交
在表单中添加CSRF令牌防止重复提交:

session_start();
$token = bin2hex(random_bytes(32));
$_SESSION['token'] = $token;
在表单中添加隐藏字段:
<input type="hidden" name="token" value="<?php echo $token; ?>">
在PHP脚本中验证令牌:
if ($_POST['token'] !== $_SESSION['token']) {
die("无效的提交");
}
文件上传功能
如需上传文件(如身份证照片),在表单中添加文件字段:

<input type="file" name="id_card" accept="image/*">
PHP处理文件上传:
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["id_card"]["name"]);
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// 检查是否为真实图片
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["id_card"]["tmp_name"]);
if($check === false) {
die("文件不是图片");
}
}
// 检查文件大小
if ($_FILES["id_card"]["size"] > 500000) {
die("文件太大");
}
// 允许特定格式
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg") {
die("只允许JPG, JPEG, PNG文件");
}
// 上传文件
if (move_uploaded_file($_FILES["id_card"]["tmp_name"], $target_file)) {
echo "文件上传成功";
} else {
echo "文件上传失败";
}
发送确认邮件
报名成功后发送确认邮件给用户:
$to = $email;
$subject = "报名确认";
$message = "尊敬的$name,您的报名已成功提交。";
$headers = "From: noreply@example.com";
if (mail($to, $subject, $message, $headers)) {
echo "确认邮件已发送";
} else {
echo "邮件发送失败";
}
安全性增强
使用预处理语句防止SQL注入:
$stmt = $conn->prepare("INSERT INTO registrations (name, email, phone) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $name, $email, $phone);
$stmt->execute();
$stmt->close();






