Ir ao conteúdo
  • Cadastre-se

Contador de download


denismartos

Posts recomendados

Olá Pessoal...

Estou fazendo meu trabalho de TCC e surgiu uma dúvida..

Basicamente é um sistema de upload e download de arquivos, eu gostaria de fazer um contador, onde somasse +1 no banco de dados toda vez que alguém efetuar o download...

Pensei um pouco mais não tenho ideia de como posso fazer isso.

Se alguém puder ajudar...valeu !!!

Edit: A esqueci de dizer, o sistema é em php e banco de dados MySql

Link para o comentário
Compartilhar em outros sites

  • Moderador

nao sei.. mas tente quando efetuar o download... no seu php fazer uma consulta para a soma total daquele aquivo baixado.. e depois fazer um update set na sua tabela, pegando a contagem e somando mais um..

algo do tipo..

$contagem = "select count(campo) from tabela where arquivo = 'arquivo' ";

$atualiza = "update tabela set campo = $contagem+1";

bom essa é uma ideia simples que eu pensei agora.. mas você pode tentar trabalhar em cima disso e achar outras soluçoes melhores.

abraço

Link para o comentário
Compartilhar em outros sites

Pensei nisso também dif, mais ai quando fui por em pratica me deparei com uma tremenda dúvida...

Como eu vou fazer em php para saber que a pessoa fez o download ou clicou no link?

Essa é a maior dificuldade, sabendo isso ai eu posso colocar o que você falou.

Gostaria de saber se da pra usar alguma regra do tipo...Se download for feito faça algo, entendeu?

Não sei se consegui explicar muito bem mais acho que deu pra entender, to pesquisando aqui mais ta meio difícil de achar.

Link para o comentário
Compartilhar em outros sites

  • Moderador

primeiro tens que pensar em algumas situaçoes... por exemplo:

o download so poderá ser feito se a pessoa estiver logada?

o download é gratuito? ou seja qualquer um clica no link e baixa sem identificaçao nenhuma?

caso seja a primeira, é mais fácil.. porque você identifica pelo id do usuario cadastrado...

caso for a segunda, ja é um pouco mais complicada pois ai.. você antes, tem que fazer uma consulta no banco pra saber qual arquivo foi baixado e qtas vezes ele foi baixado ate agora. dai entra a contagem em cima disso..

tudo seria em torno da id do arquivo..

por exemplo:

select count(idArquivo) from arquivosBaixados where idArquivo = 5

nesse exemplo você , você busca na tabela arquivos baixados a contagem de quantas vezes o arquivo id 5 apareceu.

algo do tipo

Link para o comentário
Compartilhar em outros sites

Então, é a primeira opção, só poderá fazer o download se a pessoa estiver logada..

Mais a contagem tem que aparecer na tabela arquivo, toda vez que aquele download for feito independente do usuário ele vai somar mais +1.

Do jeito que entendi o que escrever eu vou fazer um select no banco de dados na tabela arquivo e fazer um update no campo que faz a contagem, essa parte eu consegui entender.

O código ta de modo simples, ainda não define o modo de exibição no SELECT como vai ser.


<?php
include("db.php");

$consulta = mysql_query("SELECT * FROM `arquivos` ORDER BY `arquivo_nome` ASC");
if ($resultado = mysql_fetch_array($consulta)){
do {
echo "<a href=\"" . $resultado["arquivo_local"] . $resultado["arquivo_nome"] . "\">" . $resultado["arquivo_nome"] . "</a><br />";
}
while($resultado = mysql_fetch_array($consulta));
}
?>

Onde eu poderia informar que se o arquivo foi clicado ele soma 1 no banco de dados...

Pensei em jogar o link em uma variavel e estipular que se ess variavel receber 1 click ele soma +1 no campo de contador....

Como os arquivos permitidos serão pequenos quase sempre que a pessoa clicar no arquivo ele vai ser baixado...

Tem algum metodo no PHP de eu escrever. Se tal variavel for clicada, fazer algo?

Link para o comentário
Compartilhar em outros sites

  • Moderador

bem, vou te dar um exemplo de como poderia ser feito, porém nao te dou garantias de que vai funcionar...


<?php

include 'conexao.php';

$consultaArquivo = "SELECT arquivo,downloads FROM arquivo WHERE arquivo='$arquivo'";
$retorno = mysql_query($consultaArquivo);

//se o registro existe
if ($download = mysql_fetch_array($retorno)) {

// soma + 1 ao número de cliques
$downloads = ++$download[1];

// atualiza o registro
$atualiza = "UPDATE arquivo SET downloads=$download WHERE arquivo='$arquivo'";
mysql_query($atualiza);
} else {

// insira o novo arquivo na tabela. O valor padrão de download é 1
$registra = "INSERT INTO arquivo(arquivo) VALUES ('$arquivo')";
mysql_query($registra);

}
?>

seria +- isso. acho q com isso você pode pensar de como fazer no seu sistema. o exemplo foi dado

abraço

