Annuncio

Collapse
No announcement yet.

Lettura DB da file PHP e scrittura MySql

Collapse
X
 
  • Filter
  • Ora
  • Show
Clear All
new posts

    Lettura DB da file PHP e scrittura MySql

    Questa è tosta (per lo meno per me).

    Devo leggere un DB che mi passa un url : www.sito.com/file.php in formato testo, separato da caratteri particolari, il file è di 2 mega circa con i campi separati da un ";" ed i record separati da un \return.

    Sono partito così :
    Codice PHP:
    $handle fopen("http://www.sito.com/file.php""rb");
    $contents '';
    while (!
    feof($handle))  {
       
    $contents .=fread($handle8192);
      }
       
    $contents .= $data;

    fclose($handle);
    echo
    "$contents"
    Poi pensavo di usare un explode()




    #2
    Ho trovato uno script interessante che modificherò un pò.
    Codice PHP:
    <?php 
    ################################ 
    ##        CONFIGURAZIONE      ## 
    ################################ 
    //imposta opportunamente le variabili qui sotto 

    $_CFG['file'] = 'file.txt'
    $_CFG['separatore'] = ','
    $_CFG['db_host'] = 'localhost'
    $_CFG['db_user']  = 'root'
    $_CFG['db_pwd']  = 'root'
    $_CFG['db_name'] ='database'
    $_CFG['db_table'] =  'tabella'
    ################################ 
    ##    FINE  CONFIGURAZIONE    ## 
    ################################ 
    //non modificare qui sotto 
    function mysql_table_exists($database$tableName

       
    $tables = array(); 
       
    $tablesResult mysql_query("SHOW TABLES FROM $database;"); 
       while (
    $row mysql_fetch_row($tablesResult)) $tables[] = $row[0]; 
       return(
    in_array($tableName$tables)); 


    ob_start(); 
    if(!
    file_exists($_CFG['file']) || !is_readable($_CFG['file'])) 
     { 
       echo 
    "Impossibile aprire in lettura il file di input ({$_CFG['file']})<br />controllare la configurazione dello script"
       exit; 
     } 
     @
    mysql_connect($_CFG['db_host'],$_CFG['db_user'],$_CFG['db_pwd']) or die("Impossibile connettersi a mysql, verificare host username e password<br />".mysql_error()); 
    @
    mysql_select_db($_CFG['db_name'])or die("Impossibile selezionare il database \"{$_CFG['db_name']}\""); 
    if(!
    mysql_table_exists($_CFG['db_name'],$_CFG['db_table'])) 

       echo 
    "Impossibile trovare la tabella \"{$_CFG['db_table']}\" nel database \"{$_CFG['db_name']}\"<br />controllare la configurazione dello script"
       exit; 


    $righe file($_CFG['file']); 
    $newrighe = array(); 
    foreach (
    $righe as $riga) if(trim($riga) !=''
        
    $newrighe[] = $riga

     echo 
    'Inserimento di '.count($newrighe).' record in corso....<br />'
    flush(); 
    ob_flush(); 
    $ins 0
    foreach (
    $newrighe as $riga

      
    $contenuto explode($_CFG['separatore'],$riga); 
      
    $values=''
      foreach (
    $contenuto as $elem
         
    $values .= "'".mysql_escape_string($elem)."',"
      
    $values substr($values0, -1); 
      
    $sql =  "INSERT INTO `{$_CFG['db_table']}` VALUES ($values);"
      if(!
    mysql_query($sql)) echo "problemi con la query \"$sql\"<br />motivo: <b>".mysql_error().'</b><br /><br />'
      else 
    $ins++; 

    mysql_close(); 
    echo 
    "Inseriti con successo $ins record"
    ?>



    Commenta


      #3
      spiegati meglio, in pratica quello che ricevi è un tracciato record per poter creare una tabella in mysql ?
      Powerlifting instructor level III FIPL/AIF
      Certified Personal Trainer by International Sports Sciences Association
      Master Slim coach by 4move

      CONTATTI: tecalbe@hotmail.it / Facebook
      / Blog personale

      Commenta


        #4
        Si, è un file di testo in forma sequenziale dove i campi sono separati da appositi "separatori".



        Commenta


          #5
          gli ho dato un occhiata mi sembra corretto lo script..
          il file di testo però deve avere necessarimente tutti i campi della tabella se scrivi cosi la query
          Last edited by Albe; 04-04-2006, 09:20:03.
          Powerlifting instructor level III FIPL/AIF
          Certified Personal Trainer by International Sports Sciences Association
          Master Slim coach by 4move

          CONTATTI: tecalbe@hotmail.it / Facebook
          / Blog personale

          Commenta


            #6
            Originariamente Scritto da Albe
            gli ho dato un occhiata mi sembra corretto lo script..
            il file di testo però deve avere necessarimente tutti i campi della tabella se scrivi cosi la query
            Difatti mi dava degli errori per quel motivo li... ecco una correzione da potere fare.



            Commenta


              #7
              Originariamente Scritto da Sergio
              Questa è tosta (per lo meno per me).

              Devo leggere un DB che mi passa un url : www.sito.com/file.php in formato testo, separato da caratteri particolari, il file è di 2 mega circa con i campi separati da un ";" ed i record separati da un \return.

              Sono partito così :
              Codice PHP:
              $handle fopen("http://www.sito.com/file.php""rb");
               
              $contents '';
               while (!
              feof($handle))  {
                  
              $contents .=fread($handle8192);
                 }
                  
              $contents .= $data;
               
               
              fclose($handle);
               echo
              "$contents"
              Poi pensavo di usare un explode()
              Lo script che hai postato successivamente sembra corretto, ma scusa una cosa: questa operazione sul file in questione sarà ripetuta nel tempo o la farai soltanto una volta?
              ___________________


              Codice:
              apt-get remove brain
              apt-get install windows-Vista
              ___________________

              Commenta


                #8
                Originariamente Scritto da Ayurvedi77
                Lo script che hai postato successivamente sembra corretto, ma scusa una cosa: questa operazione sul file in questione sarà ripetuta nel tempo o la farai soltanto una volta?
                Ripetuta, una volta al giorno od una volta a settimana.



                Commenta


                  #9
                  Ah ok
                  Facci sapere come va con quello script!
                  ___________________


                  Codice:
                  apt-get remove brain
                  apt-get install windows-Vista
                  ___________________

                  Commenta


                    #10
                    Che ne pensi di questo?
                    Codice PHP:
                    <?                     
                       mysql_connect('localhost', 'user', 'pass');   
                       mysql_select_db('nome_database');          
                       mysql_query("LOAD DATA LOCAL INFILE 'marchette.csv' INTO TABLE statistiche_puttanone FIELDS TERMINATED BY "," LINES TERMINATED BY "\\r\\n";');
                    ?>

                    Originariamente Scritto da Sergio
                    Ho trovato uno script interessante che modificherò un pò.
                    Codice PHP:
                    <?php 
                        
                    ################################ 
                        ##        CONFIGURAZIONE      ## 
                        ################################ 
                        //imposta opportunamente le variabili qui sotto 
                        
                        
                    $_CFG['file'] = 'file.txt'
                        
                    $_CFG['separatore'] = ','
                        
                    $_CFG['db_host'] = 'localhost'
                        
                    $_CFG['db_user']  = 'root'
                        
                    $_CFG['db_pwd']  = 'root'
                        
                    $_CFG['db_name'] ='database'
                        
                    $_CFG['db_table'] =  'tabella'
                        
                    ################################ 
                        ##    FINE  CONFIGURAZIONE    ## 
                        ################################ 
                        //non modificare qui sotto 
                        
                    function mysql_table_exists($database$tableName
                        { 
                           
                    $tables = array(); 
                           
                    $tablesResult mysql_query("SHOW TABLES FROM $database;"); 
                           while (
                    $row mysql_fetch_row($tablesResult)) $tables[] = $row[0]; 
                           return(
                    in_array($tableName$tables)); 
                        } 
                        
                        
                    ob_start(); 
                        if(!
                    file_exists($_CFG['file']) || !is_readable($_CFG['file'])) 
                         { 
                           echo 
                    "Impossibile aprire in lettura il file di input ({$_CFG['file']})<br />controllare la configurazione dello script"
                           exit; 
                         } 
                         @
                    mysql_connect($_CFG['db_host'],$_CFG['db_user'],$_CFG['db_pwd']) or die("Impossibile connettersi a mysql, verificare host username e password<br />".mysql_error()); 
                        @
                    mysql_select_db($_CFG['db_name'])or die("Impossibile selezionare il database \"{$_CFG['db_name']}\""); 
                        if(!
                    mysql_table_exists($_CFG['db_name'],$_CFG['db_table'])) 
                        { 
                           echo 
                    "Impossibile trovare la tabella \"{$_CFG['db_table']}\" nel database \"{$_CFG['db_name']}\"<br />controllare la configurazione dello script"
                           exit; 
                        } 
                        
                        
                    $righe file($_CFG['file']); 
                        
                    $newrighe = array(); 
                        foreach (
                    $righe as $riga) if(trim($riga) !=''
                            
                    $newrighe[] = $riga
                        
                         echo 
                    'Inserimento di '.count($newrighe).' record in corso....<br />'
                        
                    flush(); 
                        
                    ob_flush(); 
                        
                    $ins 0
                        foreach (
                    $newrighe as $riga
                        { 
                          
                    $contenuto explode($_CFG['separatore'],$riga); 
                          
                    $values=''
                          foreach (
                    $contenuto as $elem
                             
                    $values .= "'".mysql_escape_string($elem)."',"
                          
                    $values substr($values0, -1); 
                          
                    $sql =  "INSERT INTO `{$_CFG['db_table']}` VALUES ($values);"
                          if(!
                    mysql_query($sql)) echo "problemi con la query \"$sql\"<br />motivo: <b>".mysql_error().'</b><br /><br />'
                          else 
                    $ins++; 
                        } 
                        
                    mysql_close(); 
                        echo 
                    "Inseriti con successo $ins record"
                        
                    ?>
                    Last edited by zuperman; 05-04-2006, 12:14:50.
                    Allenamento e dieta fanno di te un atleta

                    Commenta


                      #11
                      E' sicuramente più stringato, però non dà in output nessun messaggio di eventuali errori. Dipende Sergio come lo userà!
                      ___________________


                      Codice:
                      apt-get remove brain
                      apt-get install windows-Vista
                      ___________________

                      Commenta


                        #12
                        Originariamente Scritto da zuperman
                        Che ne pensi di questo?
                        Codice PHP:
                        <?                     
                           mysql_connect('localhost', 'user', 'pass');   
                           mysql_select_db('nome_database');          
                           mysql_query("LOAD DATA LOCAL INFILE 'marchette.csv' INTO TABLE statistiche_puttanone FIELDS TERMINATED BY "," LINES TERMINATED BY "\\r\\n";');
                        ?>
                        Ma che è un colpo di genio ?
                        Carica solo file in locale o eissite una funzione per file remoti ?
                        Non che sia un problema, lo scarico e lo scrivo...



                        Commenta


                          #13
                          Ma esiste la funzione SQL "LOAD DATA LOCAL INFILE"?
                          Io non l'ho trovata nella documentazione del MySql



                          Commenta


                            #14
                            Ok ho fatto una breve ricerca, la funzione come ricordavo esiste ma NON è utilizzabile se non dal prompt di MySQL.
                            In PHP devi NECESSARIAMENTE usare uno script apposito come quello da te postato!
                            Per maggiori info:
                            ___________________


                            Codice:
                            apt-get remove brain
                            apt-get install windows-Vista
                            ___________________

                            Commenta


                              #15
                              Ottimo... chissà che stasera non riesco a finirlo sto script...

                              Per ora mi segnla degli errori e non importa tutto, credo per via del diverso numero di field in ogni record, al momento dell'inserimento segnala questo errore : "Column count doesn't match value count at row"

                              Poi porca miseria hanno scelto un triplo delimitatore che però all'inizio ed alla fine non vien usato, ";" doppio apice punto e virgola doppio apice, faccio un esempio di una riga (record) :

                              "sergio";"longhi";"via barbiana 7";"Cotignola";"48018";



                              Commenta

                              Working...
                              X
                              😀
                              🥰
                              🤢
                              😎
                              😡
                              👍
                              👎