diff --git a/public/userarea/import_insert.php b/public/userarea/import_insert.php index aa1ea87..f861f0f 100644 --- a/public/userarea/import_insert.php +++ b/public/userarea/import_insert.php @@ -40,6 +40,29 @@ error_log("Excelrows: " . json_encode($excelrows)); $user_id = $iduserlogin ?? 1; +/** + * Normalizza un nome colonna per il confronto header Excel <-> mapping. + * Risolve alla radice i mismatch causati da caratteri invisibili: + * - non-breaking space (U+00A0), narrow NBSP (U+202F), figure space (U+2007), ecc. -> spazio normale + * - tab, newline e altri whitespace -> spazio normale + * - spazi multipli consecutivi -> un solo spazio + * - trim ai bordi + * NB: usata SOLO per il matching, non altera i valori importati. + */ +function normalizeColName($s): string +{ + $s = (string)$s; + // Converte i principali spazi Unicode "insidiosi" in spazio normale + $s = str_replace( + ["\xC2\xA0", "\xE2\x80\xAF", "\xE2\x80\x87", "\xE2\x80\x89", "\xE2\x80\x8A", "\xEF\xBB\xBF"], + ' ', + $s + ); + // Qualsiasi sequenza di whitespace (spazi, tab, newline) -> singolo spazio + $s = preg_replace('/\s+/u', ' ', $s); + return trim((string)$s); +} + $db = DBHandlerSelect::getInstance(); $pdo = $db->getConnection(); @@ -105,7 +128,12 @@ foreach ($selected_rows as $rowIndex) { $fieldValue = null; if (!$mapping['is_manual']) { $excelColumn = trim($mapping['excel_column']); - $excelColumnIndex = array_search($excelColumn, array_map('trim', $columns)); + // Match robusto: normalizza header e mapping (NBSP, spazi doppi, tab...) + // così un solo/doppio spazio o un non-breaking space non rompono il confronto. + $excelColumnIndex = array_search( + normalizeColName($excelColumn), + array_map('normalizeColName', $columns) + ); if ($excelColumnIndex !== false && isset($row[$excelColumnIndex]) && $row[$excelColumnIndex] !== '') { $fieldValue = $row[$excelColumnIndex]; error_log("Found Excel column '$excelColumn' at index $excelColumnIndex, value: " . var_export($fieldValue, true));