Link para o comentário
Compartilhar em outros sites

  • Moderador

beleza, depois tente adicionar alguns cabeçalhos ali.. pra abrir o arquivo.. interesaante também se você tiver colcoando os arquivos em uma pasta.. fazer ele entrar na pasta e armazenar o arquivo em na variavel $arquivo

e tentar fazer o link ficar assim: <a href="download.php?arquivo=nomearquivo.rar> Nome do arquivo </a>"

Link para o comentário
Compartilhar em outros sites

É to mostrando o arquivo assim, pois fiz uma referencia do arquivo no banco de dados mais ta salvo em uma pasta...

echo "<a href=\"" . $resultado["arquivo_local"] . $resultado["arquivo_nome"] . "\">" . $resultado["arquivo_nome"] . "</a>

Agora fiquei com outra dúvida, para fazer o filtro de pesquisa...

Tenho 4 campos e gostaria de que se a pessoa preenchesse qualquer número deles ele pesquisasse com os campos que foram preenchidos..

To me matando um pouco, tava tentando algo do tipo:

$nome_responsavel = $_POST["nome_responsavel"];
$nome_arquivo = $_POST["nome_arquivo"];
$grupo = $_POST["grupo"];
$materia = $_POST["materia"];

if($nome_responsavel == "Nome do Responsavel"){
$nome_responsavel = "";
}

if($nome_arquivo == "Nome do Arquivo"){
$nome_arquivo = "";
}

if($grupo == "Grupo"){
$grupo = "";
}

if($materia == "Matéria"){
$materia = "";
}

$consulta = mysql_query("SELECT * FROM arquivos WHERE"
if(grupo != ""){
"grupo = '%$grupo%',"
}
if(materia != ""){
"materia = '%$materia%',"
}
if(nome_responsavel != ""){
"nome_usuario ='%$nome_responsavel%',"
}
if(grupo != ""){
"arquivo_nome = '%$nome_arquivo%'"
}
);

Sei que ta errado pois não funciona,mais é uma ideia que tive, como funcionaria para eu colocar as variaveis somente se estiverem preenchidas no SQL

Link para o comentário
Compartilhar em outros sites

extract($_POST); --transforma o que tiver dentro de um post em uma variável Ex: $_POST['lala']=123; com o extract fica $lala=123;

where=''; --inicializa a variável, para retirar erros de unexpected variable

where.=(isset($nome_responsavel)&&$nome_responsavel!='')?("nome_responsavel like '%$nome_responsavel%' AND "):('');

Essa linha está em if em linha, (condicao)?(caso true):(caso false);

Neste caso, seria você fazer com os outros valores e depois faça o seguinte:

$sql = "SELECT * FROM arquivos WHERE $where 1=1";

o 1=1 do final, é somente para não dar erro por cauda do AND que estiver no final.

Isso funciona mesmo se ninguém tiver digitado nada nas 3 variáveis.

Espero ter ajudado.

Link para o comentário
Compartilhar em outros sites

Será que assim vai funcionar igual ou parecido?


$consulta = mysql_query("SELECT * FROM `arquivos` WHERE (`aceitar` = 1) AND
((`nome_arquivo` LIKE '%".$nome_arquivo."%') OR
(`nome_responsavel` LIKE '%".$nome_responsavel."%') OR
(`grupo` LIKE '%".$grupo."%') OR (`materia` LIKE '%".$materia."%')
ORDER BY `data`");

Link para o comentário
Compartilhar em outros sites

Olha... pode até ser que sim.

Mas pense o seguinte...

Quero que me traga do banco o nome do arquivo que começa por "arq" E foi baixado por "Carlos" E que seja do grupo "B".

Neste caso você está fazendo ou, quando na verdade é E.

Outro problema...

Se você colocar um espaço no campo de algum dos campos de pesquisa, ela não funciona.

Mais um inconveniente, quero pesquisar só pelo nome do arquivo ? O que se tem que colocar nos outros campos com a condição E para que traga somente uma das pesquisas?

Dif,

Isso é uma mão na roda! Ajuda muito mesmo!

Tenho alguns sistemas que tem em média 20 parâmetros de busca para fazer um relatório...

Imagina como seria a minha vida se não fosse esses if's hehehehe.

Link para o comentário
Compartilhar em outros sites

O E é por causa de um campo boleano, ele só exibi o que é um, que são os arquivos que já foram aceitados pelo administrador, os outros 3 campos seriam filtros...

No caso é meu TCC e é um sistema que vai ser um repositório de conteúdo escolar, então tem que dar pra filtrar por semestre que é a matéria, por grupo que seria, aluno ou professor, pelo nome do arquivo e também pelo nome de quem postou...

Vai ter os 4 campos porém se a pessoa quiser colocar só um ele fará a cansulta com apenas um e se colocar mais de um vai fazer a consulta com os que estiverem preenchidos, só que eu não entendi muito a instrução de Ifs no meio do SQL, to pesquisando sobre o assunto

Link para o comentário
Compartilhar em outros sites

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!