$sql, 'parametros' => $parametros]; } function construirSentenciaUpdate($tabla, $datos) { // Filtramos campos que no queremos en el UPDATE $camposExcluidos = ['accion', 'id']; $camposActualizar = array_diff_key($datos, array_flip($camposExcluidos)); // Construimos la parte SET de la sentencia $setCampos = []; $parametros = []; foreach ($camposActualizar as $campo => $valor) { // Usamos corchetes en lugar de backticks para SQL Server $setCampos[] = "[$campo] = ?"; $parametros[] = $valor; } // Construimos la sentencia SQL $sql = "UPDATE $tabla SET " . implode(', ', $setCampos) . " WHERE id = ?"; // Añadimos el id al final de los parámetros $parametros[] = $datos['id']; return ['sql' => $sql, 'parametros' => $parametros]; } function normalizarAlojamiento(array $datos): array { // Cursos que tienen selector alojamiento_* $cursos = ['bp', 'b1', 'b2', 'b3']; foreach ($cursos as $c) { $kA = "alojamiento_$c"; $kI = "alojamiento_inicio_$c"; $kF = "alojamiento_fin_$c"; // Si no viene alojamiento_* no tocamos nada if (!array_key_exists($kA, $datos)) continue; $valA = strtoupper(trim((string)$datos[$kA])); // Si NO hay alojamiento => forzamos NULL en inicio/fin (aunque no vengan) if ($valA === 'N' || $valA === '') { $datos[$kI] = null; $datos[$kF] = null; continue; } // Si SI hay alojamiento => si no vienen fechas, al menos dejamos null (o podés validar) if ($valA === 'S') { if (!array_key_exists($kI, $datos) || trim((string)$datos[$kI]) === '') $datos[$kI] = null; if (!array_key_exists($kF, $datos) || trim((string)$datos[$kF]) === '') $datos[$kF] = null; } } return $datos; }