query($sql)) { return "创建密码重置表失败: " . $conn->error; } return true; } // 检查令牌是否存在 if (!isset($_GET['token']) || empty($_GET['token'])) { $message = "无效的重置链接"; $messageType = "error"; } else { $token = $_GET['token']; // 连接数据库 $conn = new mysqli($servername, $username, $password, $dbname); // 检查数据库连接 if ($conn->connect_error) { $message = "数据库连接失败: " . $conn->connect_error; $messageType = "error"; } else { // 确保密码重置表存在 $tableCheck = ensurePasswordResetTableExists($conn); if ($tableCheck !== true) { $message = $tableCheck; $messageType = "error"; } else { // 检查令牌是否有效且未过期 $sql = "SELECT user_id FROM password_reset_tokens WHERE token = ? AND expiry > NOW()"; $stmt = $conn->prepare($sql); if (!$stmt) { $message = "准备查询语句失败: " . $conn->error; $messageType = "error"; } else { $stmt->bind_param("s", $token); $stmt->execute(); $stmt->store_result(); if ($stmt->num_rows == 1) { // 令牌有效 $stmt->bind_result($userId); $stmt->fetch(); $tokenValid = true; } else { $message = "重置链接无效或已过期"; $messageType = "error"; } $stmt->close(); } } $conn->close(); } } // 处理表单提交 if ($_SERVER["REQUEST_METHOD"] == "POST" && $tokenValid && $userId !== null) { // 获取表单数据并过滤 $newPassword = $_POST['new_password'] ?? ''; $confirmPassword = $_POST['confirm_password'] ?? ''; // 表单验证 if (empty($newPassword)) { $message = "新密码不能为空"; $messageType = "error"; } elseif (strlen($newPassword) < 6) { $message = "密码长度不能少于6个字符"; $messageType = "error"; } elseif ($newPassword !== $confirmPassword) { $message = "两次输入的密码不一致"; $messageType = "error"; } else { // 连接数据库 $conn = new mysqli($servername, $username, $password, $dbname); // 检查数据库连接 if ($conn->connect_error) { $message = "数据库连接失败: " . $conn->connect_error; $messageType = "error"; } else { // 哈希密码 $hashedPassword = password_hash($newPassword, PASSWORD_DEFAULT); // 更新用户密码 $sql = "UPDATE users SET password_hash = ? WHERE id = ?"; $stmt = $conn->prepare($sql); if (!$stmt) { $message = "准备更新语句失败: " . $conn->error; $messageType = "error"; } else { $stmt->bind_param("si", $hashedPassword, $userId); if ($stmt->execute()) { // 密码更新成功,删除令牌 $deleteStmt = $conn->prepare("DELETE FROM password_reset_tokens WHERE user_id = ?"); $deleteStmt->bind_param("i", $userId); $deleteStmt->execute(); $deleteStmt->close(); $message = "密码已成功重置,请使用新密码登录"; $messageType = "success"; $tokenValid = false; // 防止再次提交 } else { $message = "密码更新失败,请稍后再试"; $messageType = "error"; } $stmt->close(); } $conn->close(); } } } ?> 重置密码 - 音乐分享网站

重置密码

">