importare file csv mysql

  • Creatore Discussione Creatore Discussione ONE313
  • Data di inizio Data di inizio

ONE313

Utente Attivo
10 Set 2016
37
2
8
Ciao a tutti, non riesco a caricare un file csv su db attraverso php.
Il problema è che non mi carica i dati o se me li carica non esplode bene il file e mi inserisce i dati tutti nello stesso campo.
ho provato con questo codice php
Codice:
<?php 
$connect = mysqli_connect("localhost", "root", "", "testing");
if(isset($_POST["submit"]))
{
 if($_FILES['file']['name'])
 {
  $filename = explode(".", $_FILES['file']['name']);
  if($filename[1] == 'csv')
  {
   $handle = fopen($_FILES['file']['tmp_name'], "r");
   while($data = fgetcsv($handle))
   {
    $item1 = mysqli_real_escape_string($connect, $data[0]); 
                $item2 = mysqli_real_escape_string($connect, $data[1]);
                $query = "INSERT into excel(excel_name, excel_email) values('$item1','$item2')";
                mysqli_query($connect, $query);
   }
   fclose($handle);
   echo "<script>alert('Import done');</script>";
  }
 }
}
?> 
<!DOCTYPE html> 
<html> 
 <head> 
  <title>Webslesson Tutorial</title>
 </head> 
 <body> 
  <h3 align="center">How to Import Data from CSV File to Mysql using PHP</h3><br />
  <form method="post" enctype="multipart/form-data">
   <div align="center"> 
    <label>Select CSV File:</label>
    <input type="file" name="file" />
    <br />
    <input type="submit" name="submit" value="Import" class="btn btn-info" />
   </div>
  </form>
 </body> 
</html>
 

Allegati

  • db.png
    db.png
    38,9 KB · Visite: 404
Avrei separato i due file, uno per la view ed uno per il model. Secondo questa logica creando un file di funzioni di appoggio potresti fare in questo modo:
PHP:
$file_info=[];
if(isset($_POST['submit'])){
    $file_info = pathinfo($_FILES['file']['name']);
    $file_info['tmp_name']=$_FILES['file']['tmp_name'];

    (!empty($file_info) && $file_info['extension']=='csv')?start_op($file_info):null;
}
function start_op($file){
    $data=read_file($file['tmp_name']);
    //ipotizzo che nella prima riga ci siano i nomi dei campi del db
    $intestazione=$data[0];
    $dati=array_slice($data,1,count($data)-1);
    $queries=prepare_insert($intestazione,$dati);
    //creo una nuova connessione

    $debug=TRUE;
    if(!$debug){
        $conn=new mysqli('host','user','pass','dbase');
        foreach ($queries as $query){
            try{
                $conn->query($query);
            }catch (Exception $e){
                print_r($e);
            }
        }
    }else print_r($queries);

}
function read_file($file){

    $csv=str_getcsv(file_get_contents($file),"\r\n");
    $rows=[];
    foreach ($csv as $item){
        $rows[]=str_getcsv($item,",");
    }
    return $rows;
}

function prepare_insert($intest=[],$data=[]){
    $my_queries=[];

    foreach ($data as $k=>$v){
        $my_queries[$k]='INSERT INTO TABLE_NAME ('.join(',',$intest).') VALUES (';
        foreach ($v as $kk=>$vv){
            $my_queries[$k].='"'.trim($vv).'",';
        }
        $my_queries[$k]=substr($my_queries[$k],0,strlen($my_queries[$k])-1);
        $my_queries[$k].=');';
    }
    return $my_queries;
}
 
  • Like
Reactions: alessandra86
Ciao ho provato ma non inserisce i dati.

l'index .php

Codice:
<!DOCTYPE html>
<html>
 <head>
  <title>Webslesson Tutorial</title>
 </head>
 <body>
  <h3 align="center">How to Import Data from CSV File to Mysql using PHP</h3><br />
  <form action="config.php" method="post" enctype="multipart/form-data" >
   <div align="center">
    <label>Select CSV File:</label>
    <input type="file" name="file" />
    <br />
    <input type="submit" name="submit" value="Import" class="btn btn-info" />
   </div>
  </form>
 </body>
</html>

il config.php con il codice che che mi hai lasciato.

Codice:
<?php
 $file_info=[];
if(isset($_POST['submit'])){
    $file_info = pathinfo($_FILES['file']['name']);
    $file_info['tmp_name']=$_FILES['file']['tmp_name'];

    (!empty($file_info) && $file_info['extension']=='csv')?start_op($file_info):null;
}
function start_op($file){
    $data=read_file($file['tmp_name']);
    //ipotizzo che nella prima riga ci siano i nomi dei campi del db
    $intestazione=$data[0];
    $dati=array_slice($data,1,count($data)-1);
    $queries=prepare_insert($intestazione,$dati);
    //creo una nuova connessione

    $debug=TRUE;
    if(!$debug){
        $conn=new mysqli('localhost','root','','csv');
        foreach ($queries as $query){
            try{
                $conn->query($query);
            }catch (Exception $e){
                print_r($e);
            }
        }
    }else print_r($queries);

}
function read_file($file){

    $csv=str_getcsv(file_get_contents($file),"\r\n");
    $rows=[];
    foreach ($csv as $item){
        $rows[]=str_getcsv($item,",");
    }
    return $rows;
}

function prepare_insert($intest=[],$data=[]){
    $my_queries=[];

    foreach ($data as $k=>$v){
        $my_queries[$k]='INSERT INTO file ('.join(',',$intest).') VALUES (';
        foreach ($v as $kk=>$vv){
            $my_queries[$k].='"'.trim($vv).'",';
        }
        $my_queries[$k]=substr($my_queries[$k],0,strlen($my_queries[$k])-1);
        $my_queries[$k].=');';
    }
    return $my_queries;
}
?>
 
$debug=TRUE; if(!$debug){ $conn=new mysqli('localhost','root','','csv'); foreach ($queries as $query){ try{ $conn->query($query); }catch (Exception $e){ print_r($e); } } }else print_r($queries);
Leggi.... DEBUG = TRUE non entra nell'inserimento...... devi settare $debug = FALSE,
Non fare copia e incolla, cerca di capire!
 

Discussioni simili