php原生实现注册
注册功能实现步骤
数据库准备
创建用户表(如users),包含字段:id(主键自增)、username、email、password(需加密)、created_at(时间戳)。示例SQL:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
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>
后端处理(register.php)
验证输入并插入数据库:
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = trim($_POST['username']);
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
$password = $_POST['password'];
$confirm_password = $_POST['confirm_password'];
// 基础验证
if (empty($username) || !$email || empty($password)) {
die('所有字段必填且邮箱格式正确');
}
if ($password !== $confirm_password) {
die('两次密码不一致');
}
// 密码加密
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
// 连接数据库
$db = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
// 检查邮箱是否已存在
$stmt = $db->prepare("SELECT id FROM users WHERE email = ?");
$stmt->execute([$email]);
if ($stmt->fetch()) {
die('邮箱已被注册');
}
// 插入用户数据
$stmt = $db->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");
if ($stmt->execute([$username, $email, $hashed_password])) {
echo '注册成功';
} else {
echo '注册失败';
}
}
?>
安全增强措施
输入过滤
使用htmlspecialchars防止XSS攻击:

$username = htmlspecialchars(trim($_POST['username']));
密码强度验证
通过正则表达式要求至少8位含大小写和数字:
if (!preg_match('/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$/', $password)) {
die('密码需包含大小写字母和数字,且长度≥8');
}
防CSRF
添加CSRF令牌验证:
session_start();
if (empty($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die('非法请求');
}
表单中需隐藏字段:

<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
完整流程优化
错误反馈
使用$_SESSION存储错误信息并重定向:
session_start();
if ($password !== $confirm_password) {
$_SESSION['error'] = '密码不一致';
header('Location: register_form.php');
exit;
}
成功处理
注册后自动登录或发送验证邮件:
// 自动登录示例
$_SESSION['user_id'] = $db->lastInsertId();
header('Location: dashboard.php');
日志记录
记录注册尝试:
file_put_contents('register.log', date('Y-m-d H:i:s')." - $email\n", FILE_APPEND);






