Hai questo nella sezione "PULISCO LE SINGOLE RIGHE"
$line = str_replace(",", ".", $line);
e poi nella "FILTRO DEI NUMERI ..."
$linenumber = str_replace(".", "", $line);
$linenumber = str_replace(",", ".", $line);
In due posti stai sostituendo il carattere , col . (è sempre su $line che intervieni)
non lo fai usando un if/else hai solo messo dei commenti, quindi vengono eseguiti entrambi, di conseguenza se ad esempio in $line ci fosse 1.400,00:
viene eseguito il primo
$line = str_replace(",", ".", $line);
ora vale 1.400.00
viene eseguito
$linenumber = str_replace(".", "", $line);
il numero diventa
1,40000
e lo salvi in $linenumber
si esegue
$linenumber = str_replace(",", ".", $line);
il numero ora è...
1.400.00
perché non stai modificando $linenumber, ma $line, quindi la sostituzione avviene sull'originale 1.400,00
e 1.400.00 è equivalente a 1.4 (lo zero ti verrà per la precisione a 2 decimali nel db probabilmente) dato che la parte ".00" non ha senso, un numero può avere un solo separatore per i decimali e ci si ferma al primo.
Devi cambiare la logica della pulizia del csv, così non ne esci, almeno non in modo semplice.
Non devi pulire la riga intera, ma ogni cella secondo le regole del valore in essa contenuto (stringa, numero, data...)

Rispondi quotando
