compteur de visites

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : compteur de visites

par zeus » 20 mars 2007, 09:19

Je pense que notre ami Zeus a voulu dire "Indentation" et non "Incrémentation" :)
Oui, bon d'accord ... 8-|

Bien vu :pouce:

par Ultim4T0m » 20 mars 2007, 02:28

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" :)

par zeus » 19 mars 2007, 23:13

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']; 

?>

compteur de visites

par Invité » 19 mars 2007, 17:39

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.