Statistiques sur l'utilisation du moteur de recherche - commentaires > Statistiques sur l'utilisation du moteur de recherche 2005-06-19T19:12:23Z https://files.spip.org/Statistiques-sur-l-utilisation-du#comment381734 2005-06-19T19:12:23Z <p>J'apporte ma petite contribution. J'ai remarqué en effet que les stats étaients faussées parce que souvent le visiteur fait une recherche, va sur un des résultats, puis revient sur la page précédente. Cela a pour effet de faire fonctionner plusieurs fois le script et donc d'enregistre plus de recherches qu'il n'en faut.</p> <p>J'ai donc rajouté une colonne qui enregistre la dernière ip qui a fait une recherche et fait une comparaison supplémentaire. Je vous laisse le code si ça intéresse quelqu'un.</p> <p>Pour créer la table :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>CREATE TABLE spip_recherche ( requete varchar(255) NOT NULL, compteur INTEGER NOT NULL, ip int(10) unsigned default 0, );</code></pre></div> <p>Le script modifié :</p> <div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code><?php # On se connecte à la base de données (en chargeant au passage les fonctions nécessaires à la suite) require("ecrire/inc_version.php3"); require("ecrire/inc_connect.php3"); # On nettoye la requête (on enlève les accents, on vire les espaces superflus et on passe tout en minuscules) $requete = strtolower(trim(strtr($recherche, "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜàâãäåçèéêëìíîïòóôõöùúûüÿ", "AAAAAACEEEEIIIIOOOOOUUUUaaaaaceeeeiiiiooooouuuuy"))); # On récupère l'adresse ip du visiteur if ($GLOBALS['HTTP_X_FORWARDED_FOR']) $ip_visiteur = $GLOBALS['HTTP_X_FORWARDED_FOR']; else $ip_visiteur = $GLOBALS['REMOTE_ADDR']; // Conversion IP 4 octets -> entier 32 bits if (ereg("^(::ffff:)?([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)$", $ip_visiteur, $r)) { $ip_visiteur = sprintf("0x%02x%02x%02x%02x", $r[2], $r[3], $r[4], $r[5]); } else return; # On checke si l'entrée est déjà présente dans la table $resultat_total = spip_query_db("SELECT count(*) as qte FROM spip_recherche WHERE requete='$requete'"); $total = @mysql_result($resultat_total,"0","qte"); # Si oui, on récupère la dernière ip if($total>0) { $resultat_ip = spip_query_db("SELECT ip as ip FROM spip_recherche WHERE requete='$requete'"); $derniere_ip = @mysql_result($resultat_ip,"0","ip"); # Si les adresses sont différentes, on met à jour, sinon on ne fait rien if ($derniere_ip != hexdec($ip_visiteur)) { spip_query_db("UPDATE spip_recherche SET compteur = compteur + 1, ip = $ip_visiteur WHERE requete='$requete'"); } } # Si l'entrée n'est pas présente dans la base, on ajoute l'entrée dans la table else { spip_query_db("INSERT INTO spip_recherche(requete,compteur,ip) VALUES('$requete','1', $ip_visiteur)"); } ?></code></pre></div>