[PHP] Importare file CSV in HTML

Discussione in 'PHP' iniziata da Franco.cava697, 4 Settembre 2019.

  1. Franco.cava697

    Franco.cava697 Nuovo Utente

    Registrato:
    24 Gennaio 2019
    Messaggi:
    7
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Ciao a tutti,
    vorrei mostrare i dati di un file CSV che viene ricreato (con lo stesso nome) ogni 10 minuti in una cartella del server con valori diversi in una pagina PHP del mio sito web.
    Ho fatto qualche ricerca su internet e ho visto che la soluzione ideale sarebbe di importare i dati in una tabella SQL per poi andare ad interrogare il db ogni 10 minuti.

    Qualcuno può aiutarmi?

    Grazie a tutti!
     
  2. AC1

    AC1 Nuovo Utente

    Registrato:
    13 Novembre 2017
    Messaggi:
    25
    Mi Piace Ricevuti:
    2
    Punteggio:
    3
    Sesso:
    Maschio
    Occupazione:
    TLC/INFORMATICO/DEVELOPER/GRAPHIC DESIGNER
    Località:
    Barletta
    Il csv è un formato di database devi importarlo necessariamente in in db e fare le query per mostrarle dove e come vuoi


    Inviato dal mio iPhone utilizzando Tapatalk
     
  3. Franco.cava697

    Franco.cava697 Nuovo Utente

    Registrato:
    24 Gennaio 2019
    Messaggi:
    7
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Ok, ma dovrei aggiornare la query ogni 10 minuti (il tempo di ri-creazuibe del file). Come posso fare?
     
  4. AC1

    AC1 Nuovo Utente

    Registrato:
    13 Novembre 2017
    Messaggi:
    25
    Mi Piace Ricevuti:
    2
    Punteggio:
    3
    Sesso:
    Maschio
    Occupazione:
    TLC/INFORMATICO/DEVELOPER/GRAPHIC DESIGNER
    Località:
    Barletta
    Ma questo file, come e da dove viene generato?


    Inviato dal mio iPhone utilizzando Tapatalk
     
  5. Franco.cava697

    Franco.cava697 Nuovo Utente

    Registrato:
    24 Gennaio 2019
    Messaggi:
    7
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Il file viene generato da uno script.. contiene due colonne e due valori che di volta in volta cambiano.
     
  6. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    926
    Mi Piace Ricevuti:
    53
    Punteggio:
    28
    Sesso:
    Maschio
    Occupazione:
    Developer
    Località:
    L'Aquila
    DB FLAT no?
     
  7. AC1

    AC1 Nuovo Utente

    Registrato:
    13 Novembre 2017
    Messaggi:
    25
    Mi Piace Ricevuti:
    2
    Punteggio:
    3
    Sesso:
    Maschio
    Occupazione:
    TLC/INFORMATICO/DEVELOPER/GRAPHIC DESIGNER
    Località:
    Barletta
    Certo più complesso ma si può fare, in teoria dovresti aprire il file come un file di testo e capire il punto specifico del dato che ti interessa.


    Se si ha modo converrebbe che lo script scriva su un db esterno e da lì fare le query per agevolare le cose


    Inviato dal mio iPhone utilizzando Tapatalk
     
  8. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    926
    Mi Piace Ricevuti:
    53
    Punteggio:
    28
    Sesso:
    Maschio
    Occupazione:
    Developer
    Località:
    L'Aquila
    PHP:
    $data=[];
    $rows=str_getcsv(file_get_contens($file),"\n");
    foreach(
    $rows as $items){
    $data[]=str_getcsv($items);
    }
    //Nel caso ci siano le intestazioni e si volesse un array associativo
    $intest=str_getscv($rows[0],$delim);
    for(
    $i=1;$i<count($rows);$i++){
    $items=$rows[$i];
    $local=[];
    foreach(
    str_getcsv($items,$delim) as $kk=>$vv){
    $local[$intest[$kk]]=$vv;
    }
    $data[]=$local;
    }

    et voilà

    Seriamente non capisco il difficile... per quanto riguarda l'update dei dati si ricostruisce l'intero csv, o semplicemente si utilizza l'indice di riga come ID del database...

    Es:
    PHP:
    $current_rows=file($file);
    $items=str_getcsv($current_rows[$n],$delim);
    2 righe di codice, e si agisce direttamente sulla riga incriminata....
    Se poi si devono fare le quey, basterebbe utilizzare la struttura documentale che in questo caso (array associativo) è veramente una cavolata...
    PHP:
    json_encode($array,128)
    Tutto qui....
    Scusa, non vuole essere una polemica, solo un modo costruttivo per avere un quadro più completo e non fermarsi solo alla prima soluzione....
    Buona serata!
     
    Ultima modifica: 4 Settembre 2019
    A AC1 piace questo elemento.
  9. AC1

    AC1 Nuovo Utente

    Registrato:
    13 Novembre 2017
    Messaggi:
    25
    Mi Piace Ricevuti:
    2
    Punteggio:
    3
    Sesso:
    Maschio
    Occupazione:
    TLC/INFORMATICO/DEVELOPER/GRAPHIC DESIGNER
    Località:
    Barletta
    Ma che polemica :), sinceramente era un metodo che non mi è mai capitato e non conoscevo, sono andato di logica.

    I forum servono proprio per questo per crescere e accumulare conoscenze
     
  10. Franco.cava697

    Franco.cava697 Nuovo Utente

    Registrato:
    24 Gennaio 2019
    Messaggi:
    7
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Scusate ma non riesco a farlo funzionare :( .
    Il sistema mostra una pagina bianca.
    Ho provato a modificare questo codice e funziona, ma senza passare dal database.

    C'è un modo di ri-eseguire lo script ogni 10 minuti?
    Secondo voi è meglio questo metodo o quello del db? Considerando che i dati vorrei separarli a mio piacimento (mettendo le varie intestazioni).


    Grazie a tutti per le risposte.



    PHP:
    <?php
    function leggi_csv$file$delimitatore ";" )
    {
        
    $ritorno "<table cellpadding='3'>";  //Comincio a stampare la tabella
       
        //apro il file CSV in sola lettura
        
    if (($fcsv fopen($file"r")) !== false)
        {
            
    //ciclo il file riga per riga
            
    while (($riga fgetcsv($fcsv2000$delimitatore)) !== false//fgetcsv - Gets line from file pointer and parse for CSV fields
            
    {
                
    //leggo il contenuto e lo metto nella tabella
                
    $ritorno .= "<tr>"//creo la riga
                
    foreach( $riga as $el $ritorno .= "<td>" $el "</td>"//creo la colonna della tabella
                
    $ritorno .= "</tr>"//chiudo la riga
            
    }
            
    fclose($fcsv);
        }
       
        
    $ritorno .= "</table>"//il ciclo e finito, chiudo la tabella
        
    echo $ritorno//stampo il tutto
       
        
    return 0;
    }

    leggi_csv("Esempio.csv",";");
    ?>
     
  11. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    926
    Mi Piace Ricevuti:
    53
    Punteggio:
    28
    Sesso:
    Maschio
    Occupazione:
    Developer
    Località:
    L'Aquila
    PHP:
    function test_csvPrint(){
       
    $input='https://people.sc.fsu.edu/~jburkardt/data/csv/cities.csv';
       
    $input=MYROOT.'db/cnv.csv';
       
    $this->readAndTabledCSV($input,true,true,true,"\r",",");
    }

    function 
    readAndTabledCSV($input,$read_line2line=false,$have_intest=false,$to_assoc=false,$rows="\n",$cols="\t"){
       if(
    filter_var($inputFILTER_VALIDATE_URL)){
          
    $tmp_file=time().'.csv';
          
    file_put_contents(MYROOT.'db/'.$tmp_file,file_get_contents($input));
          return 
    readAndTabledCSV($input,$read_line2line,$have_intest,$to_assoc,$rows,$cols);
       }
       
    $int=[];
       
    $data=[];
       if(
    $read_line2line){
          
    $handler=fopen($input,'r');
          while(!
    feof($handler)){
             
    $buffer trim(fgets($handler));
             
    $data[]=str_getcsv($buffer,$cols);
          }
          
    fclose($handler);
       }else{
          
    $row=str_getcsv(file_get_contents($input),$rows);
          foreach (
    $row as $item){
             
    $data[]=str_getcsv($item,$cols);
          }
       }

       if(
    $have_intest && $to_assoc){
          
    $int=$data[0];
          unset(
    $data[0]);
          
    $data=array_values($data);

          foreach (
    $data as $k=>$v){
             
    $local=[];

             foreach (
    $int as $sub_key=>$items){
                if(
    count($v)>=count($int))$local[$items]=$v[$sub_key];
             }
             
    $data[$k]=$local;
          }
       }
       
    $my_tbl='<table>';
       if(
    $have_intest)$my_tbl.='<thead><tr><th>'.join('</th><th>',$int).'</th></tr></thead>';
       
    $my_tbl.='<tbody>';

       foreach (
    $data as $items){
          
    $my_tbl.='<tr>';
          
    $my_tbl.='<td>'.join('</td><td>',$items).'</td>';
          
    $my_tbl.='</tr>';
       }
       
    $my_tbl.='</tbody></table>';
       echo 
    $my_tbl;
    }
    Appena testato e funzionante, funziona anche con dati remoti, e senza troppi fronzoli e controlli stampa la tabella....
    Da definire la const MYROOT

    I parametri to_assocc etc servono per ritorni diversi dalla tabella, da utilizzarsi come meglio si crede....
     
  12. Franco.cava697

    Franco.cava697 Nuovo Utente

    Registrato:
    24 Gennaio 2019
    Messaggi:
    7
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Scusa l’ignoranza ma non riesco a farlo funzionare.. ho conoscenze base in merito alla questione.
    Cos’è la costante MYROOT?

    Grazie
    Ciao
     
  13. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    926
    Mi Piace Ricevuti:
    53
    Punteggio:
    28
    Sesso:
    Maschio
    Occupazione:
    Developer
    Località:
    L'Aquila
    La root dell'applicazione che non sempre coincide con la root del VS....
    cmq... nella index.php scrivi questo

    PHP:
    define('MYROOT',__DIR__);
    Et voilà-
     
Sto caricando...

Condividi questa Pagina