Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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;
}
?><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'> 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>
<?phpsession_start();
if((!isset ($_SESSION['UsuarioNome']) == true)
and (!isset ($_SESSION['senha']) == true)) {
unset($_SESSION['UsuarioNome']);
unset($_SESSION['senha']);$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 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"><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?
valeu mano por responder ...
teria um exemplo de como vc fez essa ai da div para mim ajudar aqui..?
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.
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
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)
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.