JQuery - Compteur de téléchargements

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : JQuery - Compteur de téléchargements

Re: JQuery - Compteur de téléchargements

par Genova » 25 sept. 2013, 23:56

Tu devrais foutre le téléchargement de ton fichier via PHP, par exemple :
<script type="text/javascript">
$(document).ready(function(){
   $('#download').on('click', function(){
      var el = $('#download_count');
      el.text(parseInt(el.text() + 1));
   });
});
</script>

<a href="download.php?file=tonfichier" id="download">Cliquez pour télécharger</a>
<span id="download_count"><?php echo $compteur ?></span>
($compteur vient de ta base de donnée)

Ensuite download.php :
$pdo->query("UPDATE blabla compteur = compteur + 1");

header('content-type: application/octet-stream); // En mettant le bon mimetype
readfile($file);
++

Re: JQuery - Compteur de téléchargements

par albat » 25 sept. 2013, 22:04

Sauf que ça marche pas, tête de piaf ! :langue:

Re: JQuery - Compteur de téléchargements

par Ryle » 23 juil. 2013, 20:40

Ou alors en version pas propre mais qui fonctionne bien quand même ;)
<a href="javascript:$('#idDuChampQueTuVeuxMettreAJour').val($('#idDuChampQueTuVeuxMettreAJour').val()+1); document.location.href='php/download.php?vhd=1';">...</a>
(ce qui faut pas proposer pour que les gens marquent leurs sujets comme résolu... :))

Re: JQuery - Compteur de téléchargements

par AB » 23 juil. 2013, 20:14

Salut,

Tu devrais pouvoir incrémenter directement en faisant comme cela (fonctionne correctement chez moi) :
[javascript]<!DOCTYPE html>
<html>
<head>
<script src = "scripts/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
$(function()
{
$("#liens").find("a").on("click",function(event)
{
event.preventDefault();

var href = $(this).attr("href");

var varid = href.substr(href.lastIndexOf('?')+1);

var that = $(this);

// Incrémente le compteur
$.ajax({
type: "POST",
url: "incremente_compteur.php",
data: varid,

success: function(result)
{
// Direction script php force_download.php
window.location = href;

//incrémente span avec le retour de requête de incremente_compteur (pour exemple result = 1)
var result = 1;
that.parent().find("span").text(result);
}
});
});
})
</script>
</head>

<body>

<div id = "liens">
<p><a href="force_download.php?id=1">Sauvegarde fichier 1</a> téléchargé <span>0</span> fois</p>
<p><a href="force_download.php?id=2">Sauvegarde fichier 2</a> téléchargé <span>0</span> fois</p>
</div>

</body>
</html>[/javascript]

Après il y aurait peut-être plus propre avec les nouvelles fonctions html 5 et l'api sur les fichiers... Mais comme la doc n'est qu'en anglais et l'api moyennement bien documentée, je te laisse débroussailler l'histoire si le coeur t'en dit :)

Re: JQuery - Compteur de téléchargements

par albat » 23 juil. 2013, 17:22

Tant que j'aurais pas la mise à jour instantanée de l'affichage du compteur, ce sera pas résolu. Na. |(X

Re: JQuery - Compteur de téléchargements

par moogli » 22 juil. 2013, 21:57

Modération :
Si ta question est résolue, pense à l'indiquer pour que les futures personnes qui voudront consulter ce sujet sachent qu'il contient une solution.
Tu peux réaliser cette opération toi-même en cliquant sur le bouton vert "Mettre le sujet en tant que Résolu" situé en haut de la page à côté du titre du sujet.


:mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen:

sinon pour la mise à jour du compteur tu peux toujours faire une tite requête ajax comme ça tu pourra utilise jquery :) (un truc qui tourne en fond pour faire plein de requête pour mettre a jour le compteur ?).

je crois qu'a part le web socket j'ai pas d'autre ânerie en stock :)

Re: JQuery - Compteur de téléchargements

par albat » 22 juil. 2013, 15:22

Ça marche mais j'suis quand même déçu.
C'est du HTML/PHP, sans JQuery.

Re: JQuery - Compteur de téléchargements

par albat » 22 juil. 2013, 14:56

