Création d'un graphique avec des statistiques mysql (reload ou non) options utiles...

Soyez le premier à donner votre avis sur cette source.

Vue 18 245 fois - Téléchargée 1 830 fois


Description

Comme son nom l'indique, ce script trace un graphique, clair et net, de vos statistiques sauvegardés dans une base de données mySql. Très utile et bien expliqué... Si vous avez des problèmes à faire fonctionner le script, dites le moi. Il fait une colonne pour chaque mois de l'année courante (enregistre la/les visite(s) unique(s) (avec cookie) et la/les connexion(s) (sans cookie)).

Source / Exemple :


<?php

/* 

 Script réalisé par Kevin Gilbert (KeGi)

 une très petite partie de script du graphique est inspirée de www.phpdebutant.org

IMPORTANT: vous devez créer une table "stats" et uploader le fichier SQl qui vient avec le zip

 Pour afficher le graphique du/des visiteur(s) unique(s):
 <img border="1" src="compteur.php?what=no_reload&save=no" alt="Nombre de visiteurs" /> (affichage sans les reloads et ne sauvegarde pas)

 Pour afficher la/les connexion(s):
 <img border="1" src="compteur.php?what=reload&save=no" alt="Nombre de visiteurs" /> (affichage avec les reloads et ne sauvegarde pas)

 Pour insérer le code qui enrégistre les visiteurs (invisible):
 <?php $what="save"; $save="yes"; include("compteur.php"); ?> (en début de page sans espace)

 pour afficher le nombre de visiteur(s) ce mois-ci :
 <?php $what="save"; $save="no"; include("compteur.php"); echo $hit; ?>

 pour afficher le nombre de connexion(s) ce mois-ci :
 <? $what="save"; $save="no"; include("compteur.php"); echo $hit2; ?>

 bonne prog ;)

  • /
if($what==""){ $what="no_reload"; } if($save==""){ $save="yes"; } $host = "localhost"; $user = "root"; $pass = ""; $table = "stats"; mysql_connect($host,$user,$pass); mysql_select_db("Base"); $m = date("m"); //numéro du mois $a = date("Y"); //année //partie qui ne compte pas les reloads... $query = "SELECT * FROM $table WHERE (year='$a' && month='$m' && type='no_reload')"; $result = mysql_query($query); $nbrep = mysql_numrows($result); if($nbrep=="0"){ //si le mois n'est pas entré, on l'ajoute if($save=="yes"){ $query = "INSERT INTO $table(hit,year,month,type)"; $query .= " VALUES('1','$a','$m','no_reload')"; $result = mysql_query($query); } }else{ //sinon on récupère la valeur du compteur while ($val = mysql_fetch_array($result)) { $hit=$val["hit"]; if($hit==""){ $hit = 0; } } } if(empty($_COOKIE["Visite"])){ //si le visiteur n'a pas de cookie, on incrémente le compteur $hit ++; if($save=="yes"){ setcookie("Visite","ok",time()+365*24*3600); //on lui donne un cookie d'un an } } if($save=="yes"){ //on enregistre le compteur incrémenté ou non... $query = "UPDATE $table SET hit='$hit'"; $query .= " WHERE year='$a' && month='$m' && type='no_reload'"; $result = mysql_query($query); } // partie qui compte les reloads... (même chose sauf qu'ici on met le champ type en reload et on ne met pas de cookie) $query = "SELECT * FROM $table WHERE (year='$a' && month='$m' && type='reload')"; $result = mysql_query($query); $nbrep = mysql_numrows($result); if($nbrep=="0"){ if($save=="yes"){ $query = "INSERT INTO $table(hit,year,month,type)"; $query .= " VALUES('1','$a','$m','reload')"; $result = mysql_query($query); } }else{ while ($val = mysql_fetch_array($result)) { $hit2=$val["hit"]; if($hit2==""){ $hit2 = 0; } } } $hit2 ++; if($save=="yes"){ $query = "UPDATE $table SET hit='$hit2'"; $query .= " WHERE year='$a' && month='$m' && type='reload'"; $result = mysql_query($query); } if($what!=="save"){ //dessin du graphique... $query = "SELECT * FROM $table WHERE (year='$a' && type='$what')"; //requette mysql pour savoir quoi afficher $result = mysql_query($query); $nbrep = mysql_numrows($result); while ($val = mysql_fetch_array($result)) { $month = $val["month"]; $mois[$month]=$val["hit"]; if($mois[$month]==""){ $mois[$month] = 0; } //arrabgement des 12 mois ou valeur de 0 } $nbuse = 0; $top = 0; while($nbuse<12){ $nbuse ++; if($mois[$nbuse]==""){ $mois[$nbuse]="0"; } if($mois[$nbuse]>$top){ $top=$mois[$nbuse]; } //on veux savoir qu'elle est la plus grande des valeurs (il doit surement exister une meilleure facon mais ca marche ...) } $visites = array($mois[1], $mois[2], $mois[3], $mois[4], $mois[5], $mois[6], $mois[7], $mois[8], $mois[9], $mois[10], $mois[11], $mois[12]); $pl=0; header ("Content-type: image/png"); //on entre en mode image $largeurImage = 400; //largeur du graphique $hauteurImage = 300; //hauteur du graphique $topmonth = $top; //Pour mettre la colone la plus haute en rouge $top = ($top + 10); //une marge d'erreur pour voir les chiffres en dessus des colones $im = ImageCreate ($largeurImage, $hauteurImage) //on créer l'image or die ("Erreur lors de la création du graphique"); $blanc = ImageColorAllocate ($im, 255, 255, 255); //couleurs préfaite... $noir = ImageColorAllocate ($im, 0, 0, 0); $bleu = ImageColorAllocate ($im, 0, 0, 255); $rouge = ImageColorAllocate ($im, 255, 0, 0); ImageLine ($im, 10, $hauteurImage-10, $largeurImage-10, $hauteurImage-10, $noir); for ($mois=1; $mois<=12; $mois++) { //assosiation des lettre avec les numéro de mois, encore là surement pas la meilleure facon mais ça marche ... if($mois=="1"){ $mois_lettre = "J"; } if($mois=="2"){ $mois_lettre = "F"; } if($mois=="3"){ $mois_lettre = "M"; } if($mois=="4"){ $mois_lettre = "A"; } if($mois=="5"){ $mois_lettre = "M"; } if($mois=="6"){ $mois_lettre = "J"; } if($mois=="7"){ $mois_lettre = "J"; } if($mois=="8"){ $mois_lettre = "A"; } if($mois=="9"){ $mois_lettre = "S"; } if($mois=="10"){ $mois_lettre = "O"; } if($mois=="11"){ $mois_lettre = "N"; } if($mois=="12"){ $mois_lettre = "D"; } ImageString ($im, 0, $mois*30, $hauteurImage-10, $mois_lettre, $noir); } ImageLine ($im, 10, 10, 10, $hauteurImage-10, $noir); $visitesMax = $top; //maximum des colones for ($mois=1; $mois<=12; $mois++) { //dessinage des colones... if($visites[$mois-1]==$topmonth){ //si c'est la plus haute ou égale : Rouge $hauteurImageRectangle = round(($visites[$mois-1]*$hauteurImage)/$visitesMax); ImageFilledRectangle ($im, $mois*30-7, $hauteurImage-$hauteurImageRectangle, $mois*30+7, $hauteurImage-10, $rouge); ImageString ($im, 0, $mois*30-7, $hauteurImage-$hauteurImageRectangle-10, $visites[$mois-1], $rouge); }else{ //sinon Bleu $hauteurImageRectangle = round(($visites[$mois-1]*$hauteurImage)/$visitesMax); ImageFilledRectangle ($im, $mois*30-7, $hauteurImage-$hauteurImageRectangle, $mois*30+7, $hauteurImage-10, $bleu); ImageString ($im, 0, $mois*30-7, $hauteurImage-$hauteurImageRectangle-10, $visites[$mois-1], $rouge); } } ImagePng ($im); //affichage de l'image ... } mysql_close(); //fermeture de la connexion mysql ?>

Conclusion :


n'oubliez pas d'uploader le script sql sur votre serveur et ne mettez pas d'espace ou de commandes avant le script.

laissez vos commentaires.

bonne prog ;)

cordialement,
kevin (kegi@hotmail.com)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
164
Date d'inscription
jeudi 23 octobre 2003
Statut
Membre
Dernière intervention
25 août 2008

Bonjour,
bon, ça fait longtemps que j'ai fait cette source, c'est merdique,
je te conseil de t'en faire une en php5, ensuite, utilise le ajax pour rafraichir,
mais, avec un graphique à bandes, il est inutile de rafraichir aussi souvent, si tu as un graphique à ligne brisé, là, ça peut être intéressant.

mais... au 5 secondes, si tu as beaucoup de visiteurs, ça doit rallentir un peu ton serveur, non ?

Cordiallement,
Kevin
Messages postés
12
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
16 mai 2008

Merci coockiesch pour ton script .
je suis entrain de produire un script semblable. mais je veux que le graphique soit automatiquement mis à jours.
par exemple chaque 5 secondes se passe une actualisation.
j'ai essayé avec history.go(0) au niveau du html mais ça a foirrrrréééé.
Si quelqu'un peut m'aider...
Messages postés
164
Date d'inscription
jeudi 23 octobre 2003
Statut
Membre
Dernière intervention
25 août 2008

Tu as raison, j'était dans ma phase "je sais appuyer sur un bouton donc j'envoie n'importe quelle source bidon" un tableau aurait été mieux qu'une boucle ici... Merci quand même du commentaire ;)

Cordialement,
Kevin (kegi@hotmail.com)
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
36
c'est dégeu comme code :

#
# if($mois=="1"){ $mois_lettre = "J"; }
#
# if($mois=="2"){ $mois_lettre = "F"; }
#
# if($mois=="3"){ $mois_lettre = "M"; }
#
# if($mois=="4"){ $mois_lettre = "A"; }
#
# if($mois=="5"){ $mois_lettre = "M"; }
#
# if($mois=="6"){ $mois_lettre = "J"; }
#
# if($mois=="7"){ $mois_lettre = "J"; }
#
# if($mois=="8"){ $mois_lettre = "A"; }
#
# if($mois=="9"){ $mois_lettre = "S"; }
#
# if($mois=="10"){ $mois_lettre = "O"; }
#
# if($mois=="11"){ $mois_lettre = "N"; }
#
# if($mois=="12"){ $mois_lettre = "D"; }
#

pourquoi ne pas faire de boucles ?

t'as oublié tout les or die() pour est erreurs de connexions et de requettes !
Messages postés
164
Date d'inscription
jeudi 23 octobre 2003
Statut
Membre
Dernière intervention
25 août 2008

Salut,

tu doit afficher le fichier php en image...
ex:

Je te donne cette réponse en suposant que tu débute en php, si je me trompe et que l'erreur n'est pas à cette endroit, dit moi ;)

cordialement,
kevin (kegi@hotmail.com)
Afficher les 8 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.