Back to top

Autore Topic: CSV doppi apici e punto e virgola da Excel tramite PHP  (Letto 3171 volte)

Offline nofc_nofc

  • Appassionato
  • ***
  • Post: 255
    • Mostra profilo
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?

Codice: [Seleziona]
// 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"; 

Offline steganoga

  • Abituale
  • ****
  • Post: 1313
    • Mostra profilo
Re:CSV doppi apici e punto e virgola da Excel tramite PHP
« Risposta #1 il: 26 Nov 2014, 13:54:26 »
..non vedo il personaggio principale... Joomla
...sono dove non ti aspetti di trovarmi, mi alimento della tua supponenza e disseto la mia curiosità nel silenzio.
Non sono un nemico, considerami un ospite.

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:CSV doppi apici e punto e virgola da Excel tramite PHP
« Risposta #2 il: 01 Dic 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
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

 



Web Design Bolzano Kreatif