alissong 1 Denunciar post Postado Março 15, 2012 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 Conte 4 Denunciar post Postado Março 15, 2012 tente começar $linha[0]; Compartilhar este post Link para o post Compartilhar em outros sites
alissong 1 Denunciar post Postado Março 16, 2012 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
alissong 1 Denunciar post Postado Março 18, 2012 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