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

Detectando e "contornando" o erro "Too many connections" com a função mysql_errno()
Fechando uma conexão com o MySQL com a função mysql_close()
Convertendo o formado das datas vindas do MySQL
A extensão MySQLi
Command Line do MySQL via Browser
Arquivo PHP para configuração de acesso a banco MySQL e execução de operações básicas
Lidando com crescimento de tabelas no MySQL
Mundo PHP: Como selecionar e exibir dados no MySQL
Pequena classe para MySQL
Classe de conexão MySQL e PostgreSQL

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:




  

Segunda, 22 de Dezembro de 2014




Leitura recomendada

Aprenda J2ee Em 21 Dias

Top 5 membros

Últimos membros online

Últimos membros cadastrados



Capa do livro
Arquitetura de Redes de Computadores


Capa do livro
Introdução à Programação com Python - Algoritmos e Lógica de Programação para Iniciantes


Capa do livro
Projeto de Banco de Dados





Hostnet

IMD