Ir para conteúdo
Fórum Script Brasil
  • 0

Problema ao importar arquivo .txt


Guest renator

Pergunta

Guest renator

Ola.

Estou tendo dificuldades em fazer com que o php importe corretamente dados de um arquivo txt para o mysql. Essa importação precisa ser feita por um script em php e não por uma rotina no mysql. O problema que esta ocorrendo, é que eu consigo fazer as importações, mas ele importa apenas a primeira linha do arquivo .txt e também não insere as informações do arquivo txt nas colunas corretas da tabela do mysql. Abaixo segue as informações dos meus scripts:

arquivo txt (os campos estão separados por tabulação):

teste1 teste2

teste3 teste4

teste5 teste6

arquivo import_txt.php

<?php

$host = "localhost";

$user = "root";

$password = "renato";

$db = "meleke";

$tabela = "teste";

$conexao = mysql_connect($host, $user, $password) or die(mysql_error());

$banco = mysql_select_db($db) or die(mysql_error());

$arquivo = 'teste.txt';

$arq = fopen($arquivo,'r');

while(!feof($arq))

$linha[] = fgets($arq); // cria um array com o conteudo do arquivo

$sql = "INSERT INTO `teste` (`campo1`, `campo2`) VALUES ('$linha[0]', '$linha[1]')";

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

echo '<meta HTTP-EQUIV="Refresh" CONTENT="1; URL=http://localhost/metralhadora/menu2.html">';

?>

Ou seja, quando eu tento importar o arquivo, ele puxa apenas as primeiras linhas. Como posso resolver isso ?

[]'s, Renato

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Se tudo o que você quer é importar os dados, então existe uma outra maneira mais simples de fazer a leitura do arquivo e transformá-lo em uma array:

<?php
$host = "localhost";
$user = "root";
$password = "renato";
$db = "meleke";
$tabela = "teste";

$conexao = mysql_connect($host, $user, $password) or die(mysql_error());
$banco = mysql_select_db($db) or die(mysql_error());

$Arquivo = file("teste.txt");
for ($i = 0; $i < count ($Arquivo); $i++){
$Linha = $Arquivo[$i];
$Dados = explode(" ", $Linha)
$Dado1 = $Dados[0];
$Dado2 = $Dados[1];

$sql = "INSERT INTO `teste` (`campo1`, `campo2`) VALUES ('$Dado1', '$Dado2')";
$result = mysql_query($sql) or die(mysql_error());
}

echo '<meta HTTP-EQUIV="Refresh" CONTENT="1; URL=http://localhost/metralhadora/menu2.html">';
?>

Link para o comentário
Compartilhar em outros sites

  • 0
Guest renator

Cara, deu o seguinte erro: Parse error: syntax error, unexpected T_VARIABLE in C:\xampp\htdocs\metralhadora\import_txt3.php on line 15

Mas eu acabei fazendo uma forma diferente que funcionou:

<?php
$host = "localhost";
$user = "root";
$password = "sisnema";
$db = "meleke";
$tabela = "teste";

$conexao = mysql_connect($host, $user, $password) or die(mysql_error());
$banco = mysql_select_db($db) or die(mysql_error());

$arquivo = 'teste.txt';
$arq = fopen($arquivo,'r');

while(!feof($arq))
$linha[] = fgets($arq); // cria um array com o conteudo do arquivo
//até aqui você tem o vetor com cada linha ("teste1 teste2","teste3 teste4", ...), e não com cada palavra.

//separando as palavras nas linhas
for($c = 0; $c < sizeof($linha); $c++){
$handle = explode("|",$linha[$c]); //quebra a linha aonde achar o |
$linha[$c][0] = $handle[0]; //primeira palavra
$linha[$c][1] = $handle[1]; //segunda palavra
}
//agora você tem um vetor com vetores das palavras (não sei se ficou claro isso, mas isso que acontece)
//cada posição do vetor $linha tem um outro vetor com as palavras. por isso tem dois índices.
//ex: $linhas[5][0]
//esse exemplo significa que ele vai pegar a 6º linha e a 1º palavra. (lembre-se que a contagem começa do 0.

//faz um loop pra inserir todas as linhas, e não só a primeira, como tava antes.
for($c = 0; $c < sizeof($linha); $c++){
$sql = "INSERT INTO `teste` (`campo1`, `campo2`) VALUES ('".$linha[$c][0]."', '".$linha[$c][1]."')";
$result = mysql_query($sql) or die(mysql_error());
}
echo '<meta HTTP-EQUIV="Refresh" CONTENT="1; URL=http://localhost/metralhadora/menu2.html">';

?>

Link para o comentário
Compartilhar em outros sites

  • 0
Guest renator

Cara, realmente era o problema no ponto virugula......agora testei seu codigo e funcionou também... :D......obrigado....mas tanto no seu código, quanto no meu, estou tendo um problema de que só estou conseguindo importar a primeira letra de cada campo ......você sabe o que pode ser esse problema ?..... a tabela "teste" que estou usando, tem a seguinte sintaxe no mysql (e aparentemente não deveria dar erros)...

create table teste (

id int(4) not null auto_increment,

campo1 int(4)not null,

campo2 char(8)not null,

unique id (id),

primary key (id)

);

e quando eu importo o arquivo que tem as seguintes informações:

teste1, teste2

teste3, teste3

ele só importa

t, t

t, t

não consegui descobrir o porque.... :(

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...