Galleria Pubblica
Tavola del Puzzle
Crea un nuovo Puzzle
Carica un'immagine per iniziare.
exec("CREATE TABLE IF NOT EXISTS puzzles ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) DEFAULT 'Senza Nome', file_name VARCHAR(255) NOT NULL UNIQUE, is_public BOOLEAN DEFAULT FALSE, is_admin_upload BOOLEAN DEFAULT FALSE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP )"); // Attempt to add 'name' column, ignore error if it already exists try { $pdo->exec("ALTER TABLE puzzles ADD COLUMN name VARCHAR(255) DEFAULT 'Senza Nome'"); } catch (PDOException $e) { // Ignore error, likely "Duplicate column name" } } catch (PDOException $e) { // In a real app, log this error instead of displaying it die("Errore di connessione al database: " . $e->getMessage()); } } setup_database(); // --- GLOBAL VARIABLES --- $uploaded_image = null; $error_message = null; $gallery_images = []; // --- DATA FETCHING --- try { $pdo = db(); $stmt = $pdo->query("SELECT id, file_name, name FROM puzzles WHERE is_public = 1 OR is_admin_upload = 1 ORDER BY created_at DESC"); $gallery_images = $stmt->fetchAll(PDO::FETCH_ASSOC); } catch (PDOException $e) { $error_message = "Impossibile caricare la galleria."; } // --- POST REQUEST: IMAGE UPLOAD --- if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['puzzle_image'])) { $target_dir = 'uploads/'; $max_file_size = 5 * 1024 * 1024; // 5 MB $allowed_types = ['image/jpeg', 'image/png', 'image/gif']; $file = $_FILES['puzzle_image']; if ($file['error'] !== UPLOAD_ERR_OK) { $error_message = 'Si è verificato un errore durante il caricamento.'; } else { $finfo = new finfo(FILEINFO_MIME_TYPE); $mime_type = $finfo->file($file['tmp_name']); if ($file['size'] > $max_file_size) { $error_message = 'Il file è troppo grande. La dimensione massima è 5MB.'; } elseif (!in_array($mime_type, $allowed_types)) { $error_message = 'Tipo di file non valido. Sono ammessi solo JPG, PNG, GIF.'; } else { $file_extension = pathinfo($file['name'], PATHINFO_EXTENSION); $safe_filename = uniqid('puzzle_', true) . '.' . strtolower($file_extension); $target_file = $target_dir . $safe_filename; if (move_uploaded_file($file['tmp_name'], $target_file)) { // Save to database try { $is_public = isset($_POST['share_puzzle']) ? 1 : 0; // Ensure 1 or 0 $puzzle_name = !empty($_POST['puzzle_name']) ? trim($_POST['puzzle_name']) : 'Senza Nome'; $pdo = db(); $stmt = $pdo->prepare("INSERT INTO puzzles (name, file_name, is_public, is_admin_upload) VALUES (?, ?, ?, ?)"); $is_admin_upload = 0; // Always false for user uploads $stmt->execute([$puzzle_name, $safe_filename, $is_public, $is_admin_upload]); $new_puzzle_id = $pdo->lastInsertId(); } catch (PDOException $e) { // Error saving to DB, delete file unlink($target_file); // Log the detailed error for developers: error_log($e->getMessage()); $error_message = "Si è verificato un errore nel salvataggio dei dati del puzzle: " . $e->getMessage(); } if (!$error_message) { // Redirect to the new puzzle page header('Location: puzzle.php?id=' . $new_puzzle_id); exit; } } else { $error_message = 'Si è verificato un errore durante il salvataggio del file.'; } } } } // --- GET REQUESTS --- // Handle New Game if (isset($_GET['action']) && $_GET['action'] === 'new') { unset($_SESSION['selected_puzzle']); header('Location: ' . $_SERVER['PHP_SELF']); exit; } // --- SET CURRENT IMAGE FOR DISPLAY --- if (isset($_SESSION['selected_puzzle'])) { $uploaded_image = $_SESSION['selected_puzzle']; } ?>
Carica un'immagine per iniziare.