Page 1 sur 1

compteur de visites

Posté : 19 mars 2007, 17:39
par Invité
J'aimerais faire un compteur qui ne compte les pages qu'après un certain délai (pour éviter aussi le "reload" ou actualisation), tout en enregistrant l'ip du client et l'heure de la connexion.

J'ai fait le code suivant. Au début ça marchait, puis ça a commencé à incrementer le compteur à chaque clic sur "reload".

$connexion=mysql_connect("...","...","...");
mysql_select_db("...");
$delai=300;
$maintenant=time();
$adresse_ip=$_SERVER['REMOTE_ADDR'];

$res=mysql_query("SELECT * FROM compteur WHERE ip=' ".$_SERVER['REMOTE_ADDR']." ' ");

$row=mysql_fetch_array($res);
    if($row['ip']="") {
mysql_query("INSERT INTO compteur (ip, temps) VALUES  (' ".$_SERVER['REMOTE_ADDR']." ',' ".time()." ' ");
mysql_query('UPDATE compteur SET nombre=nombre+1 WHERE id=1');
}
else {
       if (time()-$row['temps'] < $delai) {
mysql_query("UPDATE compteur SET temps = ' ".time()." ' WHERE ip=' ".$_SERVER['REMOTE_ADDR']. " ' ");
}
else {
       mysql_query('UPDATE compteur SET nombre = nombre+1 WHERE  id=1');
       mysql_query("UPDATE compteur SET temps = ' " .time(). " ' WHERE ip = ' " .$_SERVER['REMOTE_ADDR']." ' ");
}
}

$sql="SELECT * FROM compteur WHERE id=1";
$result=mysql_query($sql);
$row2 = mysql_fetch_assoc($result);

echo "compteur= ".$row2['nombre'];

Qu'est-ce qui ne marche pas dans ce compteur?
Qq'un peut - il m'aider SVP ! Grand merçi.

Posté : 19 mars 2007, 23:13
par zeus
Alors, tout d'abord, penses bien à l'incrémentation et au commentaires, c'est super important pour la lisibilité et la maintenance, particulièrement sur un forum ;)

Ensuite, j'ai remarqué quelques points que je ne comprend pas ... cf //--- CONSEIL --- dans le code

Sinon, voici un exemple ré-indenté et commenté selon ce que j'en ai compris
<?php

// Connexion à la base de données
$connexion = mysql_connect("...","...","...");
mysql_select_db("...");

//Récupération des données
$delai 			= 300;
$maintenant 	= time();
$adresse_ip 	= $_SERVER['REMOTE_ADDR'];


//Vérification de la présence de cette IP dans le compteur
//--- CONSEIL --- Il faut éviter le SELECT * ...
$res = mysql_query("SELECT * FROM compteur WHERE ip=' ".$_SERVER['REMOTE_ADDR']." ' ");
$row = mysql_fetch_array($res);

//Si cette IP n'existe pas, INSERTION
//--- CONSEIL --- Quelle est l'utilité de la comparaison avec le champ "ip", préférer mysql_num_rows() ?
if ( $row['ip'] = "" ) {

	//--- CONSEIL --- Pourquoi un INSERT suivi d'un UPDATE dans la meme table ???
	mysql_query("INSERT INTO compteur (ip, temps) VALUES  ('".$_SERVER['REMOTE_ADDR']."', '".time()."'");
	mysql_query('UPDATE compteur SET nombre = nombre + 1 WHERE id = 1');

// Cette IP existe dans la table
} else {
	
	//Si la temporisation n'est pas écoulée, mise à jour du dernier accès
	if ( (time() - $row['temps']) < $delai) {

		mysql_query("UPDATE compteur SET temps = '".time()."' WHERE ip = '".$_SERVER['REMOTE_ADDR']. "'");

	//Si la temporisation est écoulée, incrémentation du nombre de visites
	} else {

		mysql_query('UPDATE compteur SET nombre = nombre + 1 WHERE id = 1');
		mysql_query("UPDATE compteur SET temps = '" .time(). "' WHERE ip = '" .$_SERVER['REMOTE_ADDR']."'");

	}
}

//Vérification du compteur
$sql = "SELECT * FROM compteur WHERE id = 1";
$result = mysql_query($sql);
$row2 = mysql_fetch_assoc($result);

echo "compteur= ".$row2['nombre']; 

?>

Posté : 20 mars 2007, 02:28
par Ultim4T0m
Alors, tout d'abord, penses bien à l'incrémentation et au commentaires, c'est super important pour la lisibilité et la maintenance, particulièrement sur un forum ;)
Je pense que notre ami Zeus a voulu dire "Indentation" et non "Incrémentation" :)

Posté : 20 mars 2007, 09:19
par zeus
Je pense que notre ami Zeus a voulu dire "Indentation" et non "Incrémentation" :)
Oui, bon d'accord ... 8-|

Bien vu :pouce: