Salvar em um banco de dados MySQL conteúdo de arquivo de texto


Autor/fonte: Vanessa Schissato
E-mail/Url: http://www.phpbrasil.com/scripts/script.php/id/2640
Tags: [ mysql ]



Digg del.icio.us

Esse script lê o conteúdo de um arquivo de texto, separa seus valores e alimenta um banco de dados MySQL.

Maiores explicações nos comentários no script.

<?php
/*
Desenvolvido por: Vanessa Schissato
Contato: nessa_uepa@yahoo.com.br
Data:16/11/2005

Como funciona?
Esse script le o conteudo de um arquivo de texto, separa seus valores e alimenta um banco de dados

Como deve ser o formato do arquivo de texto?
O arquivo de texto deve seguir a seguinte estrutura:
******

valor_campo1,valor_campo2,valor_campo3
valor_campo1,valor_campo2,valor_campo3

******
Ou seja, os valores de cada campo de um registro separados por vírgula e os registros separados por quebras de linhas

Que modificações devo fazer para adaptar esse script as minhas necessidades?
Você precisa simplesmente mudar as variaveis de configuracao do banco de dados e do email do administrador logo abaixo.
Alem disso, deve adaptar para as suas variaveis a consulta de inclusao da linha 199, tomando o cuidado de colocar as variaveis certas correspondentes que recebem seus valores na linha de cima.

*/

session_start();

//desativa o relatorio de todos os erros
error_reporting(0);

//configuracoes para conexao com banco de dados
$host = "localhost"; 
$user = "root"; 
$password = ""; 
$db = "nome_db"; 
$tabela = "nome_tabela"; 

//dados do administrador
$email_administrador = 'nome@provedor.com.br';

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

?>

<HTML>
<HEAD>
<script language="JavaScript">
<!--
//rolagem automatica da tela
var parar = false;
function rolar() {
   if (!parar) {
      window.scrollTo(0,100000);
      setTimeout("rolar()", 250);
   }
}
//-->
</script>

<?php
echo "</HEAD>";
echo "<BODY>";

//recebe dados do formulario
$filename = $_FILES['filename']['tmp_name'];
$cod_grupo = $_POST['cod_grupo'];

If(!$filename and !$cod_grupo) //mostra formualario
{

   //inicializa a ficha sincronizadora com um valor aleatorio
   $_SESSION["synctoken"]= uniqid(time( ));

   echo "<font size=3 face=verdana,arial,serif>LEITURA DE ARQUIVO</font><br><br>";

   echo "<form method=post action=".$_SERVER['PHP_SELF']." enctype=multipart/form-data>";
   
   echo "<table><tr>";
   echo "<td align=right><font face=verdana,arial,serif size=2>Arquivo: </font></td><td><input type=file name=filename size=30><br>";

   echo "<input type=hidden name=token value=".$_SESSION["synctoken"].">";

   echo "</td></tr><tr>";
   echo "<td colspan=2 align=center><br><input type=submit value=Enviar>";
   echo "</td></tr></table>";
   echo "</form>";

}
Else //le arquivo
{

   //confere se ficha sincronizadora ok
   If($_POST['token'] != $_SESSION['synctoken'])
   {
      erro('Operacao Cancelada! Tentativa de invasao ou duplicacao.');
      exit;
   }
   //troca valor da ficha de sincronizadora
   $_SESSION["synctoken"]= uniqid(time( ));

   //validacao
   If(!$filename)
   {
      erro('Campo arquivo obrigatorio!');
   }

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

   If($datafile)
   {
      //pega conteudo do arquivo de texto
      While(!feof($datafile))
      {
         $buffer .= fgets($datafile, 4096);
      }

      //trata arquivo
      $buffer = htmlentities($buffer); //nao interpreta tags html
      $buffer = str_replace("nn","n",$buffer); //retira quebras de linhas    

      //verificacao de seguranca dos dados do arquivo (sql injection)
      If(inject($buffer))
      {
         mail($email_administrador,'*TENTANTIVA SQL INJECTION - LEITURA DE ARQUIVO*',$REMOTE_ADDR.' TENTOU UM SQL INJECTION ATRAVES DO ARQUIVO '.$_FILES['filename']['name'].' AS '.date('d/m/Y H:i:s'),'From: LEITURA DE ARQUIVOrn');
         erro('ALERTA! Tentativa de SQL INJECTION. O administrador foi avisado');
         exit;
      }

      //separa registros por linha
      $registros = explode("n",$buffer);

      //cria transacao
      mysql_query("START TRANSACTION");
      $contadora=0;   

      Foreach($registros as $conteudo)
      {
         If($conteudo)
         {
            echo "<table>";
            registros($conteudo);
            echo "</table>";
         }
      }

      //finaliza transacao
      If($contadora == 0)
      {
         mysql_query("COMMIT");
         ?>
            <script language=javascript><!--
               alert('Salvo com sucesso!');
            --></script>
         <?php
      }
      Else
      {
         mysql_query("ROLLBACK");
         mail($email_administrador,'LEITURA DE ARQUIVO ERRADA','ERRO NA LEITURA DO ARQUIVO '.$_FILES['filename']['name'].' AS '.date('d/m/Y H:i:s'),'From: LEITURA DE ARQUIVOrn');
?>
         <script language=javascript><!--
            alert('Operação abortada. Dados restaurados a condição anterior! Administrador avisado.');
         --></script>
<?php
      }

      fclose($datafile);
   }
   Else
   {
      erro('Falha ao abrir arquivo '.$_FILES["filename"]["name"].'!');
      exit;
   }
}

