Ir para conteúdo

POWERED BY:

Arquivado

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

alissong

Importar arquivo CSV para MYSQL

Recommended Posts

Pessoal,

 

Estou tentando fazer uma importação do arquivo CSV para o MYSQL, porém não esta funcionando. Veja os arquivos?

 

Tabela CSV

ESFERA  PTRES   FONTE           ND              VALOR   TIPO   UG       DATA
1	44732	112000000	339000		690000	D	158303	09/03/2012
1	44732	112000000	339000	MUZAMBI20RL	2277631.42	D	158303	09/03/2012
1	44732	112000000	339014	A20RLP01ZDP	30000	D	158303	09/03/2012
1	44732	112000000	339033	A20RLP01ZLP	10000	D	158303	09/03/2012
1	44732	112000000	339036	A20RLP01ZFP	10000	D	158303	09/03/2012
1	44732	112000000	339037	A20RLP01ZTP	433313.38	D	158303	09/03/2012
1	44732	112000000	339039	A20RLP01ZSP	211600	D	158303	09/03/2012
1	44732	112000000	339047	A20RLP01ZBP	86.62	D	158303	09/03/2012
1	44732	112000000	339093	A20RLP01ZEP	5000	D	158303	09/03/2012
1	44732	112000000	339139	A20RLP01ZOP	3500	D	158303	09/03/2012
1	44732	112000000	449000		259947.07	D	158303	09/03/2012
1	44732	250000000	339000		45187.98	D	158303	09/03/2012
1	44732	280000000	339147	A20RLP01ZZP	100	D	158303	09/03/2012
1	44733	100000000	339018	F2994P06ZPP	1500	D	158303	09/03/2012
1	44733	250000000	339000		47366.87	D	158303	09/03/2012

 

Estrutura da Tabela

 

Campo Tipo Nulo Padrão Comentários 
cod_recebida  int(11) Não      
esfera  int(1) Não      
ptres  varchar(10) Não      
fonte  char(15) Não      
nd  varchar(10) Sim  NULL    
pi  varchar(15) Sim  NULL    
valor  decimal(10,2) Não      
tipo  varchar(1) Não  D    
ug  varchar(6) Não      
data_posicao  timestamp Sim  NULL    

 

importa.php

<HTML>
<HEAD>
<TITLE>Importa Arquivo</TITLE>
</HEAD>
<BODY>
<?php

// Conexão com o banco de bados
include("include/conecta.php");

$nome_temporario = $_GET["arquivo"];
$nome_temporario=$_FILES["arquivo"]["tmp_name"];
$nome_arquivo = $nome_temporario; // qualquer que seja o nome enviado e renomeado
copy($nome_temporario,"arquivos/$nome_arquivo");
$arquivo = fopen($nome_arquivo, "r");
if (!$arquivo){
echo ("<p>Arquivo não encontrado</p>");
}else{
// CONTADOR PARA PULAR A PRIMEIRA LINHA
   $qtd = 0;
// LÊ LINHA POR LINHA
while (($linha = fgetcsv($arquivo, 1000,",")) !==FALSE){

// VERIFICADOR PARA LER A PARTIR DA SEGUNDA LINHA    
if ($qtd>0){
// RESGATA VALORES
$esfera       = $linha[1];
$ptres        = $linha[2];
$fonte        = $linha[3];
$nd           = $linha[4];
$valor        = $linha[5];
$tipo         = $linha[6];
$ug           = $linha[7];
$data_posicao = $linha[8];

} // Fecha Qtd
$qtd++;

$sql = "INSERT INTO prov_recebida";
$sql.= "(esfera,ptres,fonte,nd,valor,tipo,ug,data_posicao)";
$sql.= "VALUES";
$sql.= "('.$esfera.','.$ptres.','.$fonte.','.$nd.','.$valor.','.$tipo.','.$ug.','.$data_posicao.')";

mysql_query($sql) or die (mysql_error());

} // fecha WHILE linha_arquivo

}// FECHA IF
// FECHA ARQUIVO
fclose($arquivo);

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

?>
</BODY>
</HTML>

 

Mensagem de erro.

 

Incorrect integer value: '..' for column 'esfera' at row 1

 

 

 

Alguem pode me ajudar nessa importação desse dados

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bruno,

 

 

Depois da alteração agora aparece esse erro:

Query Nº 1
INSERT INTO prov_recebida (esfera,ptres,fonte,nd,pi,valor,tipo,ug,data_posicao) VALUES ('1','44732','112000000','339000','','690000','"D"','158303' )
Insert error: Column count doesn't match value count at row 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal,

 

Depois de muita luta o arquivo funcionou a importação do arquivo csv para o mysql, porém tenho uma dúvida na inclusão desses dados. Queria que fosse assim:

1 - Caso existisse esses dados: esfera,ptres,fonte,nd,pi e ug iguais na tabela prov_recebida. Gostaria que fizesse um update no campo valor se não um insert. Veja como esta o código somente para inclusão na tabela.

<?php
# Função para conectar o banco de dados
   include "include/config.php";

# Inclusão do arquivo de funções


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

$abraArq = fopen($nome_arquivo, "r"); 
if (!$abraArq){ 
echo ("<p>Arquivo não encontrado</p>"); 
}else{ 
// CONTATDOR PARA PULAR A PRIMEIRA LINHA 
   $qtd = 1; 
while ($valores = fgetcsv($abraArq, 2048, ";")) { 



// VERIFICADOR PARA LER A PARTIR DA SEGUNDA LINHA     
       if ($qtd>1){ 

// RESGATA VALORES 
       $cod_recebida   = $valores[0]; 
       $esfera  = $valores[1];
       $ptres = $valores[2]; 
$fonte = $valores[3]; 
$nd = $valores[4];
$pi = $valores[5];
$valor = $valores[6];
$tipo = $valores[7];
$ug = $valores[8];
$data_posicao = $valores[9];
$valor = str_replace(".","", $valor);
       $valor = str_replace(",",".", $valor);
$data = $data_posicao;
       $dia = substr($data,0,2);
       $mes = substr($data,3,2);
       $ano = substr($data,6,4);
       $data = "$ano-$mes-$dia";



$sql = "INSERT INTO prov_recebida";
$sql.="(cod_recebida,esfera,ptres,fonte,nd,pi,valor,tipo,ug,data_posicao)";
$sql.="VALUES";
$sql.="(NULL,'".$esfera."','".$ptres."','".$fonte."','".$nd."','".$pi."','".$valor."','".$tipo."','".$ug."','".$data."')"; 

# INICIO - EXECUÇÃO DO COMANDO SQL 
   mysql_query($sql) or die (mysql_error());
   echo "<script language=JavaScript> window.alert('Os Registros foram incluidos com sucesso !'); </SCRIPT>";
   echo "<script>window.location = 'arquivo.php?cad=trabalhador'</script>"; 

   # FIM - EXECUÇÃO DO COMANDO SQL 

       } // Fecha Qtd 
       $qtd++; 
} // fecha WHILE valores 

fclose($abraArq); 

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

?>

 

 

Alguém pode me ajudar nessa tarefa.

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.