Problema caricamento tabelle MySql da PhP

Gian72Luca

Nuovo Utente
20 Mar 2019
4
0
1
Ciao a tutti, è da un po' di tempo che non visito più il forum, spero di non commettere errori nella compilazione della discussione.
Nel caso chiedo scusa in anticipo...

Da 2 giorni sto sbattendo la testa contro un muro per un problema che non riesco a risolvere.
Riducendo in modo banale il problema, dovrei caricare il contenuto di un file, realizzato da un altro programma e depositato in una directory, in una tabella in un database mysql.
Questo file potrebbe essere in formato testo con i seguenti separatori: tab, punto e virgola o virgola oppure in formato csv a seconda dall'operatore che effettua l'upload del file.
Il programma funziona correttamente fino a quando non tento di caricare dei record stringa contenenti lettere, se carico dei record stringa contenenti numeri funziona perfettamente.
Lo stesso problema lo riscontro se tento di caricare dei record null o contenenti solo uno spazio, anche se permessi.
Ho riportato tutta la sezione del codice in questione.
Inizialmente ho provato con fgetcsv che mi permetteva di scrivere qualche riga di codice in meno ma avevo lo stesso problema.
Ho provato a forzare la codifica con mb_convert_encoding, ma non è cambiato nulla

PHP:
switch ($TypeImport) {

        case "Site":

        
        break;

        case "NewLos":

            $tablename = "newlos".strtolower($cod);
            $result = mysqli_query($linkdb,"SHOW TABLES LIKE '".$tablename."'"); // verifico se la tabella esiste
            $row = mysqli_num_rows($result); //conto il numero di record presenti nella tabella
            if($row > 0) { //$row è maggiore di 0
                $sqlTable = "TRUNCATE ".$tablename; // cancello la tabella
echo "cancello tabella ".$tablename;
echo "<br>";
            } else {        // creo la tabella
                $sqlTable = "CREATE TABLE ".$tablename." (
                                Id varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
                                Geome varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
                                Site1 varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
                                Site2 varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
                                Frequency varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
                                Antenna1_h varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
                                Antenna2_h varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
                                LineOfSight1 varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
                                LineOfSight2 varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
                                Distance varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
                                Direction1 varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
                                Direction2 varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
                                CustonHeights varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
                                Priorita varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
                                PRIMARY KEY (Id))
                                ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci";
echo "creo tabella ".$tablename;
echo "<br>";
            }
            @$resultqueryTable = mysqli_query($linkdb, $sqlTable); // eseguo lo script sql           
            if ($Fr) { // verifico la corretta apertura
echo "file aperto cerrettamente";
echo "<br>";
                
                $lines[0] = fgets($Fr); // inserisco le righe del file in un array

echo "prima riga: ".$lines[0];
echo "<br>";

                $char = substr($lines[0], 2, 1);
echo "separatore: ".$char;
echo "<br>";
                if ($char == ";") {
                    $Sep = ";"; // separatore dei dati
echo "separatore tipo: pv";
echo "<br>";
                } elseif ($char == "    ") {
                    $Sep = "    "; // separatore dei dati
echo "separatore tipo: tab";
echo "<br>";
                } elseif ($char == ",") {
                    $Sep = ","; // separatore dei dati
echo "separatore tipo: v";
echo "<br>";
                } else {
                    $Sep = "no";
echo "separatore non riconosciuto";
echo "<br>";
                }
                if ($Sep != "no") {
                    $Rows = 0;
                    while (!feof($Fr)) {  // leggo il file fino alla fine
                        //$column = fgetcsv($Fr, 0, $Sep);
                        $ArrayRow = fgets($Fr);
                        $ArrayRow = mb_convert_encoding($ArrayRow, 'UTF-8', "auto"); // converto il formato del file in codifica carattere UTF-8
                        $column = explode($Sep,$ArrayRow); // converto la righa in array usando il separatore per definire i dati
                        if (($Rows >= 1) AND ($column[0] != null)) {
echo "(2)".$column[2]."--";
echo "(3)".$column[3]."--";
                            $column[5] = str_replace(',', '.', $column[5]);
                            $column[6] = str_replace(',', '.', $column[6]);
                            $column[9] = str_replace(',', '.', $column[9]);
                            $column[10] = str_replace(',', '.', $column[10]);
                            $column[11] = str_replace(',', '.', $column[11]);
echo "<br>";
                            $Priorita = "0";
                            $sqlInsert = "INSERT into ".$tablename." (Id, Site1, Site2, Antenna1_h, Antenna2_h, Distance, Direction1, Direction2, Priorita)
                                                values           (".$column[0].",".$column[2].",".$column[3].",".$column[5].",".$column[6].",".$column[9].",".$column[10].",".$column[11].",".$Priorita.")";
                            $result = mysqli_query($linkdb, $sqlInsert);

                        }
                        $Rows ++;
                    }
                } else {
                    $Error = "Text file ".$FileName." with unsuitable separator";
                }
            } else {
                $Error = "Read file ".$FileName." impossible!"; // messaggio di errore
            }

        break;
}
Di seguito riporto output video creato con gli echo..

cancello tabella newlosadmin
file aperto cerrettamente
prima riga: Id;GEOMETRY;Site1;Site2;Frequency (MHz);Antenna 1 Height/Ground (m);Antenna 2 Height/Ground (m);Line of Sight (k1) (%);Line of Sight (k2) (%);Distance (km);Direction 1 (�);Direction 2 (�);Custom heights;
separatore: ;
separatore tipo: pv
(2)BS25030_008_01--(3)BG24054_001_01--
(2)BS25030_008_01--(3)BG24056_001_02--
(2)BS25030_008_01--(3)BS25030_003_03--
(2)BS25030_008_01--(3)BS25030_019_01--
(2)BS25030_008_01--(3)BS25030_020_01--
(2)BS25030_008_01--(3)BS25032_001_02--
(2)BS25030_008_01--(3)BS25032_002_02--
(2)BS25030_008_01--(3)CR26029_001_01--

I campi (2) e (3) sono i record che non riesco a caricare e che a video vengono visualizzati correttamente.
se nel codice forzo il caricamento di una stringa tipo

PHP:
 // import nella tabella funziona
 $prova = "1";
 $prova = 1;
 
 // import nella tabella non funziona
 $prova = "A";
 
 $sqlInsert = "INSERT into ".$tablename." (Id, Site1, Site2, Antenna1_h, Antenna2_h, Distance, Direction1, Direction2, Priorita)
                               values  (".$column[0].",".$prova.",".$prova.",".$column[5].",".$column[6].",".$column[9].",".$column[10].",".$column[11].",".$Priorita.")";
 $result = mysqli_query($linkdb, $sqlInsert);
Dove sbaglio ?
Avete qualche idea?

Grazie