Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Junior_Cassapava

[Resolvido] Importar aquivo .CSV para MYSQL

Recommended Posts

Olá pessoal!

 

Já faz umas duas semanas que tento encontrar uma solução na internet para importar um arquivo .CSV para o banco de dados mas percebi que existe uma certa carência em relação a este material, a grande maioria dos scripts que consegui na internet sempre davam problema na inserção no banco, um campo com espaço, campo numérico errado... enfim, no final das contas consegui resolver o problema e agora tenho o prazer de compartilhar essa solução com vcs..

 

Abaixo o código:

 

index.php

<html>
<head>
<title>Importar Planilha</title>
</head>
<body>

Selecione a planilha no formato CSV a ser importada

<form enctype="multipart/form-data" action="importar.php" method="post">

<input type="hidden" name="MAX_FILE_SIZE" value="30000">

Selecione o arquivo: 
<input name="arquivo" type="file">
<br><br>

<input type="submit" value="Importar">

</form>

</body>
</html>

 

importar.php

<html>
<head>
<title> Importação de Planilha </title>
</head>
<body>

<?php

include ("classes/Upload.class.php");

$upload = new Upload();
$upload -> getMensagem();

?> 

<meta http-equiv="refresh" content="3;url=index.php">

</body>
</html>

 

Upload.class.php

<?php

include ("Importar.class.php");

class Upload
{
	public $uploaddir;
	public $uploadfile;
	public $mensagem;
	
	function Upload()
	{
		$this -> uploaddir = "csv/";
		$this -> uploadfile = $this -> uploaddir . $_FILES['arquivo']['name'];

		if (move_uploaded_file($_FILES['arquivo']['tmp_name'], $this -> uploaddir . $_FILES['arquivo']['name'])) 
		{
			$this -> mensagem = "Sua planilha foi carregada com sucesso! <br>";
			$importado = $_FILES['arquivo']['name'];
			$importar = new Importar($importado);
		}
		else 
		{
			$this -> mensagem = "Ocorreu um erro ao carregar planilha.
								<br>
								Favor contacte administrador do Sistema. <br>";
		}

	}
	
	function getMensagem()
	{
		echo $this -> mensagem;
	}
	
}

?>

 

Importar.class.php

<?php

include ("ConectaBanco.class.php");

class Importar extends ConectaBanco
{
	public $arquivocsv = "csv/";
	public $tabela	 = "SUATABELA";
	
	function Importar($importado)
	{
		parent::Conectar();
		
		$this -> arquivocsv .= $importado;
			
		$handle = file($this -> arquivocsv);

		for ($i=1; $i<count($handle); $i++)		   
		{
			$valori = explode(";", $handle[$i]);
			$values = "";
			
			foreach ($valori as $val)
			{
				$val = trim($val);
				
	   			if (eregi("NULL",$val) == 0)
					$values .= "'".addslashes($val)."',";
	   	
				else
		  
					$values .= "NULL,";
			}
	
			$values = trim(substr($values,0,-1));	
													   
			$query = "INSERT INTO {$this -> tabela} VALUES (null, ".trim($values).");";

			mysql_query($query);
		
		}
		
	}

}
?>

 

ConectaBanco.class.php

<?php

class ConectaBanco
{
	var $host = "localhost";
	var $user = "root";
	var $pass = "senha";
	var $base = "base";
	var $link = "";
	
	
	function ConectaBanco()
	{
		$this -> Conectar();
	}
	
	
	function Conectar()
	{
		$this -> link = mysql_connect($this -> host, $this ->user, $this ->pass);
		
		if (!$this ->link)
		{
			die ("Erro ao conectar.");
		}
		elseif (!mysql_select_db($this ->base, $this ->link))
		{
			die ("Erro ao selecionar banco.");
		}		
	}

}
?>

 

A tabela no banco encontra-se na seguinte estrutura:

 

1 campo chamado id do tipo inteiro e auto incremento;

1 campo chamado nome do tipo varchar

1 campo chamado telefone do tipo numérico

1 campo chamado email do tipo varchar

1 campo chamado endereco do tipo varchar

 

