Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    605

    Lettura particolare di un .csv

    Ciao a tutti ragazzi,
    attualmente leggo è inserisco in una tabella mysql il contenuto di un file .csv, in questo modo:



    codice:
    	$row = 1;
    	$handle = fopen ($file,"r");
    
    	while ($data = fgetcsv ($handle, 1000, ";")) {
    	$values= "'".$data[0]."', '".$data[1]."', '".$data[2]."', '".$data[3]."', '".$data[4]."'";
    	
    	$query = "INSERT INTO TBProva (nome,cognome,data_nascita,indirizzo,residenza) VALUES($values)";
    	$result = mysql_query($query) or die("Invalid query: " . mysql_error().__LINE__.__FILE__);
    	$row++;
    	}

    Ora come ora, però, sono obbligato a rispettare un'ordine di colonne fisso, del tipo tutti i nomi nella prima colonna, tutti i cognomi alla seconda colonna e data di nascita nella 3 colonna.


    ora quello che pensavo di fare è di essere un pò più elastico con questi signori che mi creano il file .csv.
    :rollo:
    Pensavo praticamente di mettere alla prima linea del foglio csv i titoli (assolutamente ed indiscutibilemente fissi...) che una volta letti mi si mettano nella query al posto di


    nome,cognome,data_nascita,indirizzo,residenza

    in modo che siano dinamici anche campi della della tabella mysql

    Vorrei insomma in questo modo che grazie al titolo della colonna del file .csv capisca dove andranno inseriti i suoi dati sottostanti.

    Per leggere la prima riga non c'è problema e metterla al posto della query, ma come faccio ad associargli i dati sottostanti.
    Spero di essere stato chiaro... nel possibile.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    605

    aggiungo due immagini...

    aggiungo ancora due parole...
    per cercar di farmi capire meglio....

    Praticamente nel modo in cui vorrei modificare la query avere un file così:



    codice:
    Nome 	DataNascita	Indirizzo	LuogoN	Cognome
    Pippo 	15/02/41	via del corso	Viterbo	Pappo
    Mario	15/12/87	via del mare	Milano	Rossi


    o così:



    codice:
    Nome 	Cognome	DataNascita	LuogoN	Indirizzo
    Pippo 	Pappo	15/02/41	Viterbo	via del corso
    Mario	Rossi	15/12/87	Milano	via del mare

    non mi cambierebbe nulla... e sarebbe meno vincolante per chi fà il csv.
    Siete daccordo..??
    Naturalmente questa è un'idea per facilitare il lavoro all'utente, (il nostro destino.... malvagio...)
    ma se ne avete un'altra o qualche altro consiglio e ben accetto!
    Ciao Centro

  3. #3
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    ciao, prova così:
    codice:
    $row = 1;
    $handle = fopen ($file,"r");
    $campi_file = fgetcsv ($handle, 1000, ";");
    $nome_campi=array("Nome","Cognome","DataNascita","Indirizzo","LuogoN");
    $cont=0;
    $temp=array();
    foreach($campi_file as $campo){
    	$temp[$campo]=$cont;
    	$cont++;
    }
    $campi_file=array();
    foreach($nome_campi as $singolo){
    	$campi_file[]=$temp[$singolo];
    }
    while ($data = fgetcsv ($handle, 1000, ";")) {
    	$values= "'".$data[$campi_file[0]]."', '".$data[$campi_file[1]]."', '".$data[$campi_file[2]]."', '".$data[$campi_file[3]]."', '".$data[$campi_file[4]]."'";
    	$query = "INSERT INTO TBProva (nome, cognome, data_nascita, indirizzo, residenza) VALUES ($values)";
    	$result = mysql_query($query) or die("Invalid query: " . mysql_error().__LINE__.__FILE__);
    	$row++;
    }
    think simple think ringo

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    605

    ciao

    ciao marketto,
    mi piacerebbe capire meglio come hai fatto....

    quì...

    $campi_file = fgetcsv ($handle, 1000, ";");
    $nome_campi=array("Nome","Cognome","DataNascita"," Indirizzo","LuogoN");
    $cont=0;
    $temp=array();
    foreach($campi_file as $campo){
    $temp[$campo]=$cont;
    $cont++;
    }
    $campi_file=array();
    foreach($nome_campi as $singolo){
    $campi_file[]=$temp[$singolo];
    }


    e eccezionale... funge...alla grande solo che non riesco a stamparmi il nome... come mai secondo te? eppure è scritto proprio così nella tabella e daltronde non da errore di esecusione nella query. è ho provato a stamparlo così ed è vuoto

    echo "NOME: ". $data[$campi_file[0]] . "
    ";



    Poi avrei, ne approfitto lo so...
    altre due domendine da farti...
    ma quì dentro non posso mettere un ciclo per rendere dinamico anche questo:

    $values= "'".$data[$campi_file[0]]."', '".$data[$campi_file[1]]."', '".$data[$campi_file[2]]."', '".$data[$campi_file[3]]."', '".$data[$campi_file[4]]."'";



    e poi ancora
    in questa riga quì

    $campi_file = fgetcsv ($handle, 1000, ";");
    non riesco a capire cos'è 1000, può essere una limitazione nella lettura...? Sono le colonne vero?
    Ciao e ancora grazie
    Centro :master:

  5. #5
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    ciao, devi fare attenzione ai nomi dei campi. le maiuscole e le minuscole sono differenti

    ho riprovato lo script, e funzia:

    FILE TEST.CSV:
    codice:
    Nome;Cognome;DataNascita;LuogoN;Indirizzo
    Pippo;Pappo;15/02/41;Viterbo;via del corso
    Mario;Rossi;15/12/87;Milano;via del mare
    CODICE SCRIPT:
    codice:
    $file="test.csv";
    $row = 1;
    $handle = fopen ($file,"r");
    $campi_file = fgetcsv ($handle, 1000, ";");
    $nome_campi=array("Nome","Cognome","DataNascita","Indirizzo","LuogoN");
    $cont=0;
    $temp=array();
    foreach($campi_file as $campo){
    	$temp[$campo]=$cont;
    	$cont++;
    }
    $campi_file=array();
    foreach($nome_campi as $singolo){
    	$campi_file[]=$temp[$singolo];
    }
    while ($data = fgetcsv ($handle, 1000, ";")) {
    	$values= "'".$data[$campi_file[0]]."', '".$data[$campi_file[1]]."', '".$data[$campi_file[2]]."', '".$data[$campi_file[3]]."', '".$data[$campi_file[4]]."'";
    	$query = "INSERT INTO TBProva (nome, cognome, data_nascita, indirizzo, residenza) VALUES ($values)";
    	echo $query."
    \n";
    	//$result = mysql_query($query) or die("Invalid query: " . mysql_error().__LINE__.__FILE__);
    	$row++;
    }
    RISULATI SCRIPT:
    codice:
    //INSERT INTO TBProva (nome, cognome, data_nascita, indirizzo, residenza) VALUES ('Pippo', 'Pappo', '15/02/41', 'via del corso', 'Viterbo')
    //INSERT INTO TBProva (nome, cognome, data_nascita, indirizzo, residenza) VALUES ('Mario', 'Rossi', '15/12/87', 'via del mare', 'Milano')
    per 1000 guarda il manuale, ovvero www.php.net/fgetcsv


    think simple think ringo

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    605

    grazie marketto.......

    ciao marketto,
    solo ora posso riprovare lo script...
    purtroppo ho fatto tutto quello che tu dici ma il nome proprio non vuole scrivermelo.... ma che sarà mai??'
    ti posto anch'io i miei, magari noti qualcosa di strano,ma mi sembra tutto come il tuo....


    questo è il mio .csv


    codice:
    Nome ;Cognome;DataNascita;LuogoN;Indirizzo
    Pippo ;Pappo;15/02/41;Viterbo;via del corso
    Mario;Rossi;15/12/87;tab@@2;via del mare
    Giuseppe;Federici;11/02/00;Milano;via roma
    batman;Robin;11/01/80;New York;Via dei fori


    questo è il mio script.... cioè il tuo


    codice:
    $file="test.csv";
    $row = 1;
    $handle = fopen ($file,"r");
    $campi_file = fgetcsv ($handle, 1000, ";");
    $nome_campi=array("Nome","Cognome","DataNascita","Indirizzo","LuogoN");
    $cont=0;
    $temp=array();
    
    
    foreach($campi_file as $campo){
    	$temp[$campo]=$cont;
    	$cont++;
    }
    $campi_file=array();
    foreach($nome_campi as $singolo){
    	$campi_file[]=$temp[$singolo];
    //echo $campi_file[];
    }
    while ($data = fgetcsv ($handle, 1000, ";")) {
    	$values= "'".$data[$campi_file[0]]."', '".$data[$campi_file[1]]."', '".$data[$campi_file[2]]."', '".$data[$campi_file[3]]."','".$data[$campi_file[4]]."'";
    //	echo "<HR>" . $values . "<HR>";
    	$query = "INSERT INTO TBProva (nome, cognome, data_nascita, indirizzo, residenza) VALUES ($values)";
    
    	echo $query."
    \n";
    	$result = mysql_query($query) or die("Invalid query: " . mysql_error().__LINE__.__FILE__);
    	$row++;
    }


    e questa la mia tabella in fomato .sql
    codice:
     
    
    #
    # Table structure for table tbprova
    #
    
    CREATE TABLE `tbprova` (
      `Id` int(6) unsigned NOT NULL auto_increment,
      `Nome` varchar(50) default NULL,
      `Cognome` varchar(50) default NULL,
      `Data_nascita` varchar(50) default NULL,
      `Indirizzo` varchar(50) default NULL,
      `Residenza` varchar(50) default NULL,
      PRIMARY KEY  (`Id`)
    ) TYPE=MyISAM;
    
    
    #
    # Dumping data for table tbprova
    #
    
    INSERT INTO `tbprova` VALUES (1,'','Pappo','15/02/41','via del corso','Viterbo');
    INSERT INTO `tbprova` VALUES (2,'','Rossi','15/12/87','via del mare','tab@@2');
    INSERT INTO `tbprova` VALUES (3,'','Federici','11/02/00','via roma','Milano');
    INSERT INTO `tbprova` VALUES (4,'','Robin','11/01/80','Via dei fori','New York');




    vedi qualcosa di strano??

    c'è qualche prova che posso fare.....
    io ho provato a stamparmi

    foreach($nome_campi as $singolo){
    $campi_file[]=$temp[$singolo];
    echo $campi_file[0];
    }


    ed è vuoto già nel ciclo...

    cosa posso fare?

    ciao e ancora grazie
    Giuseppe

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    605
    questa è veramente bella....
    lo stesso script su un'altro server funge.... alla grande...
    c'è qualcosa nel php.ini che mi impedisce la valorizzazione degli array di 0 array[0].
    visto che mi sembra l'unico motivo plausibile....

    anzi n'altro motivo ci potrebbe essere ci sono i fantasmi sulla mia macchina... o su quella su cui funziona...
    altro non può essere,,,,
    Ciao Giuseppe

  8. #8
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    boh, nn saprei.
    l'unica cosa che forse potrebbe dar fastidio è lo spazio nel file csv alla voce "Nome ;"

    think simple think ringo

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    605

    sei...

    un grande....
    era proprio quello...
    ma comunque non capisco perchè lo stesso csv e su un'altro server funzionava..??
    misteri dell'informatica??? VVoVe:
    Grazie mille....
    Ma se posso approfittarne ancora con chiederti un consiglio....
    secondo te... meglio mettere un titolo con questo script appunto (e render la cosa più elastica...) o obbligarli a mettere il nome nella prima colonna.... cognome nella seconda... e così via...?
    grazie ancora
    Centroo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.