20) {
$error = "用户名长度必须在3-20个字符之间";
} elseif (empty($email)) {
$error = "邮箱不能为空";
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$error = "请输入有效的邮箱地址";
} elseif (empty($password)) {
$error = "密码不能为空";
} elseif (strlen($password) < 6) {
$error = "密码长度不能少于6个字符";
} elseif ($password !== $confirm_password) {
$error = "两次输入的密码不一致";
} else {
// 连接数据库
$conn = new mysqli($servername, $dbusername, $dbpassword, $dbname);
// 检查数据库连接
if ($conn->connect_error) {
$error = "数据库连接失败: " . $conn->connect_error .
"
使用的连接信息:
" .
"服务器: " . htmlspecialchars($servername) . "
" .
"用户名: " . htmlspecialchars($dbusername) . "
" .
"数据库名: " . htmlspecialchars($dbname);
} else {
// 检查用户名或邮箱是否已存在
$sql = "SELECT id FROM users WHERE username = ? OR email = ?";
$stmt = $conn->prepare($sql);
if (!$stmt) {
$error = "准备查询语句失败: " . $conn->error;
} else {
$stmt->bind_param("ss", $username, $email);
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows > 0) {
$error = "用户名或邮箱已被注册";
$stmt->close();
} else {
$stmt->close();
// 密码加密
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
// 插入新用户
$sql = "INSERT INTO users (username, email, password_hash, nickname, created_at)
VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP)";
$stmt = $conn->prepare($sql);
if (!$stmt) {
$error = "准备插入语句失败: " . $conn->error;
} else {
$stmt->bind_param("ssss", $username, $email, $hashed_password, $nickname);
if ($stmt->execute()) {
$success = true;
// 注册成功后自动登录(可选)
$_SESSION['user_logged_in'] = true;
$_SESSION['user_id'] = $conn->insert_id;
$_SESSION['user_info'] = [
'username' => $username,
'email' => $email,
'nickname' => $nickname
];
// 延迟跳转,让用户看到成功信息
if ($_POST['auto_login'] ?? true) {
header('Refresh: 2; URL=index.php');
}
} else {
$error = "注册失败: " . $stmt->error;
}
$stmt->close();
}
}
}
$conn->close();
}
}
}
?>