php实现报名
PHP实现报名功能
数据库设计
创建一个MySQL数据库表来存储报名信息,例如:
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,
`registration_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
创建报名表单
HTML表单页面(register.html):
<form action="register.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="phone">电话:</label>
<input type="tel" id="phone" name="phone" required>
<button type="submit">提交报名</button>
</form>
处理表单提交
PHP处理脚本(register.php):
<?php
// 连接数据库
$db = new PDO('mysql:host=localhost;dbname=your_database', 'username', 'password');
// 获取表单数据
$name = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
// 验证数据
if(empty($name) || empty($email) || empty($phone)) {
die('请填写所有必填字段');
}
// 防止SQL注入
$name = htmlspecialchars($name);
$email = filter_var($email, FILTER_SANITIZE_EMAIL);
$phone = htmlspecialchars($phone);
// 检查邮箱格式
if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
die('邮箱格式不正确');
}
// 插入数据库
$stmt = $db->prepare("INSERT INTO registrations (name, email, phone) VALUES (?, ?, ?)");
$result = $stmt->execute([$name, $email, $phone]);
if($result) {
echo '报名成功!';
} else {
echo '报名失败,请重试';
}
?>
安全增强
增加CSRF防护:
// 在表单页面生成token
session_start();
$token = bin2hex(random_bytes(32));
$_SESSION['token'] = $token;
// 在表单中添加隐藏字段
<input type="hidden" name="token" value="<?php echo $token; ?>">
// 在处理脚本中验证token
if(!isset($_POST['token']) || $_POST['token'] !== $_SESSION['token']) {
die('无效的请求');
}
unset($_SESSION['token']);
数据验证扩展
增加更严格的验证规则:
// 验证姓名只包含中文和英文
if(!preg_match('/^[\x{4e00}-\x{9fa5}a-zA-Z]+$/u', $name)) {
die('姓名只能包含中文或英文字符');
}
// 验证手机号格式
if(!preg_match('/^1[3-9]\d{9}$/', $phone)) {
die('手机号格式不正确');
}
邮件通知
添加报名成功邮件通知:

$to = $email;
$subject = '报名成功通知';
$message = "尊敬的{$name},您已成功报名,我们会尽快与您联系。";
$headers = 'From: noreply@example.com';
mail($to, $subject, $message, $headers);






