PHP实现验证注册
注册表单设计
创建一个HTML表单,包含用户名、邮箱、密码及确认密码字段,并设置method="post"提交至PHP处理脚本。表单需添加CSRF令牌防止跨站请求伪造。
<form action="register.php" method="post">
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
<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>
数据验证逻辑
在PHP脚本中验证用户输入,包括非空检查、格式校验及一致性比对。
// 检查CSRF令牌
if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die("非法请求");
}
$username = trim($_POST['username']);
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
$password = $_POST['password'];
$confirm_password = $_POST['confirm_password'];
// 非空校验
if (empty($username) || empty($email) || empty($password)) {
die("所有字段必填");
}
// 密码一致性
if ($password !== $confirm_password) {
die("两次密码输入不一致");
}
// 密码强度(至少8位,含字母和数字)
if (!preg_match('/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$/', $password)) {
die("密码需至少8位,包含字母和数字");
}
数据库操作
验证通过后,将用户数据安全存储至数据库。密码需使用password_hash加密。
// 连接数据库
$pdo = new PDO("mysql:host=localhost;dbname=test", "username", "password");
// 检查用户名/邮箱是否已存在
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ? OR email = ?");
$stmt->execute([$username, $email]);
if ($stmt->fetch()) {
die("用户名或邮箱已注册");
}
// 插入新用户
$hashed_password = password_hash($password, PASSWORD_BCRYPT);
$stmt = $pdo->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");
if ($stmt->execute([$username, $email, $hashed_password])) {
echo "注册成功";
} else {
echo "注册失败";
}
安全性增强
- 防SQL注入:始终使用预处理语句(如PDO或MySQLi)。
- 会话管理:注册后立即启动会话,避免固定会话ID攻击。
- 密码哈希:使用
password_hash和password_verify进行加密与验证。
// 示例:登录时的密码验证
$stmt = $pdo->prepare("SELECT password FROM users WHERE email = ?");
$stmt->execute([$email]);
$user = $stmt->fetch();
if ($user && password_verify($password, $user['password'])) {
$_SESSION['user_id'] = $user['id'];
}