Ben dans la mesure où tu ouvres une nouvelle fenêtre pour le téléchargement du fichier,
tu pourrais faire un simple lien genre href="download.php?id=1" ou href="download.php?id=1&file=fichiers/fichier_01.zip"
href="download.php?id=1" était ma toute première version.
Et dans download.php, utiliser ton script pour mettre à jour le compteur de téléchargement en bdd,
et enchaîner avec un script du genre de celui proposé dans la FAQ pour forcer le téléchargement des fichiers :
faq-tutoriels/forcer-telechargement-fichier-t7700.html
Oh, un script de Xenon_54 !!!
La vache, ça ne nous rajeunit pas... :D
Sinon pour la partie debugage de ton script... euh... ton downloads.inc.php
il fait appel à un moment donné à un mysql_connect (que tu aurais omis de nous indiquer ici
parce que dans d'autres includes ou serait-ce justement un oubli de spécifier les infos de connexion à ta base ?) ? ....
La connexion à la base est correctement faite,
mais je ne vous ai présenté que le code lié au téléchargement.
Et si dans le die(), au lieu de me donner tort tu mettais un mysql_error()
et que tu faisais appel directement à ton script via son url dans le navigateur
(bon, ok, t'auras pas le paramètre en post, mais tu peux le tester en get et voir si ça fonctionne :)
Alors, primo, tu as tort. Ça, c'est toujours vrai. :langue:
Et deuzio, tu me prends pour une buse ou quoi ? (tiens, un autre oiseau...)
J'ai bien évidemment testé en GET et la requête ne retournait aucune erreur.

Au final, j'ai supprimé le javascript et ça fonctionne avec ceci :
/index.php
<p><a href="php/download.php?vhd=1">Télécharger la vidéo en HD 1080p</a></p>
/php/downloads.inc.php :
<?php
//... Connexion à la base MySQL et autres trucs

// Compteur de telechargements
$sql_02 = 'UPDATE vid_videos
              SET vid_downs = vid_downs + 1
            WHERE vid_id='.$_GET['vhd'];
$res_02 = mysql_query($sql_02) or die("C'est de la faute à Ryle s'il y a un : ".mysql_error());

// Telechargement
download('../fichiers/fichier_'.$_GET['vhd'].'.zip');
?>
avantages :
- Le téléchargement se lance correctement
- Le compteur est mis à jour dans la base
- pas d'ouverture de fenêtre/onglet/popup pour download.inc.php

inconvénient :
- L'affichage du nombre de téléchargements sur la page index.php nécessite un rechargement de la page pour se mettre à jour

Re: JQuery - Compteur de téléchargements

par Ryle » 22 juil. 2013, 00:37

Ben dans la mesure où tu ouvres une nouvelle fenêtre pour le téléchargement du fichier, tu pourrais faire un simple lien genre href="download.php?id=1" ou href="download.php?id=1&file=fichiers/fichier_01.zip"

Et dans download.php, utiliser ton script pour mettre à jour le compteur de téléchargement en bdd, et enchaîner avec un script du genre de celui proposé dans la FAQ pour forcer le téléchargement des fichiers :
faq-tutoriels/forcer-telechargement-fichier-t7700.html


Sinon pour la partie debugage de ton script... euh... ton downloads.inc.php il fait appel à un moment donné à un mysql_connect (que tu aurais omis de nous indiquer ici parce que dans d'autres includes ou serait-ce justement un oubli de spécifier les infos de connexion à ta base ?) ? ....
Et si dans le die(), au lieu de me donner tort tu mettais un mysql_error() et que tu faisais appel directement à ton script via son url dans le navigateur (bon, ok, t'auras pas le paramètre en post, mais tu peux le tester en get et voir si ça fonctionne :)

Enfin, plutôt que <a href="#" onclick="blabla..."> je préconise <a href="javascript:void(0);" onclick="blabla..."> voire même <a href="javascript:blabla..."> qui revient au même en évitant le retour en haut de page :)

Re: JQuery - Compteur de téléchargements

par albat » 21 juil. 2013, 18:54

Petite parenthèse :
J'ai cherché sur la toile des scripts répondant à ma demande et n'en ai trouvé qu'une poignée
qui ne correspondaient que très insuffisamment à ce que je cherchais.
Je n'ai pourtant pas l'impression que ma demande est délirante !!! :-s
Google a bridé les résultats pour m'emmerder ou il n'y a vraiment aucune contribution en ligne sur ce sujet ?... :evil:

Re: JQuery - Compteur de téléchargements

par albat » 21 juil. 2013, 18:52

à vue de nez je dirais que ton onclick n'est peut être pas exécuté, sachant que le navigateur commence par le href...
C'est probablement une piste. :-k
  1. J'ai donc interverti les positions des attributs href et onClick
  2. J'ai remplacé le href="fichiers/fichier_01.zip" par un href="#" en ajoutant dans le download.inc.php la ligne :
    header('location:fichiers/fichier_01.zip');
  3. J'ai finalement supprimé le href="#"
Aucune des 3 méthodes n'a donné de résultat.
pour ma part je passerai par un script php pour servir le fichier et comptabiliser le nb de téléchargement.
En l'état, un clic droit et enregistrer la cible du lien sous.. ne mettra pas à jour ton compteur :-)
Tu as tout à fait raison, je n'avais pas pris garde à ça ! :afraid:

Mais je voulais absolument éviter le rechargement de pages en utilisant de l'Ajax... :cry:

Re: JQuery - Compteur de téléchargements

par albat » 21 juil. 2013, 18:45

Salut moogli,
Je vais p´tet dire une connerie mais ../php/ ?
Parce qu'à priori c'est juste /php/downloads.inc.php nan ?
J'ai moi aussi hésité et j'ai testé les deux.
Avec le même résultat. :(
Et un point virgule en trop dans le tableau des données ?
Le ; final est facultatif en javascript, mais j'ai toujours eu l'habitude de le mettre.
Je l'ai enlevé au cas où.
Ça n'a rien changé, là non plus.

La vérité est ailleurs... ;)

Re: JQuery - Compteur de téléchargements

par Ryle » 21 juil. 2013, 13:58

or die('Tout ça, c\'est de la faute de Ryle !!!')
ptdr :-P

mais comme je suis magnanime, à vue de nez je dirais que ton onclick n'est peut être pas exécuté, sachant que le navigateur commence par le href...

Mais pour ma part je passerai par un script php pour servir le fichier et comptabiliser le nb de téléchargement. En l'état, un clic droit et enregistrer la cible du lien sous.. ne mettra pas à jour ton compteur :-)

Re: JQuery - Compteur de téléchargements

par moogli » 21 juil. 2013, 12:56

Salut,

Je vais p´tet dire une connerie mais ../php/ ?

Parce qu'à priori c'est juste /php/downloads.inc.php nan ?

Et un point virgule en trop dans le tableau des données ?

[javascript]
function downloads_count(id)
{ $.post('/php/downloads.inc.php',{ fic_no: id } );
}
[/javascript]


Sinon il serait temps de passer à mysqli :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen:


@+

JQuery - Compteur de téléchargements

par albat » 21 juil. 2013, 10:20

Bonjour,

Je souhaite intégrer un compteur de téléchargement pourtant tout simple
mais je ne parviens pas à trouver la faille de mon script.
Le fichier (.zip) se télécharge bien, mais le compteur reste inchangé.

L'erreur est peut-être évidente, mais... je ne la vois pas. |*()
Merci pour votre regard.

/index.php :
<script type="text/javascript" src="js/downloads.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
</head>

<body>
<a href="fichiers/fichier_01.zip" onClick="downloads_count(1);" target="_blank">Télécharger le fichier n°1</a>
/js/downloads.js :

Code : Tout sélectionner

function downloads_count(id) { $.post('../php/downloads.inc.php',{ fic_no: id; } ); }
/php/downloads.inc.php :
<?php
// Compteur de telechargements
$sql_02 = 'UPDATE vid_videos
              SET vid_downs = vid_downs + 1
            WHERE vid_id    = '.$_POST['fic_no'];
$res_02 = mysql_query($sql_02) or die('Tout ça, c\'est de la faute de Ryle !!!');
?>