A estrutura da planilha está mais ou menos assim:

NOME	|  TELEFONE  |		 EMAIL		   |	ENDERECO
___________________________________________________________________
junor	 | 2345678	| junior@junior.com	   | avenida a
imasters  | 54545	  | im@forum.com			| rua imasters

- As classes estão localizadas na pasta CLASSES;

- O script faz o upload do arquivo para a pasta CSV;

- Logo abre o script importado e joga os dados para o banco;

- Note que a primeira linha da planilha (onde fica os nomes das colunas) é despresada pelo script;

 

Pessoal, eh isso ai, espero ter ajudado.

 

Abraço a todos!

 

Att

Junior

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está dando o seguinte erro:

 

Warning: include(ConectaBanco.class.php) [function.include]: failed to open stream: No such file or directory in /var/www/gb/classes/Importar.class.php on line 3

 

Warning: include() [function.include]: Failed opening 'ConectaBanco.class.php' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/gb/classes/Importar.class.php on line 3

 

Fatal error: Class 'ConectaBanco' not found in /var/www/gb/classes/Importar.class.php on line 5

 

 

como resolvo isso???

 

Grato,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é mais fácil usar o phpmyadmin e usar o importar, usando a opcao "CSV usando LOAD DATA" ?

è assim que faço

 

abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

$abraArq = fopen("arquivos/ARQUIVO.csv", "r");

