Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1362 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP/MySQL] Compteur de downloads

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP/MySQL] Compteur de downloads

n°1737992
kazzuuu
Posté le 27-05-2008 à 18:35:00  profilanswer
 

Bonjour à tous !
 
J'ai un petit probème dans un compteur de downloads que j'ai conçu.
 
<code type="php">
if(isset($_GET['download']))
{
 // Si le visiteur est connecté
 if (isset($_SESSION['logged']) AND $_SESSION['logged'] == true))
 {
  $id_medias = $_GET['download'];
  $retour = mysql_query('SELECT * FROM medias WHERE medias_id='.$id_medias);
   
  $donnees = mysql_fetch_array($retour);  
  $lien = $donnees['medias_lien'];
 
mysql_query('UPDATE medias SET medias_counter=medias_counter+1 WHERE medias_id ='.$id_medias);
   
  $dl = '<head><meta http-equiv="refresh" content="3; url='.$lien.'" /></head>';
  $dl .= '<p class="centrer">Le téléchargement va commencer dans 3 secondes...</p>';
  $dl .= '<p class="centrer">Si le téléchargement ne se lance pas cliquez <a target="_BLANK" href="'.$lien.'" >ici</a></p><br />';  
  return $dl;
 }
 else
 {
 $dl = '<head><meta http-equiv="refresh" content="3; url=../user/index.php?a=home" /></head>';
 $dl .= '<p class="centrer">Vous devez être connecté pour pouvoir télécharger un fichier.</p>';  
 return $dl;
 }
}
</code>
 
Pour expliquer un peu :
J'envoie a cette fonction une variable <gras>download</gras> transmise par <gras>GET</gras> qui contient l'id du fichier à télécharger.
Si le membre est connecté, je recupère les informations du fichier en question.
J'incrémente dans la BDD le champs medias_counter.
Et je renvoie via la variable <gras>$dl</gras> du texte et aussi une redirection vers le fichier.
 
Mon seul problème c'est que le compteur est incrémenté 2 fois.
La premiere fois à l'affichage de $dl, et une nouvelle fois à la redirection. Mais je ne sais pas pourquoi.  
 
Si quelqu'un aurait une idée du pourquoi du comment ? ou alors un autre algo pour faire mon compteur, sa serait sympa !
Merci :)
 
Mon probème


Message édité par kazzuuu le 27-05-2008 à 20:41:36
mood
Publicité
Posté le 27-05-2008 à 18:35:00  profilanswer
 

n°1738019
kazzuuu
Posté le 27-05-2008 à 19:37:43  profilanswer
 

oo

n°1738035
leflos5
On est ou on est pas :)
Posté le 27-05-2008 à 20:34:00  profilanswer
 

Au delà du fait que ce code est loin d'être parfait (mélange de tout, pas de test, sql injection, redirection par meta refresh, ...), quel est le code en question qui incrémente le compteur :??:
 
Comment est structuré l'arborescence et par curiosité qu'est ce que ça donne si je tape le lien directement :??:

n°1738037
kazzuuu
Posté le 27-05-2008 à 20:43:45  profilanswer
 

J'ai up mon premier message, j'avais mal copié.
 
Mélange de tout c'est à dire ?
 
Qu'est ce que je peux faire sur les SQL injection la ?
 
Comment on peut redirigé autrement ?

n°1738122
leflos5
On est ou on est pas :)
Posté le 28-05-2008 à 06:27:47  profilanswer
 

Ca répond pas à toutes les interrogations.
 
Déjà tu incrémentes quoi qu'il arrive donc si redirection pour login  aussi.
 
Mélange de tout : html, php, redirection de fonctionnement par tag meta
 
Il faut filtrer les données qui viennent de l'utilisateur, au moins vérifier le type que tu attends, avoir une valeur par défaut, agir en fonction. Et pour limiter la casse soir requête préparée si ça se justifie ou à défaut échapper la chaine (mysql?_real_escape_sting)

n°1738276
CyberDenix
Posté le 28-05-2008 à 13:19:15  profilanswer
 

et pour rafraichir une page on utilise <?php header('Location:http://www.monsite.com'); ?>


---------------
Directeur Technique (CTO)
n°1738438
kazzuuu
Posté le 28-05-2008 à 17:21:35  profilanswer
 

mais avec header je peux pas retourner du texte.

n°1738440
kazzuuu
Posté le 28-05-2008 à 17:22:54  profilanswer
 

avec htmlentities(addslashes($_POST['var'])) c'est utile de le mettre ou non ?
 
Ou alors faut que j'utilise mysql_real_escape_sting() ?

n°1738540
CyberDenix
Posté le 28-05-2008 à 23:28:33  profilanswer
 

Je vote pour mysql_real_escape_string


---------------
Directeur Technique (CTO)
n°1738575
leflos5
On est ou on est pas :)
Posté le 29-05-2008 à 05:48:28  profilanswer
 

retourner du texte avec header, pourquoi faire :??:

mood
Publicité
Posté le 29-05-2008 à 05:48:28  profilanswer
 

n°1738632
NewsletTux
&lt;Insérez ici votre vie /&gt;
Posté le 29-05-2008 à 09:40:46  profilanswer
 

Si ton compteur ne se base que sur un unique champ, le moyen le plus simple est de faire, dans la page initiale, un lien comme suit :
<a href="download.php?file=XXX">Télécharger</a> (en supposant XXX comme étant l'ID du fichier)
 
la page download.php se compose comme suit :
 

Code :
  1. <?php
  2. $file = (isset($_GET['file'])) ? abs(intval($_GET['file'])) : 0;
  3. if ($file != 0)
  4. {
  5.  $req_fileURL = "SELECT medias_lien FROM medias WHERE medias_id='".$id_medias."';";
  6.  $fileURL = mysql_query($req_fileURL) or die(mysql_error());
  7.  if (mysql_num_rows($fileURL) == 1)
  8.  {
  9.   $thisfile = mysql_fetch_array($fileURL);
  10.   // Incrémentation du compteur
  11.   $req_update_ctr = "UPDATE medias SET medias_counter=(medias_counter+1) WHERE medias_id ='".$id_medias."';";
  12.   mysql_query($req_update_ctr) or die(mysql_error());
  13.   // et maintenant on livre le fichier
  14.   header("Location: http://www.ton_site.tld/".$thisfile['media_lien']);
  15.  };
  16. };
  17. ?>


 
Je n'ai volontairement pas mis la session, parce qu'elle ne protège rien du tout en réalité : vu que ton URL apparaissait en clair dans le code source, n'importe qui peut la récupérer.
Alors oui c'est vrai que j'ai pas mis de texte "vous allez être redirigé dans 2 sec", mais perso ça m'horripile.
 
Tu prendras soin également d'enlever les die(mysql_error()) sur ton serveur de prod, bien entendu : je les ai mis là pour les tests, mais en prod, ça se masque et ça se traite autrement :)


Message édité par NewsletTux le 29-05-2008 à 09:41:30

---------------
NewsletTux - outil de mailing list en PHP MySQL

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP/MySQL] Compteur de downloads

 

Sujets relatifs
Besoin d'aide pour 3 scripts PHPAppeler SQL sans recharger une page PHP
[MySQL] update avec rand()MySQL : importer fichier csv, choisir les champs à renseigner ...
VB 6.0 et MySQLMySQL : attribuer date à chaque enregistrement
Php vers flash[PHP / MySQL] afficher le total des champs identique d'une collone.
help me :/ PHP/Mysql et pspad 
Plus de sujets relatifs à : [PHP/MySQL] Compteur de downloads


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR