Joomla.it Forum

Non solo Joomla... => Database => : nofc_nofc 26 Nov 2014, 13:39:43

: CSV doppi apici e punto e virgola da Excel tramite PHP
: nofc_nofc 26 Nov 2014, 13:39:43
Salve a tutti,
 questo script php permette di caricare un file csv. Tuttavia accetta una formattazione punto e virgola e doppi apici, ovvero: "gianni";"rossi";"23", tuttavia quando si esporta da Excel in formato csv la formattazione è gianni;rossi;23. Come si può creare una formattazione come la prima da excel? oppure si può modificare lo script in modo da accettare la seconda formattazione?

:
// Apro la connessione al DB
// ------
// ------
 
 
// Recupero il file
$file = $_FILES['filecsv'];
 
$nome_file = $file['tmp_name']; # Nome temporaneo file
$size_file = $file['size']; # Dimensione file
 
// Controllo che il file sia stato inserito e che quindi esista
if ( ($handle = fopen($nome_file, "r") ) !== FALSE) {
    // Uso un contatore per vedere se sono nella prima riga dei campi
    $cont = 0;
     
    // Uso la funzione fgetcsv per recuperare le informzioni nel modo corretto dal CSV
    // Il secondo parametro è la dimesione del file, che abbiamo recuperato sopra     
    // Come si vede il 3 parametro è il separatore dei campi (;)
    // Il separatore per ogni riga in automatico è l'a capo
    while ( ( $data = fgetcsv($handle, $size_file, ";") ) !== FALSE ) {
        if ( $cont == 0 ) {
            $cont++;
             
            // Assegno ad una variabile $campi_tabella, la prima riga del nome dei campi del CSV
            $campi_tabella = $data;
        }
        else {
            // Recupero i nomi dei campi
            $campo_nome = $campi_tabella[0];
            $campo_cognome = $campi_tabella[1];
            $campo_indirizzo = $campi_tabella[2];
            $campo_mail = $campi_tabella[3];
            $campo_telefono = $campi_tabella[4];             
             
            // Recupero i valori dei campi
            $nome = $data[0];
            $cognome = $data[1];
            $indirizzo = $data[2];
            $mail = $data[3];
            $telefono = $data[4];
 
            // Creo una query di inserimento e la eseguo
            $sql = "
                INSERT INTO utenti SET 
                    $campo_nome = '$nome',
                    $campo_cognome = '$cognome',
                    $campo_indirizzo = '$indirizzo',
                    $campo_mail = '$mail',
                    $campo_telefono = '$telefono'
            ";
            $rssql = mysql_query( $sql );
             
            // Controllo che l'importazione sia avvenuta con successo
            echo ( $rssql ) ? "Importazione avvenuta con successo" : "Errore nella query o connessione al DB mancante";             
        }
    }
}
else
    echo "Nessun file inserito"; 
: Re:CSV doppi apici e punto e virgola da Excel tramite PHP
: steganoga 26 Nov 2014, 13:54:26
..non vedo il personaggio principale... Joomla
: Re:CSV doppi apici e punto e virgola da Excel tramite PHP
: mmleoni 01 Dec 2014, 17:02:53
non mi pare che fgetcsv faccia la distinzione che dici tu: usa le " se deve andare a capo, ma non sono necessarie.

per il resto il tuo codice non mi pare il massimo, e, ti faccio notare, che stai passando ad una query dei dati senza nessun escaping, facile è che l'errore di importazione sia qui, certo è che l'errore di sicurezza è qui!

ciao