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

0/5 (8 avis)

Vue 21 780 fois - Téléchargée 2 131 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
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
16 mai 2005 à 11:35
Salut!
Pas tout le temps de regarder mais deux petites remarques: Pour commencer, il faut tester les retours mysql ( connextion, sélection de base, query, ... )

if(!@mysql_connect($host,$user,$pass) || !@mysql_select_db("Base"))
die('Erreur');
Idem pour les requêtes

Pour les mois, tu peux faire:
$mois_lettres = array('J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D');
$mois_lettre = $mois_lettres[ $mois - 1];

Autrement, ca à l'air sympa.

@++

R@f
kegi Messages postés 164 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 25 août 2008
17 mai 2005 à 01:17
Merci pour ton commentaire constructif ;)

cordialement,
kegi@hotmail.com
oki972 Messages postés 35 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 11 octobre 2007
18 oct. 2005 à 22:28
salut!!
J'utilise ta source pour essayer de faire un petit module de statistiques. Je prends chaque mois de l'année et je calcule ce que j'ai dépensé pour mes interventions.
Malheureusement le graphique ne sort pas, j'cherche mais je trouve pas, peut-on m'aider?

Voici ma source :

<?php
header ("Content-type: image/png"); //on entre en mode image

include("../../Mysql/connexion.php");
function nbjour($m,$a)
{
if(($a%4)==0)
{
$fev=29;
}
else
{
$fev=28;
}
$mois = array(0,31,$fev,31,30,31,30,31,31,30,31,30,31);
for($x=1;$x<13;$x++)
{
if($m == $x)
{
return $mois[$x];
}
}
}

$m = date("m"); //numéro du mois
$a = date("Y"); //année

//Pour tous les mois de l'année on va calculer le cout engendrer !
for($i=1;$i<=12;$i++){
$nbJours_sql2 = nbjour($i,$a);
if ($i<10) $m = "0".$i; else $m=$i;
$premierjour_sql = "$a"."-"."$m"."-"."01";
$dernierjour_sql = "$a"."-"."$m"."-"."$nbJours_sql2";
//maintenant qu'on les dates concernées pour chaque mois on peut faire notre requete
$req0 mysql_query("SELECT * from dbinterventions p ,dbplanning q WHERE p.int_ID q.pla_IDIntervention AND p.int_Date>='$premierjour_sql' and p.int_Date<='$dernierjour_sql'");
//
$total = 0;
$cout = 0;
while ($rs = mysql_fetch_object($req0)) {
//
$heuredeb = $rs->pla_HeureDebut;
$heurefin = $rs->pla_HeureFin;
$heuredeb = substr($heuredeb,0,5);
$heuredeb = str_replace(':','',$heuredeb);
$heurefin = substr($heurefin,0,5);
$heurefin = str_replace(':','',$heurefin);

if ($heurefin!=0) {
if ($heurefin<=$heuredeb) {
//Etape 1
$hfin = substr($heurefin,0,2);
$mfin = substr($heurefin,2,2);
$heurefin = $hfin+($mfin/60);
$tampon_duree = $heurefin - $minuit;
//Etape 2
$minuit2=24;
$hdeb = substr($heuredeb,0,2);
$mdeb = substr($heuredeb,2,2);
$heuredeb = $hdeb+($mdeb/60);
$tamponduree2 = $minuit2 - $heuredeb;
//Totalisons...
$duree = $tampon_duree+$tamponduree2;
$cout = $rs->pla_Coefficient * $rs->pla_TauxHoraire * round($duree,2);
}else{
$hdeb = substr($heuredeb,0,2);
$mdeb = substr($heuredeb,2,2);
$hfin = substr($heurefin,0,2);
$mfin = substr($heurefin,2,2);
//Maintenant on transforme les deux o format décimal ..
//Pour cela, on divise les minutes par 60 et on arrondi au centième
$heuredeb = $hdeb+($mdeb/60);
$heurefin = $hfin+($mfin/60);
$duree = $heurefin-$heuredeb;
//Cout
$cout = $rs->pla_Coefficient * $rs->pla_TauxHoraire * round($duree,2);
}
}else{
$duree=0;
//Cout
$cout = $rs->pla_Coefficient * $rs->pla_TauxHoraire * round($duree,2);
}
//echo $cout;
$total = $total + $cout;
}
//
$mois[$i] = round($total,2);
// exit;

}

$top = max($mois);

//dessin du graphique...

$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;


$largeurImage = 700; //largeur du graphique
$hauteurImage = 300; //hauteur du graphique

$topmonth = $top; //Pour mettre la colone la plus haute en rouge

$top = ($top + 1000); //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

?>
kegi Messages postés 164 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 25 août 2008
4 nov. 2005 à 04:47
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)
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
5 févr. 2006 à 14:37
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 !

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.