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
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
Dove sbaglio ?
Avete qualche idea?
Grazie
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