php实现注册功能实现
数据库准备
创建用户表存储注册信息,通常包含字段如id、username、password、email等。示例SQL:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
表单设计
HTML表单需包含用户名、密码、邮箱等字段,并设置method="POST"。示例:
<form action="register.php" method="POST">
<input type="text" name="username" placeholder="用户名" required>
<input type="email" name="email" placeholder="邮箱" required>
<input type="password" name="password" placeholder="密码" required>
<input type="password" name="confirm_password" placeholder="确认密码" required>
<button type="submit">注册</button>
</form>
后端处理逻辑
在register.php中处理表单提交,包含以下关键步骤:

<?php
// 连接数据库
$db = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
// 验证输入
$username = trim($_POST['username']);
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
$password = $_POST['password'];
$confirm_password = $_POST['confirm_password'];
// 检查密码一致性
if ($password !== $confirm_password) {
die("两次密码输入不一致");
}
// 密码哈希处理
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
// 插入数据库
$stmt = $db->prepare("INSERT INTO users (username, password, email) VALUES (?, ?, ?)");
$stmt->execute([$username, $hashed_password, $email]);
// 注册成功处理
header("Location: login.php");
exit;
?>
安全增强措施
实施CSRF防护,在表单中添加令牌:
session_start();
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
表单中增加隐藏字段:

<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
验证时检查令牌:
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die("CSRF验证失败");
}
输入验证扩展
增加更严格的输入验证:
// 用户名只允许字母数字
if (!preg_match('/^[a-zA-Z0-9_]+$/', $username)) {
die("用户名只允许字母、数字和下划线");
}
// 密码强度检查
if (strlen($password) < 8) {
die("密码至少需要8个字符");
}
错误处理优化
使用try-catch处理数据库异常:
try {
$stmt->execute([$username, $hashed_password, $email]);
} catch (PDOException $e) {
if ($e->errorInfo[1] === 1062) {
die("用户名或邮箱已存在");
}
throw $e;
}






