Compteur de downloads [PHP/MySQL] - PHP - Programmation
Marsh Posté le 27-05-2008 à 20:34:00
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
Marsh Posté le 27-05-2008 à 20:43:45
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 ?
Marsh Posté le 28-05-2008 à 06:27:47
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)
Marsh Posté le 28-05-2008 à 13:19:15
et pour rafraichir une page on utilise <?php header('Location:http://www.monsite.com'); ?>
Marsh Posté le 28-05-2008 à 17:22:54
avec htmlentities(addslashes($_POST['var'])) c'est utile de le mettre ou non ?
Ou alors faut que j'utilise mysql_real_escape_sting() ?
Marsh Posté le 28-05-2008 à 23:28:33
ReplyMarsh Posté le 29-05-2008 à 09:40:46
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 :
|
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
Marsh Posté le 27-05-2008 à 18:35:00
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