1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Ajuda PHP - envio de ficheiro CSV e inserção em MYSQL

Discussão em 'Web Development' iniciada por bmccruz, 31 de Março de 2008. (Respostas: 7; Visualizações: 1922)

  1. bmccruz

    bmccruz Suspenso

    Quero fazer um script que faça o upload de um determinado ficheiro CSV e insira os dados automaticamente na base de dados mysql.

    Pesquisei e encontrei um script em php que insere os dados de um ficheiro CSV na base de dados, mas sem qualquer tipo de upload, o ficheiro já teria de estar no servidor.

    Desta forma alterei o código acrescentado a etapa de upload e fiquei com algo como isto:

    Código:
    <?php
    include 'config.php';
    include 'opendb.php';
    
    $filename = $_FILES['userfile']['name'];
    $uploaddir = 'file';
    $uploadfile = $uploaddir . $_FILES['userfile']['name'];
    if(move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    
    $sql = "TRUNCATE TABLE teste"; 
    mysql_query($sql);
    
    $databasetable = "sample";
    $fieldseparator = ";";
    $lineseparator = "\n";
    $csvfile = "$filename";
    
    $addauto = 0;
    
    $save = 0;
    $outputfile = "output.sql";
    
    $file = fopen($csvfile,"r");
    
    if(!$file) {
    	echo "Erro. não foi possível abrir o ficheiro.\n";
    	exit;
    }
    
    $size = filesize($csvfile);
    
    if(!$size) {
    	echo "Erro. O ficheiro encontra-se vazio.\n";
    	exit;
    }
    
    $csvcontent = fread($file,$size);
    
    fclose($file);
    
    $lines = 0;
    $queries = "";
    $linearray = array();
    
    foreach(split($lineseparator,$csvcontent) as $line) {
    
    	$lines++;
    
    	$line = trim($line," \t");
    	
    	$line = str_replace("\r","",$line);
    	
    	
    	$linearray = explode($fieldseparator,$line);
    	
    	$linemysql = implode("','",$linearray);
    	
    	if($addauto)
    		$query = "insert into $databasetable values('','$linemysql');";
    	else
    		$query = "insert into $databasetable values('$linemysql');";
    	
    	$queries .= $query . "\n";
    
    	@mysql_query($query);
    }
    
    if($save) {
    	
    	if(!is_writable($outputfile)) {
    		echo "O ficheiro não tem premissões de escrita.\n";
    	}
    	
    	else {
    		$file2 = fopen($outputfile,"w");
    		
    		if(!$file2) {
    			echo "Erro ao escrever para o ficheiro.\n";
    		}
    		else {
    			fwrite($file2,$queries);
    			fclose($file2);
    		}
    	}
    	
    }
    
    echo "Processo concluído com sucesso. $lines entradas foram adicionadas à base de dados.\n";
    }
    else
    {
    echo "Erro ao enviar ficheiro. Por favor repita.\n";
    }
    }
    ?>

    Esta é a form:

    Código:
    <form enctype="multipart/form-data" action="csv/importer.php" method="POST">
    <input type="hidden" name="MAX_FILE_SIZE" value="800000" />
    CSV a enviar: <input name="userfile" type="file" /><br />
    <input type="submit" value="Enviar" />
    </form>

    No entanto não funciona, será possível dizerem o que está mal ai? De modo a que possa por o script a funcionar. Obrigado
     
  2. DanielGomes

    DanielGomes Power Member

    Onde tens:
    $uploadfile = $uploaddir . $_FILES['userfile']['name'];

    Experimenta:
    $uploadfile = $uploaddir .'/'. $_FILES['userfile']['name'];
     
  3. bmccruz

    bmccruz Suspenso

    não resultou, faço o upload mas quando carrega o importer não faz nada não dá nenhuma das mensagens
     
  4. DanielGomes

    DanielGomes Power Member

    Não te dá nenhum erro do PHP?

    É que para além da '/' em falta, no fim do ficheiro tens um '}' a mais. Convém tambem que a pasta 'file' exista

    Corrigido isso no meu pc o upload funcionou.
     
  5. eRKULIX

    eRKULIX Suspenso

    Já resolvi esses problemas e de facto o ficheiro é enviado para o servidor, no entanto fica-se por aqui:
    Código:
     $file = fopen($csvfile,"r");
    if(!$file) {
    	echo "Erro. não foi possível abrir o ficheiro.\n";
    Alguma ideia? obrigado
     
  6. DanielGomes

    DanielGomes Power Member

    Mais uma vez, era suposto o PHP mostrar um erro ao não conseguir abrir o ficheiro. Sem os erros no PHP torna-se mais complicado perceberes o que está mal. No php.ini vê se error_reporting=E_ALL

    Também podes fazer echo $csvfile antes do fopen para veres se o caminho para o ficheiro está correcto.
     
  7. eRKULIX

    eRKULIX Suspenso

    Obrigado pela ajuda. Já resolvi está a funcionar bem.
     
  8. PHP - envio de ficheiro CSV e inserção em MYSQL

    Boas,

    Tenho um problema parecido com este, pretendo criar um script para inserir automaticamente dados de um csv no mysql, mas ainda não consegui.

    Penso que poderá ser no ficheiro incluir.php, podes facultar para ver o que poderá estar mal?


    Obrigado
     

Partilhar esta Página