> Tous les forums > Forum des Webmasters
 PHP et script compteur de clic
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
josé99
  Posté le 09/10/2008 @ 14:44 
Aller en bas de la page 
Petit astucien

Bonjour,

je souhaite crée un compteur de clic sur un lien visible sur toutes les pages de mon site mais sans redirection je souhaite que la personne qui clique reste sur la page courante et je souhaite pouvoir recuperer l'url de la page d'ou il a fait le clic et donc j'ai recuperer ce script que j'essaie de personnaliser mais j'ai des questions :

Que mettre dans Header("Location:"); ?

Comment faire pour recuperer l'url de la page ou le lien a ete cliqué?

Je souhaite pour le moment utiliser un fichier texte et non une BD mais je crois que si plusieurs personnes cliquent au meme moment il vas y avoir un souci pour ecrire dans le fichier,non?

Merci pour toutes informations que vous pourrer me donner.

Script :

$f=str_replace ("/", "_", $_GET['url']);

$f="tmp/".$f.".txt";

if(!file_exists($f))
{
$fp=fopen($f,"w");
fputs($fp,"0");
fclose($fp);
}
$fp=fopen($f,"r+");
$nb=fgets($fp,10);
$nb++;
fseek($fp,0);
fputs($fp,$nb);
fclose($fp);


Publicité
Malcolm
 Posté le 09/10/2008 à 19:14 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

pour le coup des accès concurrentiels : oui, effectivement ouvrir un fichier, écrire dedans et le refermer est largement plus long qu'une requête UPDATE en SQL.

Sinon avec une base de données, c'est *relativement* simple.

Il sufift de faire un lien du style <a href="redirect.php?lien=XXX">le lien</a> où XXX est un nombre entier.

(par exemple <a href="redirect.php?lien=30">le lien</a>)

A côté de ça, une base de données comme suit :

CREATE TABLE liens (
  id INT(5) NOT NULL auto_increment,
  url VARCHAR(255) NOT NULL,
  compteur INT(10) NOT NULL DEFAULT 0,

  PRIMARY KEY(id)
) Type = MyISAM;

Et dès que tu as un lien, tu crées son entrée dans la base.

Par exemple, le lien http://jose99.tld a pour ID 1

le lien http://unsite.tld/ a pour ID 2 ... etc.

Enfin, il te reste juste à faire la page redirect.php :

<?php
	$url_id = (isset($_GET['url_id'])) ? abs(intval($_GET['url_id'])) : 0;

	// ouverture de connexion mysql
	$usr = '';
	$db = '';
	$pwd = '';
	$host = '';

	mysql_connect($host, $usr, $pwd);
	mysql_select_db($db);

	$req_visitesite = sprintf("UPDATE liens SET compteur=(compteur +1) WHERE id='%d';",$url_id);

	if (mysql_query($req_visitesite))
	{
		// compteur incrémenté, on récupère l'URL et on envoie la page
		$req_url = sprintf("SELECT url FROM liens WHERE id='%d';",$url_id);

		$url = mysql_query($req_url);
		if (mysql_num_rows($url) == 1)
		{
			header("Location : ".$url);
		};
	};
	exit();
?>


Modifié par Malcolm le 09/10/2008 19:15
josé99
 Posté le 10/10/2008 à 16:50 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Merci Malcolm. Effectivement je sais que c'est plus simple avec une BD ce qui sera fait dans un deuxieme temps mais pour le moment je dois le faire avec un fichier car je ne souhaite en faite que loguer les clics et de plus je ne souhaite pas blinder ma base de requetes car elle est deja pas mal saturé,le backup de ma BD fait 17Go.Voila.

Une autre idée?

Malcolm
 Posté le 10/10/2008 à 19:26 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

17 Go ???

il faut carrément un cluster pour gérer ça, ne me dis pas que tu es un débutant ...

josé99
 Posté le 13/10/2008 à 09:23 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Je suis débutant en PHP mais pas en administration système et en SQL.

Malcolm
 Posté le 18/10/2008 à 13:01 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Dans ce cas, il faut un fichier texte avec une ligne par lien (par exemple), mais en cas de téléchargements trop rapprochés (accès concurrentiels) je doute que ça soit efficace ...

un fopen, fread, pour lire le fichier, incrémenter ta variable, puis fwrite et fclose pour terminer l'opération.

