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


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

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.