prepare(" SELECT prt.*, c.company_name, c.account_status FROM password_reset_tokens prt JOIN clients c ON prt.client_id = c.id WHERE prt.token = ? AND prt.expires_at > NOW() AND prt.used = 0 "); $stmt->execute([$token]); $client = $stmt->fetch(); if (!$client) { $errors[] = 'This reset link has expired or already been used. Please request a new one.'; } } catch (Exception $e) { $errors[] = 'An error occurred. Please try again.'; logClientActivity('Reset token validation error', ['error' => $e->getMessage()]); } } // Handle form submission if ($_SERVER['REQUEST_METHOD'] === 'POST' && $client && empty($errors)) { $password = $_POST['password'] ?? ''; $confirm = $_POST['confirm_password'] ?? ''; if (empty($password)) { $errors[] = 'Please enter a new password.'; } elseif (strlen($password) < 8) { $errors[] = 'Password must be at least 8 characters.'; } elseif ($password !== $confirm) { $errors[] = 'Passwords do not match.'; } else { try { $hash = password_hash($password, PASSWORD_DEFAULT); $pdo->prepare(" UPDATE clients SET password = ?, account_status = 'active' WHERE id = ? ")->execute([$hash, $client['client_id']]); $pdo->prepare(" UPDATE password_reset_tokens SET used = 1 WHERE token = ? ")->execute([$token]); logClientActivity('Password reset successful', ['client_id' => $client['client_id'], 'email' => $client['email']]); $success = true; } catch (Exception $e) { $errors[] = 'An error occurred while saving your password. Please try again.'; logClientActivity('Password reset save error', ['error' => $e->getMessage()]); } } } ?> Reset Password — Relevant Reflex Client Portal

Password Reset Successfully

Your password has been updated. You can now log in to the client portal.

Go to Login

Link Expired or Invalid

'; ?>
Request a New Link
🔒

Set a New Password

For account:

'; ?>
Password requirements: