Jump to content


Photo

Inserir Dados No Mysql Atraves De Um Arquivo Txt


  • Faça o login para participar
13 replies to this topic

#1 .Ninja.

.Ninja.

    12 Horas

  • Usuários
  • 234 posts
  • Sexo:Não informado

Posted 02/02/2004, 19:28

ae galera, eu tenho um arquivo em txt assim:

1234,"5678","AB","CDE","FGHIJKLMN"
1234,"5678","AB","CDE","FGHIJKLMN"
1234,"5678","AB","CDE","FGHIJKLMN"

e assim vai, soh q nao eh repetido os numeros e letras
como eu faco pra ele abrir esse arquivo, ler os dados e inserir dentro do mysql?

exemplo:
a linha 1234,"5678","AB","CDE","FGHIJKLMN" pra inserir assim:
inicio -> 1234
final -> 5678
code_2 -> AB
code_3 -> CDE
nome -> FGHIJKLMN

preciso quebrar as aspas e ir inserindo, linha por linha
como faco?

eu tenhu um script assim:

$csv_name = $file;
  
  $fp = fopen ($csv_name, 'r');
  while (!feof ($fp)) {
  	$linha = fgets ($fp, 4026);
  	$data  = explode ("\"", $linha);
  	
  	$inicio = $data[1];
  	$final  = $data[3];
  	$code_2   = $data[5];
  	$code_3   = $data[7];
  	$nome      = $data[9];
  	
  	$query = "INSERT INTO tabela (`inicio`,`final`,`code_2`,`code_3`,`nome`) VALUES ('$inicio','$_final','$code_2','$code_3','$nome')";
  	$exec  = mysql_query($query);
  	
  	if (!$exec) {
    echo (mysql_error ());
  	}
  	
  	$num++;
  }
  
  fclose ($fp);
  $resposta = true;
	}

ela insere soh q qdo eu vo ver nao tem nenhum dado
oq acontece?

Edição feita por: .Ninja., 02/02/2004, 19:29.


#2 thiagorsl

thiagorsl
  • Visitantes

Posted 02/02/2004, 20:42

Faz assim e vc se dar certo
$arquivo="seu arquivo";
$res=file($arquivo)
for ($a;$a<count($res);$a++){
     $res[$a]=str_replace(",","",$res[$a]);
    $insere=explode("\"",$res[$a]);
  $query = "INSERT INTO tabela (`$insere[0]`,`$insere[1]`,`$insere[2]`,`$insere[3]`,`$insere[4]`);
  $exec  = mysql_query($query);  
}



FLW-----------------------> :D

#3 .Ninja.

.Ninja.

    12 Horas

  • Usuários
  • 234 posts
  • Sexo:Não informado

Posted 03/02/2004, 13:03

bom, nao funcionou esse script, ele tah inserindo em lugar errado os dados, e em lugar diferente, ta ficando assim:

inicio -> (vazio)
final -> 1234
code_2 -> (vazio)
code_3 -> 5678
nome -> (vazio)

como eu faco pra arrumar esse problema?

#4 thiagorsl

thiagorsl
  • Visitantes

Posted 03/02/2004, 14:46

bom, nao funcionou esse script, ele tah inserindo em lugar errado os dados, e em lugar diferente, ta ficando assim:

inicio -> (vazio)
final -> 1234
code_2 -> (vazio)
code_3 -> 5678
nome -> (vazio)

como eu faco pra arrumar esse problema?

Usa aquele mesmo codigo só que inverte str_replace coloca a aspasa e no explode coloca a virgula pq o arquivo tem duas aspas por isso ta dando errado olha o codigo

$res=file($arquivo)
for ($a;$a<count($res);$a++){
    $res[$a]=str_replace("\"","",$res[$a]);
   $insere=explode(",",$res[$a]);
 $query = "INSERT INTO tabela (`$insere[0]`,`$insere[1]`,`$insere[2]`,`$insere[3]`,`$insere[4]`);
 $exec  = mysql_query($query);  
}


#5 .Ninja.

.Ninja.

    12 Horas

  • Usuários
  • 234 posts
  • Sexo:Não informado

Posted 04/02/2004, 17:59

bom, nao funcionou esse script, ele tah inserindo em lugar errado os dados, e em lugar diferente, ta ficando assim:

inicio -> (vazio)
final -> 1234
code_2 -> (vazio)
code_3 -> 5678
nome -> (vazio)

como eu faco pra arrumar esse problema?

Usa aquele mesmo codigo só que inverte str_replace coloca a aspasa e no explode coloca a virgula pq o arquivo tem duas aspas por isso ta dando errado olha o codigo

$res=file($arquivo)
for ($a;$a<count($res);$a++){
    $res[$a]=str_replace("\"","",$res[$a]);
   $insere=explode(",",$res[$a]);
 $query = "INSERT INTO tabela (`$insere[0]`,`$insere[1]`,`$insere[2]`,`$insere[3]`,`$insere[4]`);
 $exec  = mysql_query($query);  
}

bom, funcionou... mas ele inseriu mais de 200mil id!!!

e no arquivo soh tinham 3 linhas!!

como eu arrumo isso?

#6 Goku Jr

Goku Jr

    Nilson

  • Usuários
  • 3757 posts
  • Sexo:Masculino

Posted 04/02/2004, 18:10

bom, nao funcionou esse script, ele tah inserindo em lugar errado os dados, e em lugar diferente, ta ficando assim:

inicio -> (vazio)
final -> 1234
code_2 -> (vazio)
code_3 -> 5678
nome -> (vazio)

como eu faco pra arrumar esse problema?

Usa aquele mesmo codigo só que inverte str_replace coloca a aspasa e no explode coloca a virgula pq o arquivo tem duas aspas por isso ta dando errado olha o codigo

$res=file($arquivo)
for ($a;$a<count($res);$a++){
    $res[$a]=str_replace("\"","",$res[$a]);
   $insere=explode(",",$res[$a]);
 $query = "INSERT INTO tabela (`$insere[0]`,`$insere[1]`,`$insere[2]`,`$insere[3]`,`$insere[4]`);
 $exec  = mysql_query($query);  
}

bom, funcionou... mas ele inseriu mais de 200mil id!!!

e no arquivo soh tinham 3 linhas!!

como eu arrumo isso?

pronto ta aê

$res=file($arquivo)
for ($a=1;$a<=count($res);$a++){
    $res[$a]=str_replace("\"","",$res[$a]);
   $insere=explode(",",$res[$a]);
 $query = "INSERT INTO tabela (`$insere[0]`,`$insere[1]`,`$insere[2]`,`$insere[3]`,`$insere[4]`);
 $exec  = mysql_query($query);  
}


bom flw (y) !!!
-----------------------------------------------------------------------
PALMEIRAS - Primeiro campeão do mundo em 1951

#7 .Ninja.

.Ninja.

    12 Horas

  • Usuários
  • 234 posts
  • Sexo:Não informado

Posted 04/02/2004, 20:13

ainda esta inserindo milhoes de linhas =/

#8 ffmm

ffmm

    Veterano

  • Usuários
  • 1224 posts
  • Sexo:Não informado

Posted 04/02/2004, 21:48

Tente esse script:
<?php
$file = 'arquivo.txt';

$conn = mysql_connect('localhost', 'root', '');
mysql_select_db('mysql');

$lines = file($file);

for($c = 0; $line = $lines[$c]; $c++){
	$line = trim($line);
	$parts = explode(',', $line);
	
	$start = $parts[0];
	$end = str_replace('"', '', $parts[1]);
	$code_2 = str_replace('"', '', $parts[2]);
	$code_3 = str_replace('"', '', $parts[3]);
	$name = str_replace('"', '', $parts[4]);
	
	$sql = "INSERT INTO tabela ('inicio', 'final', 'code_2', 'code_3', 'nome') VALUES ('".$start."', '".$end."', '".$code_2."', '".$code_3."', '".$name."');";
	mysql_query($sql);
	
	echo $sql . '<br>';
}
?>

