file($f['tmp_name']); $allowed = ['image/png'=>'png','image/jpeg'=>'jpg','image/webp'=>'webp']; if (!isset($allowed[$mime])) throw new RuntimeException("Formato no permitido para $field. Usa PNG/JPG/WEBP."); if ($f['size'] > 5 * 1024 * 1024) throw new RuntimeException("Archivo muy grande para $field (máx 5MB)."); $ext = $allowed[$mime]; $base = sanitize_filename(pathinfo($f['name'], PATHINFO_FILENAME)); $fname = $base . '-' . uniqid() . '.' . $ext; $dest = rtrim($UPLOAD_DIR, "/\\") . DIRECTORY_SEPARATOR . $fname; if (!move_uploaded_file($f['tmp_name'], $dest)) throw new RuntimeException("No se pudo guardar el archivo de $field."); return rtrim($PUBLIC_DIR, '/') . '/' . $fname; // ruta pública para } function get_ruleta(mysqli $conn, $id) { $stmt = $conn->prepare("SELECT id, nombre, descripcion, imagen_ruleta, imagen_puntero, banner_1, banner_2, banner_3, banner_4, background_image, fullscreen_icon FROM ruletas WHERE id=?"); $stmt->bind_param("i", $id); $stmt->execute(); return $stmt->get_result()->fetch_assoc(); } $msg = $err = ''; $action = $_GET['action'] ?? ''; $id = (int)($_GET['id'] ?? 0); // ---------- create / update ---------- if ($_SERVER['REQUEST_METHOD'] === 'POST') { $rid = (int)($_POST['id'] ?? 0); $nombre = trim($_POST['nombre'] ?? ''); $descripcion = trim($_POST['descripcion'] ?? ''); // valores previos (para mantener si no se sube nuevo archivo) $old = [ 'imagen_ruleta' => trim($_POST['old_imagen_ruleta'] ?? ''), 'imagen_puntero' => trim($_POST['old_imagen_puntero'] ?? ''), 'banner_1' => trim($_POST['old_banner_1'] ?? ''), 'banner_2' => trim($_POST['old_banner_2'] ?? ''), 'banner_3' => trim($_POST['old_banner_3'] ?? ''), 'banner_4' => trim($_POST['old_banner_4'] ?? ''), 'background_image'=> trim($_POST['old_background_image'] ?? ''), 'fullscreen_icon' => trim($_POST['old_fullscreen_icon'] ?? ''), ]; if ($nombre === '') { $err = "El nombre es obligatorio."; } else { try { // nuevas subidas (si vienen) $new = [ 'imagen_ruleta' => upload_image('imagen_ruleta', $UPLOAD_DIR, $PUBLIC_DIR), 'imagen_puntero' => upload_image('imagen_puntero', $UPLOAD_DIR, $PUBLIC_DIR), 'banner_1' => upload_image('banner_1', $UPLOAD_DIR, $PUBLIC_DIR), 'banner_2' => upload_image('banner_2', $UPLOAD_DIR, $PUBLIC_DIR), 'banner_3' => upload_image('banner_3', $UPLOAD_DIR, $PUBLIC_DIR), 'banner_4' => upload_image('banner_4', $UPLOAD_DIR, $PUBLIC_DIR), 'background_image'=> upload_image('background_image',$UPLOAD_DIR, $PUBLIC_DIR), 'fullscreen_icon' => upload_image('fullscreen_icon', $UPLOAD_DIR, $PUBLIC_DIR), ]; // decidir final (nuevo o viejo o null) $vals = []; foreach ($new as $k => $v) { $vals[$k] = $v ?: ($old[$k] ?: null); } if ($rid > 0) { $stmt = $conn->prepare("UPDATE ruletas SET nombre=?, descripcion=?, imagen_ruleta=?, imagen_puntero=?, banner_1=?, banner_2=?, banner_3=?, banner_4=?, background_image=?, fullscreen_icon=? WHERE id=?"); $stmt->bind_param( "ssssssssssi", $nombre, $descripcion, $vals['imagen_ruleta'], $vals['imagen_puntero'], $vals['banner_1'], $vals['banner_2'], $vals['banner_3'], $vals['banner_4'], $vals['background_image'], $vals['fullscreen_icon'], $rid ); $stmt->execute(); $msg = "Ruleta actualizada."; } else { $stmt = $conn->prepare("INSERT INTO ruletas (nombre, descripcion, imagen_ruleta, imagen_puntero, banner_1, banner_2, banner_3, banner_4, background_image, fullscreen_icon) VALUES (?,?,?,?,?,?,?,?,?,?)"); $stmt->bind_param( "ssssssssss", $nombre, $descripcion, $vals['imagen_ruleta'], $vals['imagen_puntero'], $vals['banner_1'], $vals['banner_2'], $vals['banner_3'], $vals['banner_4'], $vals['background_image'], $vals['fullscreen_icon'] ); $stmt->execute(); $msg = "Ruleta creada."; } } catch (Throwable $e) { $err = $e->getMessage(); } } } // ---------- delete ---------- if ($action === 'delete' && $id > 0) { $stmt = $conn->prepare("DELETE FROM ruletas WHERE id=?"); $stmt->bind_param("i", $id); $stmt->execute(); $msg = "Ruleta eliminada."; } // ---------- edit load + list ---------- $edit = null; if ($action === 'edit' && $id > 0) { $edit = get_ruleta($conn, $id); } $res = $conn->query("SELECT id, nombre, descripcion, imagen_ruleta, imagen_puntero, banner_1, banner_2, banner_3, banner_4, background_image, fullscreen_icon, fecha_creacion FROM ruletas ORDER BY id DESC"); $items = $res->fetch_all(MYSQLI_ASSOC); ?> Ruletas | Admin Ruletas

Ruletas

ruleta Se mantiene si no subes otra.
puntero

b1
b2
b3
b4
bg
fs
IDNombre RuletaPunteroBG B1B2B3B4 FSCreadoAcciones
Editar Eliminar Premios Ver
Sin ruletas