php实现报名功能
数据库设计
创建一个数据库表存储报名信息,通常包括姓名、联系方式、报名时间等字段。示例SQL:
CREATE TABLE `registrations` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`email` varchar(100) NOT NULL,
`phone` varchar(20) NOT NULL,
`reg_time` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
表单处理
创建HTML表单收集用户信息,使用POST方法提交数据:
<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="电话" required>
<button type="submit">提交报名</button>
</form>
后端处理
在register.php中处理表单提交并存入数据库:

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$name = $_POST['name'] ?? '';
$email = $_POST['email'] ?? '';
$phone = $_POST['phone'] ?? '';
// 数据验证
if (empty($name) || empty($email) || empty($phone)) {
die('请填写完整信息');
}
// 连接数据库
$db = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
// 防止SQL注入
$stmt = $db->prepare("INSERT INTO registrations (name, email, phone) VALUES (?, ?, ?)");
$stmt->execute([$name, $email, $phone]);
// 返回成功信息
echo '报名成功!';
}
?>
数据验证增强
添加更严格的数据验证:
// 验证邮箱格式
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
die('邮箱格式不正确');
}
// 验证手机号格式(简单示例)
if (!preg_match('/^1[3-9]\d{9}$/', $phone)) {
die('手机号格式不正确');
}
防止重复提交
使用Session防止表单重复提交:

session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if ($_SESSION['token'] === $_POST['token']) {
die('请勿重复提交');
}
$_SESSION['token'] = $_POST['token'];
// 其他处理逻辑
}
在表单中添加隐藏的token字段:
<input type="hidden" name="token" value="<?php echo uniqid(); ?>">
文件上传功能
如需上传文件(如身份证照片),添加文件上传处理:
<input type="file" name="id_card" accept="image/*">
PHP处理代码:
if (isset($_FILES['id_card'])) {
$uploadDir = 'uploads/';
$fileName = uniqid() . '_' . basename($_FILES['id_card']['name']);
$targetFile = $uploadDir . $fileName;
// 检查文件类型
$imageFileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));
if (!in_array($imageFileType, ['jpg', 'png', 'jpeg'])) {
die('只允许上传JPG/PNG/JPEG格式');
}
// 移动文件
if (move_uploaded_file($_FILES['id_card']['tmp_name'], $targetFile)) {
// 保存文件名到数据库
} else {
die('文件上传失败');
}
}






