beginTransaction(); $stmt = $pdo->prepare( "INSERT INTO installations (client_name, address, technician_name, observations, status, voltage, phase_neutral_ground, breaker_output) VALUES (?, ?, ?, ?, ?, ?, ?, ?)" ); $stmt->execute([$client_name, $address, $technician_name, $observations, $status, $voltage, $phase_neutral_ground, $breaker_output]); $installation_id = $pdo->lastInsertId(); // Handle multiple file uploads if (isset($_FILES['images'])) { $upload_dir = __DIR__ . '/assets/uploads/'; if (!is_dir($upload_dir)) { mkdir($upload_dir, 0775, true); } $allowed_ext = ['jpg', 'jpeg', 'png', 'gif']; foreach ($_FILES['images']['tmp_name'] as $key => $tmp_name) { if ($_FILES['images']['error'][$key] === UPLOAD_ERR_OK) { $file_name = $_FILES['images']['name'][$key]; $file_ext = strtolower(pathinfo($file_name, PATHINFO_EXTENSION)); if (in_array($file_ext, $allowed_ext)) { $new_file_name = time() . '_' . uniqid() . '_' . basename($file_name); $dest_path = $upload_dir . $new_file_name; if (move_uploaded_file($tmp_name, $dest_path)) { $image_path = 'assets/uploads/' . $new_file_name; $img_stmt = $pdo->prepare("INSERT INTO installation_images (installation_id, image_path) VALUES (?, ?)"); $img_stmt->execute([$installation_id, $image_path]); } else { throw new Exception('Falha ao mover o arquivo enviado: ' . $file_name); } } else { throw new Exception('Tipo de arquivo inválido: ' . $file_name); } } } } $pdo->commit(); $_SESSION['message'] = 'Instalação registrada com sucesso!'; $_SESSION['message_type'] = 'success'; } catch (Exception $e) { if ($pdo->inTransaction()) { $pdo->rollBack(); } error_log("Upload/Database error: " . $e->getMessage()); $_SESSION['message'] = 'Falha ao registrar a instalação: ' . $e->getMessage(); $_SESSION['message_type'] = 'danger'; } } header('Location: index.php'); exit;