<?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("\n\n","\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 ARQUIVO\r\n');
         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 ARQUIVO\r\n');
?>
         <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>