Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/07/2011, 12h46   #1
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Par défaut compteur de téléchargement

Bonjour,

je voudrais faire ce qui est dans le titre.
Dans ma page, j'ai mis ça :
Code :
<a href="nom_fichier" onclick="compter_form.php" target="_blank">La télécharger</a>
et compter_form.php :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
<?php 
ini_set('display_errors', 'on');
ini_set('error_reporting', E_ALL | E_STRICT);
ini_set('output_buffering', 'off');
 
include_once("connect.php");
include_once("config.php");
$id_conn = connect();
$sql="UPDATE compt_form SET compteur = compteur +1;";
 $result = mysql_query($sql)or die(mysql_error());
close($id_conn);
?>
La connexion à mysql est bonne car souvent utilisée, mais presque sûr que l'on ne passe même pas dans cette fonction : une idée ?
__________________
Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2011, 12h57   #2
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
c'est terriblement faux.
Tu mélange une action JS et du code PHP...
"onclick" ne déclanche pas le téléchargement d'une page mais c'est un "capteur" de l'évenement "clic" lorsqu'il se produit sur le lien... mais tout reste dans le navigateur.

je te propose de trouver autre chose pour télécharger tes fichiers...
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2011, 13h12   #3
Membre du Club
 
Inscription : novembre 2005
Messages : 103
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 103
Points : 44
Points : 44
Envoyer un message via MSN à Legenyes
hello,
tu devrais récupérer ton action onClick avec un fonction javascript.
Qui elle va faire un appel Ajax a un fichier php

genre
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
<a href="nom_fichier" onclick="monActionOnClick(nom_fichier)" target="_blank">La télécharger</a>
 
<script type="text/javascript"> 
    function monActionOnClick(fichier)
    {
        if (window.XMLHttpRequest) // Objet de la fenetre courant
             var xhr = new XMLHttpRequest(); // Firefox, Safari, ...
	else 
	     if (window.ActiveXObject) // Version Active
		var xhr = new ActiveXObject("Microsoft.XMLHTTP"); // Internet Explorer 
	var urlScriptPhp = "compter_form.php?fichier="+ fichier;
	xhr.open("GET",urlScriptPhp,true);
	xhr.send(null);
 
	xhr.onreadystatechange = function() {
	    if(xhr.readyState == 4) // Reponse recue
	    { 
		if(xhr.status == 200)
		{ 
		    if (xhr.responseText!="") 
			alert(xhr.responseText);
		} 
		else { alert("Echec de la connection au serveur " +xhr.status); }
	    }	
	}
    }
</script>
Legenyes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2011, 13h18   #4
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
ce que tu peux faire c'est d'avoir par exemple tous tes fichiers dans un un répertoire, par exemple: /documents/

dans ce téléchargement tu fais un fichier php "index.php" (c'est + pratique) qui va servir de rebond a tes téléchargements:

au lieu d'appeler <a href="/documents/tarif.pdf">tarif</a>
tu appelles <a href="/documents/index.php?f=tarif.pdf">tarif</a>

dans le fichier "index.php" qu'est ce que tu fais?
  1. tu vérifies si le fichier passé par url (la valeur de f) existe, qu'il est dans le bon répertoire (sinon TRES grave risque pour la sécurité... que ce passe t'il si tu mets des ../../ dans le chemin).
  2. tu incrémentes le nombre de téléchargements
  3. et là tu rebondis... et tu peux le faire astucieusement. Certains te diront d'utiliser une fonction qui ouvre et affiche le contenu du fichier (v)... ce qui est assez périlleux parce qu'il faut remettre les bons headers... et en plus ça désactive le cache. Je te propose de faire une simple redirection
Code :
1
2
header('Status: 302 found')
header('Location: '.$the_filename_i_have_check_for_security);
et là si le fichier déjà téléchargé est en cache côté client ... tu vas pouvoir incrementer le compteur et sans refiler les données (économies).

l'autre solution c'est d'utiliser un outil comme awstat qui analyse les log du serveur apache/iis.


