insertion pour statistique

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 : insertion pour statistique

par artotal » 09 janv. 2007, 16:32

Merci, j'avais pas vu la deuxième page, j'avais éditer mon post.

par Ajoloca » 09 janv. 2007, 15:24

Bonjour,

Regarde du coté de "BETWEEN" en SQL en combinant avec ADDDATE ou SUBDATE en fonction de tes besoins.

par zeus » 09 janv. 2007, 15:24

la fonction MySQL DATE_FORMAT() te permet de récupérer le numéro de la semaine d'une date (plus d'info ICI - Recherche DATE_FORMAT)

La foncton php date() te permet de faire de même.

L'algo serait le suivant :

Code : Tout sélectionner

Récupérer numéro de semaine de la date actuelle Récupérer toutes les lignes ou le numéro de la semaine est celui de la date actuelle

par artotal » 09 janv. 2007, 15:18

j'ai bien compris.
Par contre pour un affichage des données temporelle j'ai une requete qui fonctionne:
http://creatif-web.be/assoc_arsys/admin ... tation.php
$aujourdhui=date('Y-m-d');
  $req="SELECT * FROM stats WHERE datevisite='$aujourdhui'";.
Mais si je veux l'affichage d'une semaine ?
j'ai essayer ça sans succès
$annee=date('Y');
$mois=date('m').'-';
$jourr=date('d')-7;
echo $aujourdhui;
Sa fonctionne avec mktime mais sa renvoie le timestamp, donc je dois le changer en format US de date
:::::::::::::::::::::::::::::::::::
$septdernier = mktime(0, 0, 0, date("m"), date("d")-7,  date("Y"));
echo $septdernier;
Pour avoir le format date il faut donc que je transforme le timestamp avec date ?
Existe-il une fonction mysql ?
Merci
-> j'ai trouvé une solution qui fonctionne.
echo date('Y-m-d', $septdernier); // sept dernier jour

par AB » 08 janv. 2007, 19:39

Merci de tes explications Zeus

J'essaierai d'optimiser mes compteurs quand j'aurai un moment :D


Artotal,

Quand j'écrivais que l'idée d'Ajoloca me donnait une piste pour les ip en ligne, je voulais dire connectés simultanément.
Cela dit comme je ne faisais qu'un compteur de visites, ton code m'aidera quand je voudrai faire des stats plus complètes :D

par zeus » 08 janv. 2007, 15:31

Par contre pour ton explication sur la forme de la structure est ce qu'en mettant l'ip et la date du jour en clé primaire. Donc l'enregistrement ne se fait que dans ces conditions, l'heure ajouter en clé unique m'empèchera d'avoir plusieurs heures, je crois ?
Je crois que oui.
Le SGBD refusera d'insérer une autre ligne dont la clé primaire se répete.
Si ta clé primaire porte sur l'IP et la date, il refusera d'insérer 2 fois la même IP pour le même jour.
Si ta clé primaire porte sur l'IP, la date et l'heure du jour, il refusera d'insérer 2 fois la même IP pour la même heure de la même date ...
Si ta date se décompose en HH:mm, il enregistrera toutes les visites ou le jour, l'heure et les minutes sont différentes. Donc, pratiquement toutes ;)

Par contre, si tu ne compte stocker qu'une visite par jour, laisse l'IP et la date dans la clé primaire mais stocke l'heure de manière informative

par zeus » 08 janv. 2007, 15:28

Même si je ne peut poser une solution simple ici, la recherche sur IP n'est pas très fiable.

Entre les proxy et les IP tournantes, tu as des stats qui sont completement fausses.

Je travaille en ce moment sur un système de tracking des visites (un web analyser) et le seul moyen qu'on ait trouvé, c'est un couplage de cookie, d'IP et de vérification avec des données déjà récoltées :?

Et je vous laisse imaginer les machines qu'il faut derrière :?

par artotal » 08 janv. 2007, 14:29

Par contre pour ton explication sur la forme de la structure est ce qu'en mettant l'ip et la date du jour en clé primaire. Donc l'enregistrement ne se fait que dans ces conditions, l'heure ajouter en clé unique m'empèchera d'avoir plusieurs heures, je crois ?
Je crois que oui.

par artotal » 08 janv. 2007, 14:16

D'ailleurs je te met mon code complet. Sa te fera une autre piste.
<?php
$user_agent = $_SERVER['HTTP_USER_AGENT'];
$user_agents = array('Windows NT 5.1', 'Windows NT 5.0', 'Windows 2000', 'Windows 98', 'Windows NT 4.0', 'Linux', 'Mac OS X', 'SunOS', 'FreeBSD', '');
$os = array('Windows XP', 'Windows 2000', 'Windows 2000', 'Windows 98', 'Windows NT 4.0', 'Linux', 'Mac OS X', 'Solaris', 'FreeBSD', 'Robot');