Edição feita por: ffmm2003, 04/02/2004, 22:06.


#9 thiagorsl

thiagorsl
  • Visitantes

Posted 05/02/2004, 11:12

faz assim então
$res=file($arquivo)
for ($a;$a<count($res);$a++){
if (!$res[$a]==""){
   $res[$a]=str_replace("\"","",$res[$a]);
  $insere=explode(",",$res[$a]);
$query = "INSERT INTO tabela (`$insere[0]`,`$insere[1]`,`$insere[2]`,`$insere[3]`,`$insere[4]`);
$exec  = mysql_query($query);
}  
}


#10 .Ninja.

.Ninja.

    12 Horas

  • Usuários
  • 234 posts
  • Sexo:Não informado

Posted 05/02/2004, 12:43

Tente esse script:

<?php
$file = 'arquivo.txt';

$conn = mysql_connect('localhost', 'root', '');
mysql_select_db('mysql');

$lines = file($file);

for($c = 0; $line = $lines[$c]; $c++){
	$line = trim($line);
	$parts = explode(',', $line);
	
	$start = $parts[0];
	$end = str_replace('"', '', $parts[1]);
	$code_2 = str_replace('"', '', $parts[2]);
	$code_3 = str_replace('"', '', $parts[3]);
	$name = str_replace('"', '', $parts[4]);
	
	$sql = "INSERT INTO tabela ('inicio', 'final', 'code_2', 'code_3', 'nome') VALUES ('".$start."', '".$end."', '".$code_2."', '".$code_3."', '".$name."');";
	mysql_query($sql);
	
	echo $sql . '<br>';
}
?>

vlw ffmm2003, funcionou perfeitamente!!

#11 Rodrigo Motta1

Rodrigo Motta1

    Novato no fórum

  • Usuários
  • 3 posts
  • Sexo:Masculino
  • Localidade:Florianopolis

Posted 30/04/2013, 13:12

Tente esse script:

<?php
$file = 'arquivo.txt';

$conn = mysql_connect('localhost', 'root', '');
mysql_select_db('mysql');

$lines = file($file);

for($c = 0; $line = $lines[$c]; $c++){
	$line = trim($line);
	$parts = explode(',', $line);
	
	$start = $parts[0];
	$end = str_replace('"', '', $parts[1]);
	$code_2 = str_replace('"', '', $parts[2]);
	$code_3 = str_replace('"', '', $parts[3]);
	$name = str_replace('"', '', $parts[4]);
	
	$sql = "INSERT INTO tabela ('inicio', 'final', 'code_2', 'code_3', 'nome') VALUES ('".$start."', '".$end."', '".$code_2."', '".$code_3."', '".$name."');";
	mysql_query($sql);
	
	echo $sql . '<br>';
}
?>


Boa tarde a todos, mas gostaria de saber como fica o código se for varios arquivos txt com nomes aleatórios. tipo ele teria que ler na pasta todos os txt, gravar no banco conforme já está no script aqui, e depois apagar o txt. como ficaria? Obrigado a todos.

#12 Dudu

Dudu

    Viva la vida

  • Usuários
  • 1437 posts
  • Sexo:Masculino
  • Localidade:Uberlândia - MG
  • Interesses:PHP

Posted 30/04/2013, 14:57


Tente esse script:

<?php
$file = 'arquivo.txt';

$conn = mysql_connect('localhost', 'root', '');
mysql_select_db('mysql');

$lines = file($file);