l’inconvénient de cette technique c'est que tu es obligé de mettre à jour tous tes liens... et que si ya des personnes indélicates qui veulent "sauter" le compteur elles peuvent, mais elles n'y ont aucun intérêt...
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2011, 14h11   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 114
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 114
Points : 8 462
Points : 8 462
Citation:
Envoyé par Legenyes Voir le message
Code :
1
2
3
4
5
6
 
 
             var xhr = new XMLHttpRequest(); // Firefox, Safari, ...
	else 
	     if (window.ActiveXObject) // Version Active
		var xhr = new ActiveXObject("Microsoft.XMLHTTP"); // Internet Explorer

c'est plutot :

Code :
1
2
3
4
  var xhr = new XMLHttpRequest(); // Firefox, Safari, Internet Explorer...
	else 
	     if (window.ActiveXObject) // Version Active
		var xhr = new ActiveXObject("Microsoft.XMLHTTP"); // Internet Explorer 6
XMLHttpRequest marche pour IE7
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2011, 15h00   #6
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Salut, et merci pour les réponses. Comme elles sont sacrément techniques, j'ai retenu celle de Legenyes car même si l'Ajax m'est étrangé, il suffit de faire un copier-coller et d'adapter avec le nom du fichier, mais le problème, c'est que compter_form n'est pas appelée...
__________________
Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2011, 15h45   #7
Membre du Club
 
Inscription : novembre 2005
Messages : 103
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 103
Points : 44
Points : 44
Envoyer un message via MSN à Legenyes
Citation:
Envoyé par stealth35 Voir le message
c'est plutot :

Code :
1
2
3
4
  var xhr = new XMLHttpRequest(); // Firefox, Safari, Internet Explorer...
	else 
	     if (window.ActiveXObject) // Version Active
		var xhr = new ActiveXObject("Microsoft.XMLHTTP"); // Internet Explorer 6
XMLHttpRequest marche pour IE7
Effrectivement,
j'ai fais un copié-collé d'un de mes vieux script.

@laurentSc, montre nous comment tu l'appel.
Il passe bien dans la methode javascript ? tu n'a pas d'erreur js ?
Legenyes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2011, 01h14   #8
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Finalement, j'ai opté pour une 3e méthode : je fais un lien vers un fichier php et dans celui-ci d'abord je force le téléchargement puis j'incrémente le compteur dans mysql. Ca a l'avantage d'être à ma portée. Le principe me semble bon, mais bizarrement, la réalisation coince.
__________________
Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2011, 08h27   #9
Membre du Club
 
Inscription : novembre 2005
Messages : 103
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 103
Points : 44
Points : 44
Envoyer un message via MSN à Legenyes
Ca coince ou ?
tu sais nous montrer ton code ?
Legenyes est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2011, 09h46   #10
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
D'abord merci de t'intéresser à mon problème. Si on veut télécharger, on a ce code :
Citation:
<a href="tel_fich.php" target="_blank">La télécharger</a>
et tel_fich.php :
Citation:
<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="content-type">
<title></title>
</head>
<body>

<a href="Formulaire_Word_Enquete_de_satisfaction_VHS-Version_Finale.docx" target="_blank">La télécharger</a>
<?php
ini_set('display_errors', 'on');
ini_set('error_reporting', E_ALL | E_STRICT);
ini_set('output_buffering', 'off');
include_once("connect2.php");

$id_conn = connect();

$sql="UPDATE compt_form SET compteur = compteur +1;";
$result = mysql_query($sql)or die(mysql_error());
close($id_conn);
?>
</body>
</html>
et dans connect2.php :
Code :
1
2
3
4
5
6
7
function connect()
{
$id_conn=mysql_connect(MYHOST,MYUSER,MYPASS);
// or die(mysql_error()) ;
if (! $id_conn) echo "connexion NOK<br>";
if (!mysql_select_db("---",$id_conn)) echo "connexion base foirée"; else echo"connexion OK<br>"; return($id_conn);
}
J'ai bien "connexion OK", mais le compteur ne bouge pas (et pour l'instant, le téléchargement n'est pas forcée, mais je le ferai quand le reste sera au point)
__________________
Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h38.


 
 
 
 
Partenaires

Hébergement Web