//grava as informacoes no banco de dados por campo
Function registros($conteudo)
{

   global $contadora;
   global $conexao;
   global $banco;
   global $tabela;

   //separa campos
   $campos = explode(",",$conteudo);
   $marca = $campos[0];
   $modelo = $campos[1];
   $ano = $campos[2];

   //salva registro

   $sql = "INSERT INTO $tabela (marca,modelo,campo) VALUES ('".$marca."','".$modelo."','".$ano."')";
   If(!$resultado = mysql_query($sql)) $contadora++;
         
   If($resultado)
   {
      echo "<td><font color=#00FF00 face=verdana,arial,serif size=1>OK</font><br></td></tr>";
   }
   Else
   {
      echo "<td><font color=#FF0000 face=verdana,arial,serif size=1>FAILED</font><br></td></tr>";
   }
?>

<script language="JavaScript">
<!--
rolar();
//-->
</script>

<?php
}
Function inject($txt) //verifica sql injection
{
   $inject=0; 
   $badword = array("select","insert","update","delete","drop","destroy","alter");
   
   For($i = 0; $i < sizeof($badword); $i++)
   {
      If(substr_count($txt,$badword[$i]) != 0)
      {
         $inject=1;
         break;
      }
   }
 
   return $inject;
}

//exibe mensagem de erro e volta a pagina
Function erro($msg)
{
   ?>
   <script language=javascript><!--
      alert('<?=$msg;?>');
      window.location.href='javascript:history.back(-1)';
      exit;
   --></script>
   <?php
}
?>
<script language=javascript><!--
//para rolagem automatica da tela
parar = true;
--></script>
</BODY>
</HTML>




Enviado por xKuRt em 07/09/2007 às 17:05


Itens relacionados

Função mysql_escape_string
A extensão MySQLi
Mundo PHP: Conectando-se ao Banco de dados MySQL e criando uma tabela
Função mysql_real_escape_string
Classe de conexão MySQL e PostgreSQL
Função para converter data/hora do MySQL para timestamp
Usando SQLs em PHP a partir de um arquivo de funções
Apagar todas as tabelas do seu banco de dados MySQL
Backup de banco de dados MySQL por e-mail
Classe com paginação para trabalhar com o banco de dados MySQL

Listar todos itens relacionados

Avaliação

Esta publicação ainda não foi avaliada!


Avaliar:


A avaliação de publicações é restrita a membros cadastrados e logados no nosso site.



Comentários

AvatarEnviado por cintracidcley em 08/07/2011 às 08:51

bom dia, consegui editar o script e fazer com salve num banco de dados mas como eu faço a quebra linhas corretamente tá dando erro, exemplo meu aquivo txt tem estes dados:

gm,celta,2012
gm,corsa,1996
fiat,uno,1994
fiat,palio,1998

como faço para o sitema saber onde termina a linha, coloque /r/n
mas nao funcionou pode ajudar?

--
CINTRACIDCLEY


Envio de comentário:




  

Sexta, 24 de Outubro de 2014




Top 5 membros

Últimos membros online

Últimos membros cadastrados



Capa do livro
Asterisk na Prática


Capa do livro
Arquitetura de Redes de Computadores


Capa do livro
Metodologia de Pesquisa para Ciência da Computação





Hostnet

IMD