实现注册php
注册功能的 PHP 实现
数据库准备 创建用户表(以 MySQL 为例):
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
注册表单 HTML
<form action="register.php" method="post">
<label>用户名:<input type="text" name="username" required></label>
<label>邮箱:<input type="email" name="email" required></label>
<label>密码:<input type="password" name="password" required></label>
<label>确认密码:<input type="password" name="confirm_password" required></label>
<button type="submit">注册</button>
</form>
PHP 处理逻辑 (register.php)
<?php
// 连接数据库
$db = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
// 过滤输入
$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
$password = $_POST['password'];
$confirm_password = $_POST['confirm_password'];
// 验证输入
if ($password !== $confirm_password) {
die("密码不匹配");
}
if (strlen($password) < 8) {
die("密码至少需要8个字符");
}
// 密码哈希
$password_hash = password_hash($password, PASSWORD_DEFAULT);
// 插入数据库
try {
$stmt = $db->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");
$stmt->execute([$username, $email, $password_hash]);
echo "注册成功!";
} catch (PDOException $e) {
if ($e->errorInfo[1] == 1062) {
echo "用户名或邮箱已存在";
} else {
echo "注册失败: " . $e->getMessage();
}
}
?>
安全增强措施
防止 SQL 注入 使用 PDO 预处理语句已在上例中实现,避免直接拼接 SQL。
密码安全
使用 password_hash() 和 password_verify() 函数处理密码,不要使用 md5 或 sha1 等弱哈希算法。
验证码集成 添加 CAPTCHA 防止机器人注册:
session_start();
if ($_POST['captcha'] !== $_SESSION['captcha']) {
die("验证码错误");
}
邮件验证实现
发送验证邮件
$verification_code = bin2hex(random_bytes(16));
$stmt = $db->prepare("INSERT INTO users (...) VALUES (..., ?, 0)");
// 发送邮件示例
mail($email, "验证您的邮箱", "点击验证: https://yoursite.com/verify.php?code=$verification_code");
验证处理 (verify.php)

$code = $_GET['code'];
$stmt = $db->prepare("UPDATE users SET verified=1 WHERE verification_code=?");
$stmt->execute([$code]);