foreach ($user_agents as $cle => $value)
    if(@strpos($user_agent, $value))
        break;
$user_os = $os[$cle];
//echo $user_os;
if(ereg("MSIE", $_SERVER["HTTP_USER_AGENT"]))
{
	$navigateur="Internet explorer";
}
else if (ereg("^Mozilla/", $_SERVER["HTTP_USER_AGENT"]))
{
	$navigateur="Firefox";
}
else if (ereg("^Opera/", $_SERVER["HTTP_USER_AGENT"]))
{
	$navigateur="Opéra";
}
else
{
	$navigateur="Un autre navigateur";	
}
//echo 'Votre nav à pour sign :'.$_SERVER["HTTP_USER_AGENT"].'<br />';
//echo 'Vous utilisez '.$navigateur;
//$time=time();
    if()
    {
    $req = "INSERT INTO stats (ip, host, url, datevisite, user_os, navigateur) ".
                 " VALUES('".$_SERVER["REMOTE_ADDR"]."',".
                         "'".addSlashes(getHostByAddr($_SERVER["REMOTE_ADDR"]))."',".
                         "'".addSlashes($_SERVER["HTTP_REFERER"])."',".
                         "NOW(), '$user_os', '$navigateur')";
    @mysql_query($req);
    //echo $req;
    }
    $aujourdhui=date('Y-m-d'); // notation américaine pour coller à NOW();
    //echo $aujourdhui;
    $requete="SELECT datevisite FROM stats WHERE datevisite='$aujourdhui'";
	$jourd=mysql_query($requete, $lien) or mysql_error();
	return mysql_num_rows($jourd);
?>
Maintenant c'est peut être pas optimiser, et je cherche à l'affiner pour avoir les connections de "connecter en ce moment", j'avais pris un script tout fais mais sa me fait trop de code en plus...

par AB » 08 janv. 2007, 13:51

oui c'est clair, j'ai mis l'ip + date de visite du jour en unique, on peux difficilement faire plus ?
Pour mon cas sa me fait un ip par jour
Ok, j'ai compris ta méthode (je fais de même :wink: )


Ajoloca,

Je ne m'étais pas encore penché sur les compteurs d'ip en ligne. ça fait une bonne piste. Merci

par Ajoloca » 08 janv. 2007, 00:20

Bonsoir,

J'ai pas bien compris ce que tu cherches à faire.

Tu cherches à compter le nombre de visiteurs dans la journée ou bien le nombre de connectées à un instant T (avec une précision relative, bien sur)

Tu peut même faire les deux.

Dans ta table, un champs ip, un autre date qui tous deux forment ta clé.
Un troisième avec l'heure que tu mets à jour à chaque page.

Tu auras le nombre de connectés en faisant une extraction (count) de ceux dont la date est = à celle du jour et l'heure est inférieure à l'heure actuelle mois x secondes, minutes (à toi de voir le délai)

Pour avoir les visiteurs d'une journée, tu le fais avec ton champ date.

par artotal » 08 janv. 2007, 00:08

oui c'est clair, j'ai mis l'ip + date de visite du jour en unique, on peux difficilement faire plus ?
Pour mon cas sa me fait un ip par jour

par AB » 08 janv. 2007, 00:01

Le problème c'est que les ip sont uniques dans le même instant sur un serveur. Mais quand l'ip n'est plus utilisé par un visiteur il pourra être réaffecter à un autre visiteur que tu ne pourras donc plus comptabiliser. (je n'ai pas de formation serveur, corrigez-moi si je me trompe)

par artotal » 07 janv. 2007, 17:13

oui effectivement en mettant unique sur le champ 'ip'. Sa fonctionne.
Merci

par artotal » 07 janv. 2007, 16:34

1/je pense que si un enregistrement existe déjà ou même un champ, ça retourne false ?
D'ou mon incrédulité. Confirme moi que je me trompe.
2/ Ou sinon pour les tutos sur les nets, pourrai tu me donner l'explication sur un ip unique, parceque je ne vois pas là comment faire un test simplement sans faire 2 requetes au minimum se qui au prix de la bande passante n 'est pas une bonne méthode, si je devais multiplié le nombre de requete, alors que je fais tout pour les limités, avec beaucoup de mal.
Peut ^étre au n iveau de la structure de la table ?