Ir para conteúdo

POWERED BY:

Arquivado

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

danluc

Importa txt

Recommended Posts

Boa tarde, to tentando importa o conteúdo de um arquivo .txt para meu DB, e conseguir isso ja..

mais queria uma barra de progresso de 0 a 100 %, pq o arquivo é grandinho, tem 15000 linhas ou as vezes tem mais..
so que quando importo do jeito que to fazendo a barra anda muito rapido, e importa, mais não da ngm msg de error e nem de sucesso , e tbm aceita qualquer tipo de arquivo e se o txt tiver 0 linhas ele tbm enche a barra com 100% ...
poderiam me ajudar a colocar um barra de progresso com msg e tbm que demore o tempo normal..
Segue o Codigo que estou usando..

<?php 
include('../conexao.php');

if(isset($_POST['BT_Enviar'])){
	$data = $_POST['data'];

$nometmp = $_FILES['buscar']['tmp_name'];

$arquivo = $nometmp;// aquivo a ver importado txt

$arq = fopen($arquivo,'r');// le o arquivo txt

while(!feof($arq))
for($i=0; $i<1; $i++){
	if ($conteudo = fgets($arq)){//se extrair uma linha e não for false
		$ll++; // $ll recebe mais 1 ==== em quanto o existir linha sera somada aqui
		$linha = explode(';', $conteudo);// divide por coluna onde tiver ponto e virgula
	}

	$sql = "INSERT INTO db_claro (`Tel`, `Secao`, `Data`, `Hora`, `UF`, `Numero`, `Duracao`, `Tarifa`, `Valor`, `MesComp`) VALUES ('$linha[0]', '$linha[1]', '$linha[2]', '$linha[3]', '$linha[4]', '$linha[5]', '$linha[6]', '$linha[7]', '$linha[8]', '$data')";
		$result = mysql_query($sql) or die(mysql_error());
		
	//$linha = array();// limpa o array de $linha e volta para o for
}if($sql){
		$sql3 = "INSERT INTO mes (`mescomp`) VALUES ('$data')";
        $sql1 = "UPDATE db_test SET tel = REPLACE(tel, ' ','')";
		$sql2 = "UPDATE db_test SET tel = REPLACE(tel, '-','')";
		$result1 = mysql_query($sql1) or die(mysql_error());
		$result2 = mysql_query($sql2) or die(mysql_error());
		$result3 = mysql_query($sql3) or die(mysql_error());

              } else{

                  $erro1 = "Não foi possivel Importar";

              }
			$contlinhas =  "Quantidade de linhas importadas = ".$ll;
}
?>
<!doctype html>
<html>
<head>
<meta charset="iso-8859-1">
<title>Gerenciador</title>
<link href="../estilo.css" rel="stylesheet" type="text/css">
<link href="bootstrap.css" rel="stylesheet" type="text/css">

<script src="jquery.js"></script> 
<script type="text/javascript" src="carregar.js"></script>
<script type='text/javascript'>
$('#form').ajaxForm({
        uploadProgress: function(event, position, total, percentComplete) {
            $('progress').attr('value',percentComplete);
            $('#porcentagem').html(percentComplete+'%');
        },
        success: function(data) {
            $('progress').attr('value','100');
        $('#porcentagem').html('100%');
            $('pre').html(data);
        }   
         
});
</script>
</head>
<body>

<?php
/*=================INICIA A SESSAO DO USUARIO========================================================*/
session_start(); 
if((!isset ($_SESSION['UsuarioNome']) == true)
and (!isset ($_SESSION['senha']) == true)) { 
unset($_SESSION['UsuarioNome']);
unset($_SESSION['senha']);
header('location:index.php'); } 
$logado = $_SESSION['UsuarioNome'];
$numero=$_SESSION['UsuarioNumero'];
$data = date("d/m/Y");
/*===========CONEXÃO===================*/?>
<div id="top">
	<div id="topo">	
        <p>Olá, <?php echo $logado?></p>
       			Data: <?php echo $data?><br />
                <a href="logout.php">Sair</a>
	</div><!--TOPO-->
</div><!--TOP-->
<div style="width:1000px; margin-left:auto; margin-right:auto"><br />

<?php
if(isset($contlinhas)){
    print '<div style="width:80%; background:#0093FF; color:#fff; padding: 5px 0px 5px 0px; text-align:center; margin: 0 auto;">'.$contlinhas.'</div>';
}if(isset($erro1)){
    print '<div style="width:80%; background:red; color:#fff; padding: 5px 0px 5px 0px; text-align:center; margin: 0 auto;">'.$erro1.'</div>';}
?>
	
   


   
<br />
<form action="teste.php" method="post" enctype="multipart/form-data" name="form" id="form">
<!-- DADOS PESSOAIS-->
<fieldset id="fieldset">
 <legend>Importação</legend>
 <table cellspacing="10">
 <td>
    <label for="nome">Arquivo: </label>
   </td>
   <td align="left">
    <input type="file" name="buscar" />
   </td>
<br ><br >
        <progress value="0" max="100" class="progress progress-striped" role="progressbar" style="width:100%;" ></progress><span id="porcentagem">0%</span>   
        

        
   
  <tr>
   <td>
    <label for="images">Data Competente: </label>
   </td>
   <td align="left">
    <input name="data" type="date" title="Coloque a Data do vencimento da Conta" /> 
   </td>
  </tr>
 </table>
 </fieldset><br />
 <input type="submit" name="BT_Enviar" id="BT_Enviar" value="Enviar" onClick="start();"/>
 </form> 
 </div>
</body>
</html> 

alguém tem ideia ai?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse tipo de coisa eu nunca fiz, mas acredito que deva ser algo com Ajax

 

Sobre a extensão, coloca uma verificação, se a extensão do arquivo é mesmo txt: http://php.net/manual/en/splfileinfo.getextension.php

 

Sobre o loading, eu, quando precisei, não coloquei uma barra, apenas quando era dado o submit eu colocava uma div com fundo transparente com uma outra div dentro de fundo opaco e com a mensagem relacionada, que no caso era Instalando e uma animação de "loading", em um CMS que eu estava fazendo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

danluc, vamos por partes....

 

Primeiro, o que você está fazendo não está correto, você pode ser reportado por estar colocando um monte de "?" para subir o post. Vamos lá, tem várias pessoas com dúvida aqui, você não é a única.

 

Para verificar a extensão você pode dar um explode no arquivo e verificar a ultima parte deste explode, um exemplo bem simples.

$arquivo = "teste.txt";
$extensoesPermitidas = array("txt");

$extensaoArquivo = end(explode(".", $arquivo));
if(in_array($extensaoArquivo, $extensoesPermitidas)) {
 echo "Arquivo válido.";
} else {
 echo "Arquivo inválido.";
}

Já do upload com barra de progresso procure no google, terá que fazer algo em Javascript, provavelmente jQuery para facilitar a sua vida.

 

Qualquer dúvida só chamar.

 

Atenciosamente,

Vitor M. Braga.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Danluc.

 

Bom, em primeiro lugar te faço a seguinte pergunta.

 

você. quer monitorar qual(is) tarefas ?

1 O Uplod

2 Os Inserts Mysql do BD

3 Ambos

 

Qual tarefa é a demorada, o upload ou o BD ao insertar as linhas ?

 

 

 

UPLOAD

Se for o Upload, a tarefa será mais facilmente resolvida se implementar uma solução que se Baseie em HTML5 e navegadores mais recentes,pois os navegadores antigos, por questões de segurança não retornavam o tamanho do arquivo a Upar

Do contrário você. terá grande dificuldade em resolver com PHP puro e ajax, sem algum script CGI (é possível mas bem complicado pelo fato de não poder determinar o nome do arquivo temp que o PHP vai usar, além do local padrão pelo qual o php ira usar para salvar o temp, que pode variar bastante)

ex. de upload c progress-bar html5 - http://www.matlus.com/html5-file-upload-with-progress/

 

 

 

BD INSERTS

Se for o trabalho do BD, eu já implementei uma solução similar, onde você. necessitará do seguinte:

uma página HTML com o form de upload, onde o campo form aponta para uma página php que fará o upload.

 

A página php que recebe o upload, é composta pelo handler, que recebe o arquivo, e grava no servidor.

Esta mesma página com o handler mostra em sua html um progress-bar , controlado por javascript (ajax) que monitora o progresso através de chamadas temporizadas a outro script php somente usado para responder a chamada assincrona. , não esquecendo que é um iframe(hidden) nesta mesma página, que realiza a chamada ao script php que fará o "povoamento" da tabela.

 

O script PHP, que fará o povoamento, antes do loop com os inserts, deve gravar em uma tabela auxiliar o tamanho do arquivo ou num de linhas total, e dentro do loop com os inserts, irá atualizando em outro campo, a posição do ponteiro, ou seja, o contador de linhas em qual o processo de insert está.

 

o Javascript por sua vez, faz chamadas temporizadas ao script de monitoramento, que lê na tabela auxiliar, o tamanho total do arquivo, ou num de linhas, e a posição em que ele está com os inserts, e devolve ao javascript estas 2 informações, que com elas irá calcular o percentual e atualizar o progress-bar

 

Sua estrutura será a seguinte

index.html (form de upload)

processa.php (handler do form, progress-bar , javascript , iframe)

insert,php (faz os inserts e atualiza a tabela auxiliar de monitoramento)

monitora.php (script que é chamado pelo javascript e faz a leitura da pos. do ponteiro)

 

 

AS DUAS COISAS

Como o próprio nome diz , ....rs

 

Abraços e boa sorte

Marcos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sobre, submeter e ele mostrar uma div com carregando ou instalando, fiz um exemplo:

 

https://jsfiddle.net/diegusmiestro/eshs6aqk/4/

 

Basicamente o grosso é o CSS e quando submeter ele vai mostrar o que chamei de #popup, quando o servidor terminar o processo ele vai devolver a resposta e a página vai atualizar, mas até lá fica esse popup mostrando.

 

P.S. 1: Testei apenas no Google chrome

P.S. 2: Usei o jquery 1.11 e o awesome fonts(pra ficar o negocio de carregamento)

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.