Ir para conteúdo

POWERED BY:

Arquivado

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

leo_SJCampos

Pegar dados de um arquivo txt e gravar no banco

Recommended Posts

Olá Galera,,, estou precisando gravar alguns registros no banco de dados, mas os dados vem de um arquivo assim:

 

arquivo.txt

 

111; Leonardo; 25/08/1986;

222; Joao; 25/05/1980;

333; Maria; 10/09/1989;

 

quando é uma coluna só eu até consigo fazer,,, mas quando são várias,, da problema...

 

fiz assim:

 

$dados = fopen("arquivo.txt", "r");

	
	foreach($dados as $row){
		$campo = explode('|', $row);
		$sql = "INSERT INTO tbdados (matricula, nome, data) VALUES ('$campo[0]', '$campo[1]', '$campo[2]')";
		$resultado = mysql_query($sql) or die(mysql_error());
	}
	mysql_close();
	if ($resultado)
	{
 		 print "Dados copiados com sucesso!";
	}
	else
	{
 		 print "Foi possível copiar os dados do arquivo.";
	}

só que ta dando pau no foreach

 

Warning: Invalid argument supplied for foreach() in C:\wamp\www\teste.php on line 24

Foi possível copiar os dados do arquivo.

 

o que eu posso fazer?

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?

$filename = "arquivo.txt";

$arq = fopen ($filename, "r");

$read = fread ($arq, filesize ($filename) );

 

$separador = ";"; // O que separa os resultados no arquivos TXT ?

 

$array = explode($separador, $read);

$conta = count($array);

 

for ($i=0; $i < $conta; $i++) {

 

$sql = "INSERT INTO tbdados (matricula, nome, data) VALUES ('" . $array[$i] . "', '" . @$array[$i + 1] . "', '" . @$array[$i + 2] . "')";

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

 

$i = $i + 2;

 

}

 

mysql_close();

 

if ($resultado)

{

print "Dados copiados com sucesso!";

}

else

{

print "Não foi possível copiar os dados do arquivo.";

}

?>

 

veja se isso lhe ajuda, o que eu fiz foi um looping simpels com o comando "for", usei o explode para separa os dados, e o count para contar os valores recebidos do arquivo TXT.

 

Eu fiz um teste aqui sem o MYSQL e apareceu os seguintes resultados

 

111 Leonardo 25/08/1986

222 Joao 25/05/1980

333 Maria 10/09/1989

desta maneira, com o código.

 

<?

$filename = "arquivo.txt";

$arq = fopen ($filename, "r");

$read = fread ($arq, filesize ($filename) );

 

$separador = ";"; // O que separa os resultados no arquivos TXT ?

 

$array = explode($separador, $read);

$conta = count($array);

 

for ($i=0; $i < $conta; $i++) {

 

 

echo $array[$i];

echo @$array[$i + 1];

echo @$array[$i + 2];

 

echo "<br />";

 

 

$i = $i + 2;

}

?>

 

testa ai vê se está tudo ok! e se os resultados vão para o mysql com o 1º código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php

// Obtem o conteudo do arquivo (arquivo.txt)
$dados = file_get_contents('arquivo.txt');

// Quebra o conteudo do arquivo usando o separador \n (quebra de linha)
$itens = explode("\n", $dados);

// Inicio um array nesta variavel
$dado = array();

// Intrução inicial do MySQL. Será unida com o resto da consulta no foreach() abaixo
$sql  = "INSERT INTO `tbdados` (`matricula`, `nome`, `data`) VALUES";

// Quebro cada item que chega do array $itens, para serem insidos no MySQL
foreach ( $itens as $item ) {

   $dados = explode(';', $item);

   // Como os campos nome e data tinham um espaço antes, usei a função trim() em cada dado para retirar esses espaços
   foreach ( $dados as $dadoTmp ) {

       $dado[] = trim($dadoTmp);

   }

   $sql .= " ('".$dado[0]."', '".$dado[1]."', '".$dado[2]."'),";


}

// Retira a virgula que sobrou no final da consulta
$sql = substr($sql, 0, -1);

// Executa a query, inserindo os dados.
$resultado = mysql_query($sql) or die(mysql_error());
mysql_close();


?>

 

 

Ta tudo explicado ai.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Galera,,, estou precisando gravar alguns registros no banco de dados, mas os dados vem de um arquivo assim:

 

111; Leonardo; 25/08/1986;

222; Joao; 25/05/1980;

333; Maria; 10/09/1989;

 

Bom, isso está parecendo um CSV exportado pelo Excel (que não sabe exportar CSV), então você pode usar a função fgetcsv para fazer isso para você:

 

if ( ( $fh = fopen( 'teste.txt' , 'r' ) ) ){
    $lines = array();

    while ( $line = fgetcsv( $fh , 1024 , ';' ) ) $lines[] = sprintf( '("%s")' , implode( '","' , array_slice( $line , 0 , 3 ) ) );

    fclose( $fh );

    if ( mysql_query( sprintf( 'INSERT INTO tbdados (matricula, nome, data) VALUES %s' , implode( ',' , $lines ) ) ) ) print "Dados copiados com sucesso!";
    else print "Foi possível copiar os dados do arquivo.";

    mysql_close();
}

Referências:

http://br2.php.net/manual/en/function.array-slice.php

http://br.php.net/manual/en/function.implode.php

http://br2.php.net/manual/en/function.fgetcsv.php

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.