Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

Messages recommandés

Posté(e)
salut,

je voudrais mettre un compteur sur un lien de telechargement de mon site

comment faire ca ?

merci

496505[/snapback]

php/mysql

je me sers deja d'une base pour un compteur a l'acceuil du site

mais la je veux que quand on clique, on incremente un compteur et on telecharge le fichier (sans page ntermediaire)

Posté(e)

Fais une page "compteur" qui redirige sur le fichier à télécharger. Comme ça tu comptes "à la volée" le nombre de fois où la page "compteur" aura vu passer une demande de téléchargement du fichier en question (celui sur lequel elle redirige par la suite)

 

Exemple de page de redirection :

<html>
<head>
 <script type="text/javascript">
   var url = "index.htm"
   (document.images) ? location.replace(url) : location.href = url;
 </script>                                                         
 <meta http-equiv="refresh" content="0;URL=index.htm" />
 <title>Redirect</title>                                
</head>                  
<body> 
 <p>Si la redirection ne fonctionne pas automatiquement, <a href="index.htm">cl
iquez ici</a>.</p>                                                             
</body>           
</html>

Tu peux t'en inspirer en remplaçant "index.htm" par "<%= $_POST('fichier_a_telecharger') %>" (si c'est bien comme ça qu'on récupère une variable d'URL en php) et en insérant avant la balise <html> le code php correspondant à une mise à jour du compteur associé à ce fichier...

Posté(e) (modifié)
Tu peux t'en inspirer en remplaçant "index.htm" par "<%= $_POST('fichier_a_telecharger') %>" (si c'est bien comme ça qu'on récupère une variable d'URL en php) et en insérant avant la balise <html> le code php correspondant à une mise à jour du compteur associé à ce fichier...

497019[/snapback]

 

Petite précision par rapport à la réponse de Kewlcat, la syntaxe que tu mets Kewlcat est valable est valable en ASP :P (les % sont pour l'ASP...)

 

il faut donc remplacer ton index.htm par

<? echo $_POST["variable"]; ?>

si celle-ci est passé par un formulaire en methode POST ou

<? echo $_GET["variable"]; ?>

si celle-ci est passé par l'url

Modifié par ragol
Posté(e)

Oh là ! Oui, j'étais pas réveillé à 3h du mat...

Parler de variables d'URL en donnant "$_POST" comme exemple, et utiliser la mauvaise syntaxe pour les balises... J'ai honte :-/

Au passage, l'utilisation des <%= %> et <% %> se fait aussi en JSP (vu que je n'ai jamais touché à de l'ASP).

 

Au temps pour moi. (Et merci Ragol d'avoir corrigé)

Posté(e) (modifié)

En admettant que tu te construises une table 'dl' avec les champs :

 

id | url | click

 

id est un identifiant numerique, url designe le chemin vers le fichier a telecharger et click sert de compteur de click

 

il te suffit de faire un script comme celui-ci :

J'ai volontairement simplifié les requetes SQL par flemme. A toi de les utiliser avec mysql_query et de bien initier ta connexion au sgbd !

Pour les tests d'existance et de validite des variables ... a toi de gerer les cas possibles et les erreurs que cela pourrait produire.

 

Fichier : dl.php

 

<?
$error = false;

// on teste l'existance de id et sa validite (est ce bien un nombre)
if (!isset($_GET["id"]) || !is_numeric($_GET["id"]))
    $error=true;

// on verifie que id pointe effectivement vers une entree de notre table
if ($error || "SELECT count(*) FROM dl WHERE id=$_GET['id']" != 1)
    $error=true;

if ($error)
{?>
    <html>
    <body>
    Une erreur s'est produite
    </body>
    </html>
<?}
else
{
    // on incremente le compteur
    "UPDATE dl SET click=click+1 WHERE id=$_GET['id']"

    // on recupere le nom du fichier a envoyer
    $file = "SELECT url FROM dl WHERE id=$_GET['id']"

    // on envoie maintenant le fichier !
    ob_clean();
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("content-type: application/octet-stream");
    header("Content-Length: ".filesize($file);
    header("Content-Disposition: attachment; filename=".str_replace(" " , "_" , basename($file)));
    flush();
    readfile($file);
}
?>

 

Pour telecharger un fichier il te suffit de mettre en lien :

<a href="dl.php?id=8">mon_fichier.truc</a>

8 etant l'id du fichier mon_fichier.truc dans ta table dl.

Modifié par bill-bob
Posté(e)

Juste des petites remarques sur ta solution, bill-bob : d'une part ça oblige à administrer une table des fichiers disponibles en téléchargement, d'autre part un petit malin qui voudrait downloader tout ce qui passe s'amuserait vite à passer tous les nombres possibles et imaginables à dl.php (alors qu'avec la solution "nom de fichier passé en paramètre" il ne pourra rien deviner du tout) ...

Posté(e) (modifié)

Bah il pourrait telecharger les scripts php ... rien que ca :P

Ou pourquoi pas un fichier .htaccess ... bref tout. Alors pour eviter ces effets de "bords" plus que desastreux l'id me semble un bon compromis comparé aux divers bricolages qui pourraient etre mis en place si on accepte un nom de fichier en parametre.

 

Avec l'id ... il pourra telecharger tout ce k'il veut ... mais seulement ce qui est refenrencé dans la table et donc ce que l'on a explicitement autorisé.

 

Apres a chacun sa methode et ses preferences ... libre a qui veut de modifier les quelques lignes que j'ai mises pour pleinement se satisfaire.

Modifié par bill-bob
Posté(e)

Je suis plutot de l'avis de bill-bob car :

 

Passer un int ca évite d'une part de se confronter aux probleme des urlencode(). Ensuite, un nom de fichier ou peut toujours faire une faute etc...

Avec un id au moins c'est rapide, clair est plus simple aussi à programmer.

 

Puis s'il y a qui ont du temps à perdre à mettre tous les id un par un dans l'url quesqu'on peut bien faire pour eux les pauvres ?

 

 

+a+

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...