if (!$abraArq){
echo ("<p>Arquivo não encontrado</p>");
}else{

while ($valores = fgetcsv ($abraArq, 2048, ";")) {
$query_salva = "INSERT INTO TABELA VALUES (NULL, '.$valores[0].' , '.$valores[1].')";
$salva = mysql_query($query_salva, $conexao) or die(mysql_error());
}

fclose($abraArq);



Arquivo CSV separado por ponto-e-virgula

Ex. do arquivo CSV

 

Reg1dados1;Reg1dados2;Reg3dados3

Reg2dados1;Reg2dados2;Reg3dados3

Reg3dados1;Reg2dados2;Reg3dados3

Reg4dados1;Reg2dados2;Reg3dados3

 

Espero ter ajudado

Compartilhar este post


Link para o post
Compartilhar em outros sites

entao hiltonmm estou usando essa rotina, porem gostaria de fazer com que o usuario conseguisse dar um insert em um arquivo da máquina local dele, com um campo e um botão browse, tenho a seguinte rotina:

 

$abraArq = fopen("importa.csv", "r");
	if (!$abraArq)
	{
		echo ("<p>Arquivo não encontrado</p>");
	}
	else
	{
		while ($valores = fgetcsv ($abraArq, 2048, ";"))
		{
			$str = explode('/',$valores[3]);
			$nData = $str[2].'-'.$str[1].'-'.$str[0];
			$result = mysql_query("insert into teste (id,nome,profissao,data ) values ('$valores[0]','$valores[1]','$valores[2]','$nData')");
		}
	}
	fclose($abraArq);

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo tenta o seguinte

 

from.php

<form action="import_csv.php" method="post" enctype="multipart/form-data">
  <div align="center">
	<input type="file" name="arquivo" id="arquivo">
	<input type="submit" value="Enviar">
  </div>
</form>

 

import_csv.php

$nome_temporario=$_FILES["arquivo"]["tmp_name"];
$nome_arquivo = "ARQUIVO.csv"; // qualquer que seja o nome enviado e renomeado
copy($nome_temporario,"arquivos/$nome_arquivo");

$abraArq = fopen("arquivos/ARQUIVO.csv", "r");
if (!$abraArq){
echo ("<p>Arquivo não encontrado</p>");
}else{
while ($valores = fgetcsv ($abraArq, 2048, ";")) {
$query_salva = "INSERT INTO liberacao VALUES (NULL, '.$valores[1].')";
$salva = mysql_query($query_salva, $conexao) or die(mysql_error());
}}
fclose($abraArq);

unlink("arquivos/$nome_arquivo"); // depois de tudo apaga o CSV

 

Amigo me desculpa se não funcionar pois eu peguei um trecho do meu aplicativo e removi algumas partes para nao te atrapalhar mas se nao funcionar me fala que eu conserto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo tenta o seguinte

 

from.php

<form action="import_csv.php" method="post" enctype="multipart/form-data">
  <div align="center">
	<input type="file" name="arquivo" id="arquivo">
	<input type="submit" value="Enviar">
  </div>
</form>

 

import_csv.php

$nome_temporario=$_FILES["arquivo"]["tmp_name"];
$nome_arquivo = "ARQUIVO.csv"; // qualquer que seja o nome enviado e renomeado
copy($nome_temporario,"arquivos/$nome_arquivo");

$abraArq = fopen("arquivos/ARQUIVO.csv", "r");
if (!$abraArq){
echo ("<p>Arquivo não encontrado</p>");
}else{
while ($valores = fgetcsv ($abraArq, 2048, ";")) {
$query_salva = "INSERT INTO liberacao VALUES (NULL, '.$valores[1].')";
$salva = mysql_query($query_salva, $conexao) or die(mysql_error());
}}
fclose($abraArq);

unlink("arquivos/$nome_arquivo"); // depois de tudo apaga o CSV

 

Amigo me desculpa se não funcionar pois eu peguei um trecho do meu aplicativo e removi algumas partes para nao te atrapalhar mas se nao funcionar me fala que eu conserto.

Amigo, preciso saber o q tu colocou na variável $conexão, como tu faz pra connectar no BD, padrão PHP mesmo? Se puder, passa o arquivo completo mesmo, eu me viro e retiro o que não irei usar.

 

 

Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz o seguinte

na primeira linha do arquivo import_csv.php

 

require_once('conexao.php');

 

 

Arquivo conexao.php

$hostname_conexao = "localhost";
$database_conexao = "BANCO DE DADOS";
$username_conexao = "USUARIO";
$password_conexao = "SENHA";
$conexao = mysql_pconnect($hostname_conexao, $username_conexao, $password_conexao) or trigger_error(mysql_error(),E_USER_ERROR);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou tendo difuculdades, está ocorrendo o seguinte erro:

 

na linha

 

if (eregi("NULL",$val) == 0)

 

Deprecated: Function eregi() is deprecated in /opt/lampp/htdocs/www/upimasters/importar.class.php on line 27

Sua planilha foi carregada com sucesso!

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é erro netanderson, a função eregi tá deprecated, procura a nova que é utilizada ou põe um @ nele, mas é gambiarra hehe

 

Eu to sofrendo pra trabalhar com CSV, mas consegui alguns progressos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu, fiz assim:

 

if (eregi("NULL",$val) == 0)

 

if (preg_match("/NULL/i",$val) == 0)

 

Agora já e outra coisa, ele fala que carregou o arquivo, só que no banco não tem nada.

 

Se alguém puder me ajudar Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo tenta o seguinte

 

from.php

<form action="import_csv.php" method="post" enctype="multipart/form-data">
  <div align="center">
	<input type="file" name="arquivo" id="arquivo">
	<input type="submit" value="Enviar">
  </div>
</form>

import_csv.php

$nome_temporario=$_FILES["arquivo"]["tmp_name"];
$nome_arquivo = "ARQUIVO.csv"; // qualquer que seja o nome enviado e renomeado
copy($nome_temporario,"arquivos/$nome_arquivo");

$abraArq = fopen("arquivos/ARQUIVO.csv", "r");
if (!$abraArq){
echo ("<p>Arquivo não encontrado</p>");
}else{
while ($valores = fgetcsv ($abraArq, 2048, ";")) {
$query_salva = "INSERT INTO liberacao VALUES (NULL, '.$valores[1].')";
$salva = mysql_query($query_salva, $conexao) or die(mysql_error());
}}
fclose($abraArq);

unlink("arquivos/$nome_arquivo"); // depois de tudo apaga o CSV

Amigo me desculpa se não funcionar pois eu peguei um trecho do meu aplicativo e removi algumas partes para nao te atrapalhar mas se nao funcionar me fala que eu conserto.

 

 

Perfect *-* Me ajudou muito

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.