Forums Rue-Montgallet.com
Rue-Montgallet.comRue-Hardware.comRue-Occasion.comRue-DVD.comRue-Jeuxvideo.comRue-AudioVideo.comRue-Telephone.comForums
S'inscrire | S'identifier |
| Recherche avancée | Aide
 
 

Achat - Vente Informatique : vtatin Achat - Vente Divers : boss6310, schloups, kingof7, gil93, 1 utilisateur anonyme et 26 utilisateurs inconnus

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

mon compteur en PHP

 
n°4574
tifrere
Junos power
Profil : Dinosaure
Posté le 17-07-2003 à 20:08:35  profilanswer
 

MaJ : mai 2004 pour changer des variables qui ont changées dans la nouvelle version de php
 
 
Voila j'ai réalisé un compteur sur http://www.tifrere.com pour voir un peu l'audience de mon site (pas grand monde pour l'instant :spamafote:)
 
donc je vous donne le code de mon compteur :
 
tout d'abord il faut créer 2 tables dans votre base mySQL :
 
la table compteur :

Code :
  1. CREATE TABLE compteur (
  2.   date date NOT NULL default '0000-00-00',
  3.   nb_visit int(11) NOT NULL default '0'
  4. ) TYPE=MyISAM;


exemple de données qu'elle contiendra :
date, nb_visit
2003-07-17, 50
2003-07-18, 54
2003-07-19, 23
 
c facile a comprendre : le 17 juillet : 50 visiteurs sont passés sur le site, le 18 juillet, 54 visiteurs ....
 
 
la 2eme table : visitors

Code :
  1. CREATE TABLE visitors (
  2.   date date NOT NULL default '0000-00-00',
  3.   time time NOT NULL default '00:00:00',
  4.   ip varchar(15) NOT NULL default '',
  5.   nb_affic int(11) NOT NULL default '0'
  6. ) TYPE=MyISAM;


 
elle contiendra des infos du genre :
date, time, ip, nb_affic
2003-07-17, 18:55:23, 192.168.0.1, 15
2003-07-17, 18:57:13, 192.168.0.3, 24
 
==> le 17 juillet a 18:55:23, la personne ayant pour ip 192.168.0.1 a visité une 15 fois votre site
 
 
voici le code PHP permettant de générer le compteur :

Code :
  1. //Données qui serviront pour le compteur
  2. $ip=$_SERVER["REMOTE_ADDR"];
  3. $date = date("Y-m-d" );
  4. $time=date("H:i:s" );
  5. //calcule le nombre de fois ke le visiteur ayant l'ip "$ip" a visité le site dans la journée.
  6. $req_visitor="Select nb_affic from visitors where date='".$date."' and ip='".$ip."';";
  7. $res_visitor=mysql_query($req_visitor)
  8. or die("Erreur Requete Visiteur" );
  9. $nb_res=mysql_numrows($res_visitor);
  10. //calcule le nombre de visites sur le site le jour même
  11. $req_cpt="Select nb_visit from compteur where date='".$date."';";
  12. $res_cpt=mysql_query($req_cpt)
  13. or die("Erreur Requete Visiteur" );
  14. $nb_cpt=mysql_numrows($res_cpt);
  15. // si $nb_res!=0 : le visiteur a déja visité le site
  16. // on update juste l'heure de la visite et le nombre d'affichage , on insère pas une nouvelles ligne
  17. // on sait le nombre de page que l'utilisateur a affiché et la derniere heure de la journée ou le visiteur etait sur le site
  18. if($nb_res != 0)
  19. {
  20. $req_update="update visitors set time='".$time."', nb_affic=nb_affic+1 where date='".$date."' and ip='".$ip."';";
  21. $res_update=mysql_query($req_update)
  22. or die("Erreur update" );
  23. }
  24. else
  25. //sinon il n'a jamais visité le site
  26. // on insère donc une donnée dans la table visiteur
  27. {
  28. $req_insert="insert into visitors values('".$date."', '".$time."', '".$ip."', '1');";
  29. $res_insert=mysql_query($req_insert)
  30. or die("Erreur Insertion" );
  31. if($nb_cpt!=0)//si $nb_cpt != 0 alors il y a déja eu des visites sur le site ce jour ci, on fait juste un update
  32. {
  33.  $req_update="update compteur set nb_visit=nb_visit+1 where date='".$date."';";
  34.  $res_update=mysql_query($req_update)
  35.  or die("Erreur update nb_visit" );
  36. }
  37. else //aucune visite aujourd'hui on crée un enregistrement dans la table compteur pour le jour meme
  38. {
  39.  $req_insert="insert into compteur values('".$date."', '1');";
  40.  $res_insert=mysql_query($req_insert)
  41.  or die("Erreur insert" );
  42. }
  43. }


 
Pour l'instant ca fonctionne bien, je l'ai mis en prod sur www.tifrere.com.
Si vous avez des questions ou si vous pensez que c'est améliorable, faites moi signe ;)


Message édité par tifrere le 04-05-2004 à 01:09:51

---------------
Speed, Quality, Price ... pick any two
n°4586
Nodashi
Silence je dors
Profil : Dinosaure
Posté le 18-07-2003 à 07:25:08  profilanswer
 

Il ne te reste plus k'a faire un joli affichage :)


---------------
informatique / jeu vidéo / blog du développeur / Pour les hommes modernes
n°4589
tifrere
Junos power
Profil : Dinosaure
Posté le 18-07-2003 à 11:27:35  profilanswer
 

nodashi a écrit :

Il ne te reste plus k'a faire un joli affichage :)  


oué pour l'instant je consulte a l'arrache dans la base de données :D
 
bientot je ferais une interface de configuration pour mon site ;)

