Tul xxx Tul
User / IP
:
216.73.216.217
Host / Server
:
45.84.207.204 / aircan.me
System
:
Linux lt-bnk-web1726.main-hosting.eu 5.14.0-611.36.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Mar 3 11:23:52 EST 2026 x86_64
Command
|
Upload
|
Create
Mass Deface
|
Jumping
|
Symlink
|
Reverse Shell
Ping
|
Port Scan
|
DNS Lookup
|
Whois
|
Header
|
cURL
:
/
home
/
u931257429
/
domains
/
aircan.me
/
public_html
/
progressgym
/
Viewing: perfil.php
<?php /** * ProgressGym - Selección de Perfil (Netflix-style) * Después del login, redirige aquí para confirmar perfil */ require_once 'config/database.php'; // Si no hay sesión, redirigir al login if (empty($_SESSION['user_id'])) { session_write_close(); header('Location: login.php'); exit; } $db = getDB(); $uid = $_SESSION['user_id']; // Obtener datos del usuario $stmt = $db->prepare("SELECT * FROM usuarios WHERE id = :id"); $stmt->execute([':id' => $uid]); $user = $stmt->fetch(); if (!$user) { session_destroy(); session_write_close(); header('Location: login.php'); exit; } // Avatares disponibles $avatares = [ 'default' => ['icon' => 'bi-person-fill', 'bg' => '#00e676'], 'fire' => ['icon' => 'bi-fire', 'bg' => '#ef4444'], 'star' => ['icon' => 'bi-star-fill', 'bg' => '#facc15'], 'heart' => ['icon' => 'bi-heart-fill', 'bg' => '#f472b6'], 'rocket' => ['icon' => 'bi-rocket-takeoff-fill','bg' => '#38bdf8'], 'lightning'=> ['icon' => 'bi-lightning-charge-fill','bg' => '#a78bfa'], 'trophy' => ['icon' => 'bi-trophy-fill', 'bg' => '#fb923c'], 'music' => ['icon' => 'bi-music-note-beamed', 'bg' => '#34d399'], ]; $currentAvatar = $user['avatar'] ?? 'default'; $nombreVisible = $user['nombre_visible'] ?? $user['username']; // Si se envía formulario de actualización de perfil if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action'])) { if ($_POST['action'] === 'update_profile') { $nuevoNombre = trim($_POST['nombre_visible'] ?? ''); $nuevoAvatar = $_POST['avatar'] ?? 'default'; if (empty($nuevoNombre)) $nuevoNombre = $user['username']; if (!array_key_exists($nuevoAvatar, $avatares)) $nuevoAvatar = 'default'; $stmt = $db->prepare("UPDATE usuarios SET nombre_visible = :nombre, avatar = :avatar WHERE id = :id"); $stmt->execute([':nombre' => $nuevoNombre, ':avatar' => $nuevoAvatar, ':id' => $uid]); $_SESSION['username'] = $nuevoNombre; $_SESSION['avatar'] = $nuevoAvatar; session_write_close(); header('Location: index.php'); exit; } if ($_POST['action'] === 'enter') { $_SESSION['username'] = $nombreVisible; $_SESSION['avatar'] = $currentAvatar; session_write_close(); header('Location: index.php'); exit; } } ?> <!DOCTYPE html> <html lang="es"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>¿Quién eres? — ProgressBros</title> <link rel="icon" type="image/png" href="ProgressBros.png"> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700;800;900&family=JetBrains+Mono:wght@400;600;700&display=swap" rel="stylesheet"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css"> <link rel="stylesheet" href="assets/css/style.css"> <style> * { font-family: 'Space Grotesk', -apple-system, BlinkMacSystemFont, sans-serif !important; } body { background: #0a0a0a; overflow-x: hidden; } .profile-wrapper { min-height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 2rem 1rem; position: relative; overflow: hidden; } /* Animated Grid Background */ .profile-wrapper::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-image: linear-gradient(rgba(0, 230, 118, 0.03) 1px, transparent 1px), linear-gradient(90deg, rgba(0, 230, 118, 0.03) 1px, transparent 1px); background-size: 50px 50px; animation: gridMove 20s linear infinite; z-index: 0; } @keyframes gridMove { 0% { transform: translate(0, 0); } 100% { transform: translate(50px, 50px); } } /* Floating Orbs */ .profile-wrapper::after { content: ''; position: absolute; top: 15%; right: 15%; width: 300px; height: 300px; background: radial-gradient(circle, rgba(0, 230, 118, 0.08) 0%, transparent 70%); border-radius: 50%; animation: floatOrb 8s ease-in-out infinite; z-index: 0; } @keyframes floatOrb { 0%, 100% { transform: translate(0, 0) scale(1); } 50% { transform: translate(30px, -30px) scale(1.1); } } /* Logo */ .profile-logo { font-size: 2rem; font-weight: 900; text-align: center; margin-bottom: 2rem; position: relative; z-index: 1; text-transform: uppercase; letter-spacing: -2px; } .profile-logo i { color: #00e676; font-size: 2.5rem; vertical-align: middle; animation: pulse 2s ease-in-out infinite; } @keyframes pulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.1); } } .profile-logo .text-accent { color: #00e676 !important; } /* Title */ .profile-title { font-size: 2.5rem; font-weight: 900; text-align: center; margin-bottom: 3rem; color: #ffffff; position: relative; z-index: 1; text-transform: uppercase; letter-spacing: -1px; text-shadow: 4px 4px 0 rgba(0, 230, 118, 0.2); } /* Profile Card */ .profile-card { position: relative; z-index: 1; cursor: pointer; text-align: center; transition: all 0.3s ease; padding: 1.5rem; background: transparent; border: none; } .profile-card:hover { transform: translate(-4px, -4px); } .profile-card:hover .profile-avatar { box-shadow: 8px 8px 0 rgba(0, 230, 118, 0.4); border-color: #00e676; } .profile-avatar { width: 140px; height: 140px; border-radius: 0 !important; display: flex; align-items: center; justify-content: center; margin: 0 auto 1.25rem; font-size: 4rem; color: #fff; border: 4px solid rgba(255, 255, 255, 0.2); transition: all 0.3s ease; box-shadow: 6px 6px 0 rgba(0, 0, 0, 0.3); position: relative; } .profile-avatar::after { content: ''; position: absolute; top: -4px; left: -4px; right: -4px; bottom: -4px; border: 2px solid transparent; transition: all 0.3s ease; } .profile-card:hover .profile-avatar::after { border-color: #00e676; } .profile-name { color: #ffffff; font-weight: 800; font-size: 1.25rem; text-transform: uppercase; letter-spacing: 1px; } /* Manage Button */ .profile-manage-btn { position: relative; z-index: 1; margin-top: 3rem; } #btn-manage-profile { background: transparent !important; border: 3px solid #00e676 !important; border-radius: 0 !important; color: #00e676 !important; font-weight: 800 !important; text-transform: uppercase !important; letter-spacing: 2px !important; padding: 1rem 2rem !important; font-size: 0.9rem !important; box-shadow: 4px 4px 0 rgba(0, 230, 118, 0.3) !important; transition: all 0.2s ease !important; } #btn-manage-profile:hover { background: rgba(0, 230, 118, 0.05) !important; transform: translate(-2px, -2px) !important; box-shadow: 6px 6px 0 rgba(0, 230, 118, 0.4) !important; color: #00e676 !important; } #btn-manage-profile:active { transform: translate(0, 0) !important; box-shadow: 3px 3px 0 rgba(0, 230, 118, 0.3) !important; } /* Modal Styles */ .modal-content { background: #0f0f0f !important; border: 3px solid #00e676 !important; border-radius: 0 !important; box-shadow: 6px 6px 0 rgba(0, 230, 118, 0.3) !important; } .modal-header { border-bottom: 2px solid rgba(0, 230, 118, 0.2) !important; border-radius: 0 !important; } .modal-footer { border-top: 2px solid rgba(0, 230, 118, 0.2) !important; border-radius: 0 !important; } .modal-title { color: #00e676 !important; font-weight: 900 !important; text-transform: uppercase !important; letter-spacing: 2px !important; font-size: 1.25rem !important; } .modal-body { padding: 2rem !important; } /* Form Labels */ .form-label { color: #00e676 !important; font-weight: 700 !important; font-size: 0.8rem !important; text-transform: uppercase !important; letter-spacing: 1.5px !important; margin-bottom: 0.75rem !important; font-family: 'JetBrains Mono', monospace !important; } /* Form Control */ .form-control { background: #000000 !important; border: 2px solid rgba(255, 255, 255, 0.15) !important; border-radius: 0 !important; color: #ffffff !important; font-weight: 600 !important; padding: 0.875rem 1rem !important; font-size: 1rem !important; box-shadow: 3px 3px 0 rgba(0, 0, 0, 0.3) !important; transition: all 0.2s ease !important; } .form-control::placeholder { color: #475569 !important; } .form-control:focus { background: #000000 !important; border-color: #00e676 !important; box-shadow: 4px 4px 0 rgba(0, 230, 118, 0.3) !important; transform: translate(-1px, -1px) !important; outline: none !important; } /* Avatar Grid */ .avatar-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1rem; margin-top: 1rem; } .avatar-option { width: 70px; height: 70px; border-radius: 0 !important; display: flex; align-items: center; justify-content: center; font-size: 2rem; color: #fff; cursor: pointer; border: 3px solid rgba(255, 255, 255, 0.2); transition: all 0.2s ease; margin: 0 auto; box-shadow: 3px 3px 0 rgba(0, 0, 0, 0.3); } .avatar-option:hover { transform: translate(-2px, -2px); border-color: rgba(255, 255, 255, 0.4); box-shadow: 5px 5px 0 rgba(0, 0, 0, 0.4); } .avatar-option.selected { border-color: #00e676; box-shadow: 5px 5px 0 rgba(0, 230, 118, 0.4); transform: translate(-2px, -2px); } /* Buttons */ .btn-accent { background: linear-gradient(135deg, #00e676 0%, #00c853 100%) !important; border: 3px solid #00e676 !important; border-radius: 0 !important; color: #000000 !important; font-weight: 900 !important; text-transform: uppercase !important; letter-spacing: 2px !important; padding: 0.875rem 1.5rem !important; font-size: 0.9rem !important; box-shadow: 3px 3px 0 rgba(0, 230, 118, 0.4) !important; transition: all 0.2s ease !important; } .btn-accent:hover { transform: translate(-2px, -2px) !important; box-shadow: 5px 5px 0 rgba(0, 230, 118, 0.5) !important; color: #000000 !important; } .btn-accent:active { transform: translate(0, 0) !important; box-shadow: 2px 2px 0 rgba(0, 230, 118, 0.4) !important; } .btn-ghost { background: transparent !important; border: 2px solid rgba(255, 255, 255, 0.2) !important; border-radius: 0 !important; color: #94a3b8 !important; font-weight: 700 !important; text-transform: uppercase !important; letter-spacing: 1.5px !important; padding: 0.875rem 1.5rem !important; font-size: 0.85rem !important; box-shadow: 3px 3px 0 rgba(255, 255, 255, 0.05) !important; transition: all 0.2s ease !important; } .btn-ghost:hover { background: rgba(255, 255, 255, 0.03) !important; border-color: rgba(255, 255, 255, 0.3) !important; transform: translate(-2px, -2px) !important; box-shadow: 5px 5px 0 rgba(255, 255, 255, 0.08) !important; color: #cbd5e1 !important; } .btn-ghost:active { transform: translate(0, 0) !important; box-shadow: 2px 2px 0 rgba(255, 255, 255, 0.05) !important; } .btn-close { background-color: transparent !important; border: 2px solid rgba(255, 255, 255, 0.2) !important; border-radius: 0 !important; opacity: 1 !important; padding: 0.5rem !important; transition: all 0.2s !important; box-shadow: 2px 2px 0 rgba(0, 0, 0, 0.2) !important; filter: brightness(0) invert(1) !important; } .btn-close:hover { border-color: #ef4444 !important; transform: translate(-1px, -1px) !important; box-shadow: 3px 3px 0 rgba(239, 68, 68, 0.3) !important; } /* Responsive */ @media (max-width: 768px) { .profile-title { font-size: 2rem; } .profile-avatar { width: 120px; height: 120px; font-size: 3rem; } .avatar-grid { grid-template-columns: repeat(4, 1fr); gap: 0.75rem; } .avatar-option { width: 60px; height: 60px; font-size: 1.75rem; } } @media (max-width: 576px) { .profile-title { font-size: 1.75rem; margin-bottom: 2rem; } .profile-avatar { width: 100px; height: 100px; font-size: 2.5rem; } #btn-manage-profile { padding: 0.75rem 1.5rem !important; font-size: 0.85rem !important; } } </style> </head> <body> <div class="profile-wrapper"> <div class="profile-logo"> <i class="bi bi-lightning-charge-fill text-accent"></i> Progress<span class="text-accent">Gym</span> </div> <h1 class="profile-title">¿Quién eres?</h1> <div class="d-flex flex-wrap justify-content-center gap-4"> <!-- Perfil del usuario actual --> <form method="POST" class="profile-card" id="profile-enter-form"> <input type="hidden" name="action" value="enter"> <div class="profile-avatar" style="background: <?= $avatares[$currentAvatar]['bg'] ?>;" onclick="this.closest('form').submit();"> <i class="bi <?= $avatares[$currentAvatar]['icon'] ?>"></i> </div> <div class="profile-name"><?= htmlspecialchars($nombreVisible) ?></div> </form> </div> <div class="profile-manage-btn"> <button class="btn btn-ghost d-flex align-items-center gap-2" data-bs-toggle="modal" data-bs-target="#editProfileModal" id="btn-manage-profile"> <i class="bi bi-pencil-square"></i> Administrar perfil </button> </div> </div> <!-- Modal Editar Perfil --> <div class="modal fade" id="editProfileModal" tabindex="-1" aria-hidden="true"> <div class="modal-dialog modal-dialog-centered"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">Editar Perfil</h5> <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button> </div> <form method="POST" id="formEditProfile"> <input type="hidden" name="action" value="update_profile"> <div class="modal-body"> <div class="mb-3"> <label class="form-label">Nombre Visible</label> <input type="text" class="form-control" name="nombre_visible" value="<?= htmlspecialchars($nombreVisible) ?>" placeholder="¿Cómo te llamamos?" maxlength="100"> </div> <div class="mb-3"> <label class="form-label">Elige tu Avatar</label> <div class="avatar-grid"> <?php foreach ($avatares as $key => $av): ?> <div class="avatar-option <?= $key === $currentAvatar ? 'selected' : '' ?>" style="background: <?= $av['bg'] ?>;" data-avatar="<?= $key ?>" onclick="selectAvatar(this)"> <i class="bi <?= $av['icon'] ?>"></i> </div> <?php endforeach; ?> </div> <input type="hidden" name="avatar" id="selected-avatar" value="<?= $currentAvatar ?>"> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-ghost" data-bs-dismiss="modal">Cancelar</button> <button type="submit" class="btn btn-accent"> <i class="bi bi-check-lg me-1"></i> Guardar </button> </div> </form> </div> </div> </div> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script> <script> function selectAvatar(el) { document.querySelectorAll('.avatar-option').forEach(a => a.classList.remove('selected')); el.classList.add('selected'); document.getElementById('selected-avatar').value = el.dataset.avatar; } </script> </body> </html>
Coded With 💗 by
0x6ick