for($c = 0; $line = $lines[$c]; $c++){
	$line = trim($line);
	$parts = explode(',', $line);
	
	$start = $parts[0];
	$end = str_replace('"', '', $parts[1]);
	$code_2 = str_replace('"', '', $parts[2]);
	$code_3 = str_replace('"', '', $parts[3]);
	$name = str_replace('"', '', $parts[4]);
	
	$sql = "INSERT INTO tabela ('inicio', 'final', 'code_2', 'code_3', 'nome') VALUES ('".$start."', '".$end."', '".$code_2."', '".$code_3."', '".$name."');";
	mysql_query($sql);
	
	echo $sql . '<br>';
}
?>


Boa tarde a todos, mas gostaria de saber como fica o código se for varios arquivos txt com nomes aleatórios. tipo ele teria que ler na pasta todos os txt, gravar no banco conforme já está no script aqui, e depois apagar o txt. como ficaria? Obrigado a todos.


Bom, a lógica é a mesma.
A única coisa que mudaria, é que esse script ficaria dentro de um LOOP que varreria os TXTs de um diretório.

Um exemplo:


<?php
$diretorio = './txts/';

foreach(glob($diretorio . "*.txt") as $file) {

	//$file = 'arquivo.txt';
	
	$conn = mysql_connect('localhost', 'root', '');
	mysql_select_db('mysql');
	
	$lines = file($file);
	
	for($c = 0; $line = $lines[$c]; $c++){
		$line = trim($line);
		$parts = explode(',', $line);
		
		$start = $parts[0];
		$end = str_replace('"', '', $parts[1]);
		$code_2 = str_replace('"', '', $parts[2]);
		$code_3 = str_replace('"', '', $parts[3]);
		$name = str_replace('"', '', $parts[4]);
		
		$sql = "INSERT INTO tabela ('inicio', 'final', 'code_2', 'code_3', 'nome') VALUES ('".$start."', '".$end."', '".$code_2."', '".$code_3."', '".$name."');";
		mysql_query($sql);
		
		echo $sql . '<br>';
	}
	unlink($file);
}
?>

Veja mais sobre as funções glob(), foreach() e unlink().
Qualquer dúvida poste!

Até!

Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Moderador


Twitter: HostCheap


#13 Rodrigo Motta1

Rodrigo Motta1

    Novato no fórum

  • Usuários
  • 3 posts
  • Sexo:Masculino
  • Localidade:Florianopolis

Posted 30/04/2013, 16:51



Tente esse script:

<?php
$file = 'arquivo.txt';

$conn = mysql_connect('localhost', 'root', '');
mysql_select_db('mysql');

$lines = file($file);

for($c = 0; $line = $lines[$c]; $c++){
	$line = trim($line);
	$parts = explode(',', $line);
	
	$start = $parts[0];
	$end = str_replace('"', '', $parts[1]);
	$code_2 = str_replace('"', '', $parts[2]);
	$code_3 = str_replace('"', '', $parts[3]);
	$name = str_replace('"', '', $parts[4]);
	
	$sql = "INSERT INTO tabela ('inicio', 'final', 'code_2', 'code_3', 'nome') VALUES ('".$start."', '".$end."', '".$code_2."', '".$code_3."', '".$name."');";
	mysql_query($sql);
	
	echo $sql . '<br>';
}
?>


Boa tarde a todos, mas gostaria de saber como fica o código se for varios arquivos txt com nomes aleatórios. tipo ele teria que ler na pasta todos os txt, gravar no banco conforme já está no script aqui, e depois apagar o txt. como ficaria? Obrigado a todos.


Bom, a lógica é a mesma.
A única coisa que mudaria, é que esse script ficaria dentro de um LOOP que varreria os TXTs de um diretório.

Um exemplo:


<?php
$diretorio = './txts/';

foreach(glob($diretorio . "*.txt") as $file) {

	//$file = 'arquivo.txt';
	
	$conn = mysql_connect('localhost', 'root', '');
	mysql_select_db('mysql');
	
	$lines = file($file);
	
	for($c = 0; $line = $lines[$c]; $c++){
		$line = trim($line);
		$parts = explode(',', $line);
		
		$start = $parts[0];
		$end = str_replace('"', '', $parts[1]);
		$code_2 = str_replace('"', '', $parts[2]);
		$code_3 = str_replace('"', '', $parts[3]);
		$name = str_replace('"', '', $parts[4]);
		
		$sql = "INSERT INTO tabela ('inicio', 'final', 'code_2', 'code_3', 'nome') VALUES ('".$start."', '".$end."', '".$code_2."', '".$code_3."', '".$name."');";
		mysql_query($sql);
		
		echo $sql . '<br>';
	}
	unlink($file);
}
?>

Veja mais sobre as funções glob(), foreach() e unlink().
Qualquer dúvida poste!

Até!


está me retornando um erro:

Notice: Undefined offset: 3 in H:\xampp\htdocs\importar\importar2.php on line 13

o que pode ser?

De uma olhada como está o meu php e txt que estão dando erro.

php:
<?php
$diretorio = './txt/';

foreach(glob($diretorio . "*.txt") as $file) {

        //$file = 'arquivo.txt';
        
		$conn = mysql_connect('localhost', 'root', 'senha');
mysql_select_db('test');
        
        $lines = file($file);
        
        for($c = 0; $line = $lines[$c]; $c++){
                $line = trim($line);
                $parts = explode(',', $line);
                
        $nomeT = str_replace('"', '', $parts[0]);
        $idadeT = str_replace('"', '', $parts[1]);
        $textoT = str_replace('"', '', $parts[2]);
                
                $sql = "INSERT INTO importar ('nome', 'idade', 'texto') VALUES ('".$nomeT."', '".$idadeT."', '".$textoT."');";
                mysql_query($sql);
                
                echo $sql . '<br>';
        }
        //unlink($file);
}
?>

txt:
"rodrigo1","11","teste1 teste1 teste 1"
"rodrigo2","22","teste2 teste2 teste 2"
"rodrigo3","33","teste3 teste3 teste 3"

resultado:
INSERT INTO importar ('nome', 'idade', 'texto') VALUES ('rodrigo1', '11', 'teste1 teste1 teste 1');
INSERT INTO importar ('nome', 'idade', 'texto') VALUES ('rodrigo2', '22', 'teste2 teste2 teste 2');
INSERT INTO importar ('nome', 'idade', 'texto') VALUES ('rodrigo3', '33', 'teste3 teste3 teste 3');

Notice: Undefined offset: 3 in H:\xampp\htdocs\importar\importar2.php on line 13


#14 Dudu

Dudu

    Viva la vida

  • Usuários
  • 1437 posts
  • Sexo:Masculino
  • Localidade:Uberlândia - MG
  • Interesses:PHP

Posted 01/05/2013, 04:02

Tente assim:


<?php
			
$conn = mysql_connect('localhost', 'root', 'senha') or die(mysql_error());
mysql_select_db('test', $conn) or die(mysql_error();

$diretorio = './txt/';

foreach(glob($diretorio . "*.txt") as $file) {

	//$file = 'arquivo.txt';
        
	$lines = file($file);
			
	for($c = 0; $c < count($lines); $c++){
		$parts = explode(',', trim($lines[$c]));
						
		$nomeT = str_replace('"', '', $parts[0]);
		$idadeT = str_replace('"', '', $parts[1]);
		$textoT = str_replace('"', '', $parts[2]);
						
		$sql = "INSERT INTO importar (`nome`, `idade`, `texto`) VALUES ('".$nomeT."', '".$idadeT."', '".$textoT."');";
		mysql_query($sql) or die(mysql_error());
						
		echo $sql . '<br>';
	}
	//unlink($file);
}
?>

Até mais.

Edição feita por: Dudu, 01/05/2013, 04:06.

Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Moderador


Twitter: HostCheap





1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq