<?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>