n°4600
cruciforme
Profil : Membre
Posté le 18-07-2003 à 15:38:21  profilanswer
 

Pour les dates, j'utiliserais plus une requête du genre
 

Code :
  1. $req_update="update compteur set nb_visit=nb_visit+1 where date=NOW();";

 
 

n°4603
tifrere
Junos power
Profil : Dinosaure
Posté le 18-07-2003 à 18:52:45  profilanswer
 

cruciforme a écrit :

Pour les dates, j'utiliserais plus une requête du genre
 

Code :
  1. $req_update="update compteur set nb_visit=nb_visit+1 where date=NOW();";

 
 
 


ah je connaissais pas


---------------
Speed, Quality, Price ... pick any two
n°4607
cruciforme
Profil : Membre
Posté le 19-07-2003 à 00:17:36  profilanswer
 

Fin ça change pas grand chose. Dans le même genre de trucs qui sert par à grand chose:
 

Code :
  1. $date = date("Y" )."-".date("m" )."-".date("d" );
  2. $date = date("Y-m-d" );

n°4608
tifrere
Junos power
Profil : Dinosaure
Posté le 19-07-2003 à 00:21:59  profilanswer
 

cruciforme a écrit :

Fin ça change pas grand chose. Dans le même genre de trucs qui sert par à grand chose:
 

Code :
  1. $date = date("Y" )."-".date("m" )."-".date("d" );
  2. $date = date("Y-m-d" );

 


suis con  [:ch'konk]
 
Edit : merci ;) :jap:


Message édité par tifrere le 19-07-2003 à 00:22:35

---------------
Speed, Quality, Price ... pick any two
n°5416
tifrere
Junos power
Profil : Dinosaure
Posté le 19-10-2003 à 23:25:37  profilanswer
 

voila pour l'affichage des données :  
 

Code :
  1. echo "<br><br>Nb Visits today : <br>";
  2. $today=date("Y-m-d" );
  3. $req_nb_visits_today="Select nb_visit from compteur where date='".$today."';";
  4. $res_nb_visits_today=mysql_query($req_nb_visits_today) or die ("Error today" );
  5. $nb_visits_today=mysql_fetch_array($res_nb_visits_today);
  6. $nb_visits_today=$nb_visits_today[0];
  7. echo $nb_visits_today;
  8. $req_since_day="Select date from compteur LIMIT 0,1;";
  9. $res_since_day=mysql_query($req_since_day) or die ("Error since day" );
  10. $since_day=mysql_fetch_array($res_since_day);
  11. $since_day=$since_day[0];
  12. echo "<br><br>Nb Visits since <br>".$since_day." :<br>";
  13. $req_nb_visit_total="Select sum(nb_visit) from compteur;";
  14. $res_nb_visit_total=mysql_query($req_nb_visit_total) or die ("Error since day" );
  15. $nb_visit_total=mysql_fetch_array($res_nb_visit_total);
  16. $nb_visit_total=$nb_visit_total[0];
  17. echo $nb_visit_total;


---------------
Speed, Quality, Price ... pick any two
n°5441
Zebra3
Very nice !
Profil : Super Administrateur
Posté le 20-10-2003 à 15:10:04  profilanswer
 

Il manque les PK sur tes 2 tables ! Pour "compteur" il faut une PK sur (date) et pour "visitors" une PK sur (date, ip) de plus je ne comprends pas l'intérêt du champ "time" tu ne t'en seras pas (pas encore du moins) !

n°5443
nico95
A la poursuite du SMS Staÿle
Profil : Dinosaure
Posté le 20-10-2003 à 15:28:34  profilanswer
 

PK ?

n°5444
Zebra3
Very nice !
Profil : Super Administrateur
Posté le 20-10-2003 à 15:37:56  profilanswer
 


primary key :o

n°5445
nico95
A la poursuite du SMS Staÿle
Profil : Dinosaure
Posté le 20-10-2003 à 15:40:48  profilanswer
 

oki.

n°5446
tifrere
Junos power
Profil : Dinosaure
Posté le 20-10-2003 à 17:33:36  profilanswer
 

alors les PK oué j'en ai pas fait j'vais sans doute les rajouter
 
et le champs time, je ne m'en sers pas a l'affichage mais c'est tout simplement ke ces données seront a mon usage seul : je peux savoir ke telle ip a affiché la page X fois et la derniere fois ct a l'heure "time"


---------------
Speed, Quality, Price ... pick any two
n°5447
tifrere
Junos power
Profil : Dinosaure
Posté le 20-10-2003 à 17:42:52  profilanswer
 

voila un extrait de ma base :
 
http://www.maunier.org/pics/misc/compteur.jpg
 
on peut savoir ke le 6 octobre 2003 la machine 192.168.120.3 a affiché 163 fois la page du site et la derniere fois ct a 18:37


---------------
Speed, Quality, Price ... pick any two
n°6080
tifrere
Junos power
Profil : Dinosaure
Posté le 24-12-2003 à 15:09:15  profilanswer
 

nodashi a écrit :

Il ne te reste plus k'a faire un joli affichage :)  


ayé
 
http://www.maunier.org/pics/misc/visitors.JPG


---------------
Speed, Quality, Price ... pick any two
n°7820
tifrere
Junos power
Profil : Dinosaure
Posté le 04-05-2004 à 01:10:15  profilanswer
 

tifrere a écrit :

MaJ : mai 2004 pour changer des variables qui ont changées dans la nouvelle version de php


 
et rajout de l'affichage comme le screenshot ci dessus  
(code html un peu bourrin, j'affinerais plus tard :o)

Code :
  1. <FONT size="2" color="#000000">
  2. <?
  3. if(isset($_POST["submit"]))
  4.     $today=$_POST["year"]."-".$_POST["month"]."-".$_POST["day"];
  5. else
  6.     $today=date("Y-m-d" );
  7. echo "Visitors For ".$today."<BR><BR>";
  8. echo "<FORM method=\"POST\" action=\"page_du_script.php\">
  9. Choose a date :
  10. <INPUT TYPE=\"TEXT\" NAME=\"day\" VALUE=\"".date(d)."\" SIZE=\"3\"> &nbsp
  11. <INPUT TYPE=\"TEXT\" NAME=\"month\" VALUE=\"".date(m)."\" SIZE=\"3\"> &nbsp
  12. <INPUT TYPE=\"TEXT\" NAME=\"year\" VALUE=\"".date(Y)."\" SIZE=\"3\">
  13. <INPUT TYPE=\"SUBMIT\" NAME=\"submit\" VALUE=\"OK\">
  14. </FORM>";
  15. echo "<BR>";
  16. $req_select="Select * from  visitors where date='".$today."';";
  17. $res_select=mysql_query($req_select) or die("Erreur Selection" );
  18. echo "
  19. <TABLE class=normal>
  20. <TR><TD style=\"font-family: verdana; font-size: 10pt;\" align=\"center\" width=\"100\">Time</TD><TD style=\"font-family: verdana; font-size: 10pt;\" align=\"center\" width=\"150\">IP</TD><TD style=\"font-family: verdana; font-size: 10pt;\" align=\"center\" width=\"80\">Nb Affic</TD></TR>
  21. ";
  22. $i=0;
  23. while($data=mysql_fetch_array($res_select))
  24. {
  25.     if($i%2==0)
  26.         $couleur="#BAC1CA";
  27.     else
  28.         $couleur="#FFFFFF";
  29.    
  30.     echo "<TR>
  31.     <TD style=\"font-family: verdana; font-size: 10pt; background: ".$couleur."\" align=\"center\">".$data[1]."</TD>
  32.     <TD style=\"font-family: verdana; font-size: 10pt; background: ".$couleur."\" align=\"center\">".$data[2]."</TD>
  33.     <TD style=\"font-family: verdana; font-size: 10pt; background: ".$couleur."\" align=\"center\">".$data[3]."</TD>
  34.     </TR>
  35.     ";
  36.     $i++;
  37. }
  38. ?>
  39. </TABLE>
  40. <?
  41. $req_nb_visits_today="Select nb_visit from compteur where date='".$today."';";
  42. $res_nb_visits_today=mysql_query($req_nb_visits_today) or die ("Error today" );
  43. $nb_visits_today=mysql_fetch_array($res_nb_visits_today);
  44. $nb_visits_today=$nb_visits_today[0];
  45. if ($nb_visits_today==1)
  46.     echo "<BR><CENTER>Total : ".$nb_visits_today." visitor</CENTER>";
  47. else
  48.     echo "<BR><CENTER>Total : ".$nb_visits_today." visitors</CENTER>";
  49. ?>
  50. <BR>&nbsp</FONT>


Message édité par tifrere le 04-05-2004 à 01:18:33

---------------
Speed, Quality, Price ... pick any two
n°7821
Nodashi
Silence je dors
Profil : Dinosaure
Posté le 04-05-2004 à 10:20:57  profilanswer
 

bon c'est ps XHTML compliant tout ca :modo:


---------------
informatique / jeu vidéo / blog du développeur / Pour les hommes modernes
n°7827
tifrere
Junos power
Profil : Dinosaure
Posté le 04-05-2004 à 22:03:20  profilanswer
 

en meme temps le code est vieux :o
 
pis c pas ma préocupation premiere pour le moment
 
ps : j'ai une seule erreur sur maunier.org et je c pas pkoi


Message édité par tifrere le 04-05-2004 à 22:04:40

---------------
Speed, Quality, Price ... pick any two

Aller à :
Ajouter une réponse