josé99
 Posté le 23/10/2008 à 10:23 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Merci et désolé pour la réponse tardive mais je finissais mon script qui compte les clics et recupere la date et l'url de provenance.. Voila il fonctionnait très bien puis depuis deux jours je ne sais pas pourquoi il ne m'incremente plus de compteur.

Mon script :

<?php
session_start();
$uscookies="no";
$hours="24";
$date= date('d-m-Y');
$url=$date .'|'.$_SERVER["HTTP_REFERER"];

// NOM DES FICHIERS CLIC et URL
$file1="compteur.clic";
$file2="url.clic";

// VERIFICATION SI CLIC AUTORISE
if($uscookies=="yes")
{
if($pagevue==$file1) {$incr="no";}
if($pagevue==$file2) {$incr="no";}
}

// CREATION DU FICHIER CLIC CORRESPONDANT A L'URL S'IL N'EXISTE PAS
if(!file_exists("$file1"))
{
$fp=fopen("$file1","w");
fputs($fp,"0");
fclose($fp);

if(!file_exists("$file2"))
{
$fu=fopen("$file2","w");
fputs($fu,"URLS\n");
fclose($fu);
}
}
// INCREMENTATION DU COMPTEUR DE L'URL
if($incr!="no")
{
$fp=fopen("$file1","r+");
$fu=fopen("$file2","a+");
$nb=fgets($fp,10);
$nb++;
fseek($fp,0);
fwrite($fp,$nb);
fwrite($fu,$url ."\n");
fclose($fp);
fclose($fu);
}
// POSE DU COOKIE ET REDIRECTION VERS L'URL

if($uscookies=="yes" && $incr!="no") {SetCookie("pagevue","$file1","$file2",time()+$hours*3600,"/","",0);}
header("location:" . $_SERVER["HTTP_REFERER"]);

?>

Avez vous une idée?
Merci

Malcolm
 Posté le 23/10/2008 à 19:38 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

à partir de quel numéro ça bloque ? Si tu lis par exemple les 2 premiers caractères tu lmites ton script à 99 clics... (c'est une idée en passant)

josé99
 Posté le 23/10/2008 à 21:43 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Merci. Le souci c'est que cela ne s'incremente plus du tout meme si je part d'un nouveau fichier.

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
65,98 €Alimentation modulaire Corsair CX750F RGB 80+ Bronze à 65,98 € avec le code MAGIQUE
Valable jusqu'au 07 Décembre

Materiel.net propose actuellement l'alimentation modulaire Corsair CX750F RGB à 65,98 € avec le code promo MAGIQUE. On la trouve ailleurs à partir de 100 €.

Cette alimentation de 750W est certifiée 80+ Bronze et est garantie 5 ans. Entièrement modulaire, vous pourrez brancher uniquement les câbles (fournis) dont vous avez besoin. Vous profitez également d’un éclairage personnalisable dynamique grâce à un ventilateur RGB de 120 mm doté de huit LED RGB.

 


> Voir l'offre
GratuitJeu PC Dead by Daylight gratuit
Valable jusqu'au 09 Décembre

Epic Game Store offre actuellement le jeu PC Dead by Daylight. Dead by Daylight est un jeu d'action multi-joueurs (4 contre 1) qui vous plonge dans une ambiance de film d'horreur. Chaque joueur peut jouer le rôle d'un tueur sanguinaire pendant que les quatre autres tentent de lui échapper en évitant d'être attrapé et tué. Jeu et audio en français. PEGI 18


> Voir l'offre
74,99 €Alimentation modulaire Corsair RM650 80+ Gold à 74,99 €
Valable jusqu'au 05 Décembre

Cdiscount propose actuellement l'alimentation modulaire Corsair RM650 à 74,99 €. Cette alimentation de 650W est certifiée 80+ Gold et est garantie 10 ans. Entièrement modulaire, vous pourrez brancher uniquement les câbles (fournis) dont vous avez besoin. On la trouve ailleurs à partir de 100 €. 


> Voir l'offre

Sujets relatifs
Compteur clic en javascript
SCRIPT ANTI-clic et anti impression
Compteur de clic (PhP)
Suppression pub du premier clic sur une page de mon site
Changement de compteur dans site Free
Changement de compteur dans mon site Free
commander un onglet par survol au lieu du clic
Script Commentaires dans site.
Défilement d'images au clic
A cause d'un script ne peut plus changer de fond d'écran
Plus de sujets relatifs à PHP et script compteur de clic
 > Tous les forums > Forum Forum des Webmasters