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表单示例:
<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>
PHP处理逻辑
创建register.php文件处理注册请求:
<?php
// 连接数据库
$db = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
// 获取表单数据
$username = $_POST['username'];
$email = $_POST['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;
?>
安全增强措施
输入验证 增加对用户名、邮箱格式的验证:

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
die('邮箱格式不正确');
}
if (!preg_match('/^[a-zA-Z0-9_]{4,20}$/', $username)) {
die('用户名只允许字母、数字和下划线,长度4-20位');
}
防止SQL注入 使用预处理语句(如上例中的PDO预处理)可有效防止SQL注入。
密码强度要求 添加密码强度检查:

if (strlen($password) < 8) {
die('密码长度至少8位');
}
if (!preg_match('/[A-Z]/', $password) || !preg_match('/[0-9]/', $password)) {
die('密码必须包含大写字母和数字');
}
完整功能扩展
验证码集成 添加图形验证码防止机器人注册:
session_start();
if ($_POST['captcha'] !== $_SESSION['captcha']) {
die('验证码错误');
}
邮件验证 发送验证邮件确认用户邮箱:
$verification_code = bin2hex(random_bytes(16));
$stmt = $db->prepare("INSERT INTO users (username, password, email, verification_code) VALUES (?, ?, ?, ?)");
$stmt->execute([$username, $hashed_password, $email, $verification_code]);
// 发送邮件(需配置邮件服务)
mail($email, '账号激活', "请点击链接激活账号:http://example.com/verify.php?code=$verification_code");
错误处理优化 使用try-catch捕获异常:
try {
// 数据库操作代码
} catch (PDOException $e) {
if ($e->errorInfo[1] == 1062) {
die('用户名或邮箱已存在');
}
die('注册失败:' . $e->getMessage());
}





