connect_error) { echo json_encode(['success' => false, 'message' => 'Errore di connessione al database: ' . $conn->connect_error]); exit; } // Controllo se il file è stato inviato tramite POST if ($_SERVER['REQUEST_METHOD'] === 'POST') { // Verifica se il file e l'ID della scuola sono presenti if (isset($_FILES['file']) && isset($_POST['idyogaschool'])) { $file = $_FILES['file']; $idyogaschool = $_POST['idyogaschool']; // Estrai le informazioni del file $originalName = $file['name']; $tempPath = $file['tmp_name']; $fileType = $file['type']; $fileSize = $file['size']; // Verifica l'estensione del file (solo JPG e PNG) $validExtensions = ['image/jpeg', 'image/png', 'image/jpg']; if (!in_array($fileType, $validExtensions)) { echo json_encode(['success' => false, 'message' => 'Formato file non valido. Solo JPG, JPEG e PNG sono consentiti.']); exit; } // Limita il numero di immagini a 5 per questa scuola $query = $conn->prepare("SELECT COUNT(*) AS photo_count FROM photoyogaschool WHERE idyogaschool = ?"); $query->bind_param("i", $idyogaschool); $query->execute(); $result = $query->get_result(); $data = $result->fetch_assoc(); if ($data['photo_count'] >= 5) { echo json_encode(['success' => false, 'message' => 'Numero massimo di 5 foto raggiunto.']); exit; } // Rinomina il file $timestamp = time(); $newFileName = $idyogaschool . '-' . $timestamp . '-' . basename($originalName); // Definisci il percorso di salvataggio $uploadDir = 'uploadphotoschool/'; $uploadPath = $uploadDir . $newFileName; // Verifica se la directory di upload è scrivibile if (!is_dir($uploadDir) || !is_writable($uploadDir)) { echo json_encode(['success' => false, 'message' => 'Directory di upload non esistente o non scrivibile.']); exit; } // Funzione per ridimensionare l'immagine function resizeImage($file, $fileType, $maxWidth, $maxHeight) { list($width, $height) = getimagesize($file); $ratio = $width / $height; if ($width > $maxWidth || $height > $maxHeight) { if ($width > $height) { $newWidth = $maxWidth; $newHeight = $maxWidth / $ratio; } else { $newHeight = $maxHeight; $newWidth = $maxHeight * $ratio; } } else { $newWidth = $width; $newHeight = $height; } // Crea una nuova immagine ridimensionata if ($fileType === 'image/jpeg' || $fileType === 'image/jpg') { $src = imagecreatefromjpeg($file); } elseif ($fileType === 'image/png') { $src = imagecreatefrompng($file); } else { return false; // Tipo di file non supportato } $dst = imagecreatetruecolor($newWidth, $newHeight); imagecopyresampled($dst, $src, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height); return $dst; } // Ridimensiona l'immagine prima di salvarla $resizedImage = resizeImage($tempPath, $fileType, 800, 600); if (!$resizedImage) { echo json_encode(['success' => false, 'message' => 'Errore durante il ridimensionamento dell\'immagine.']); exit; } // Salva l'immagine ridimensionata if ($fileType === 'image/jpeg' || $fileType === 'image/jpg') { if (!imagejpeg($resizedImage, $uploadPath)) { echo json_encode(['success' => false, 'message' => 'Errore durante il salvataggio del file JPEG.']); exit; } } elseif ($fileType === 'image/png') { if (!imagepng($resizedImage, $uploadPath)) { echo json_encode(['success' => false, 'message' => 'Errore durante il salvataggio del file PNG.']); exit; } } // Libera la memoria occupata dall'immagine ridimensionata imagedestroy($resizedImage); // Salva le informazioni nel database $query = $conn->prepare("INSERT INTO photoyogaschool (photofilename, idyogaschool) VALUES (?, ?)"); $query->bind_param("si", $newFileName, $idyogaschool); if ($query->execute()) { echo json_encode(['success' => true, 'message' => 'File caricato e salvato con successo.']); } else { echo json_encode(['success' => false, 'message' => 'Errore durante il salvataggio nel database.']); } } else { echo json_encode(['success' => false, 'message' => 'Nessun file o ID scuola ricevuto.']); } } else { echo json_encode(['success' => false, 'message' => 'Richiesta non valida.']); }