Des statistiques pour votre site !

Formation

En Ligne

Prix sur demande

Appeler le centre

Avez-vous besoin d'un coach de formation?

Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.

Description

  • Typologie

    Formation

  • Méthodologie

    En ligne

Grâce à cette formation vous pourrez acquérir les connaissances nécessaires qui vous permettrons d’ajouter des compétences à votre profil et obtenir de solides aptitude qui vous offriront de nombreuses opportunités professionnelles.

Questions / Réponses

Ajoutez votre question

Nos conseillers et autres utilisateurs pourront vous répondre

À qui souhaitez-vous addresser votre question?

Saisissez vos coordonnées pour recevoir une réponse

Nous ne publierons que votre nom et votre question

Les Avis

Le programme

Introduction du cours

Référencement, publicité, vous devez les maîtriser pour pouvoir mettre votre site en valeur. Mais, afin d'optimiser un maximum vos efforts, pourquoi ne pas faire des statistiques ?

Par statistiques, j'entends à la fois vos performances (visiteurs connectés, nombre maximum de visiteurs connectés, pages visitées) mais aussi l'impact qu'a votre publicité sur les utilisateurs (provenance, intérêt). Celles-ci vont vous permettre de pouvoir gérer vous-mêmes vos campagnes afin de faire connaître le mieux possible votre site !

Ce tutoriel est une sorte de cours / TP guidé, garni d'infos qui vont vous permettre de mettre pleins de statistiques partout sur votre site.

TP n°1 : combien ai-je de visites ?

Ce script devra se diviser en plusieurs parties :

  • nombre de visites ;

  • nombre de visites par jour (nombre moyen, nombre maximum).

Certaines parties du script ressemblent fortement à celles du tutoriel officiel de M@teo21.
J'en tiens compte mais sachez que ma correction sera différente. Vous pouvez néanmoins vous en inspirer si vous bloquez.
De plus les scripts seront en général plus complets car nous allons beaucoup travailler dessus.

Nombre de visites

Nous avons juste à stocker un nombre, celui du nombre de visites. En effet, ce script s'exécute sur toutes les pages de votre site. À chaque visite on devra incrémenter ce nombre.

Il est évident que nous n'allons pas stocker ce nombre dans une base de données SQL, la connexion est bien trop lente et si on devait se reconnecter à chaque ouverture de page pour afficher UN NOMBRE, le serveur ralentirait inutilement.

Un fichier contenant ce nombre semble donc parfaitement indiqué.
On rangera tous les scripts de ce tutoriel dans un dossier "stats".
Ce fichier s'appellera visiteurs.txt et il contiendra une seule ligne, le nombre de visiteurs. Pour faire marcher votre script à la première utilisation, on l'initialise en mettant comme valeur 0.

N'oubliez pas de régler le CHMOD à 777 !

Voici comment se divisera votre script :

  • ouverture en lecture et écriture du fichier visiteurs.txt ;

  • lecture de l'unique ligne du fichier contenant le nombre de visiteurs ;

  • incrémentation de ce nombre ;

  • écriture du nombre incrémenté dans le fichier ;

  • affichage du nombre incrémenté.

Nous utiliserons l'extension mysqli_ dans ce tutoriel.
Avant tout le script du tutoriel, on se connecte à notre base de données comme ceci :

<?php $connexion = mysqli_connect('host', 'username', 'password'); $db = mysqli_select_db($connexion, 'stats'); ?> Correction !

Avouez que ce n'était pas bien dur !
Comment ça vous n'avez pas réussi ? o_O
Si c'est le cas, il serait préférable de revoir vos bases, non ?

<?php $nb_visites = file_get_contents('data/pagesvues.txt'); $nb_visites++; file_put_contents('data/pagesvues.txt', $nb_visites); echo 'Nombre de pages vues : <strong>' . $nb_visites . '</strong><br/>'; ?>

Comme vous pouvez le voir, ce n'était pas compliqué. :p

On attaque le...

Nombre de visites par jour

Vous l'aurez compris, ce script est applicable pour les mois, les années, bref ici on prendra les jours car c'est le plus utilisé.
Votre mission (si vous l'acceptez ) sera d'obtenir les statistiques suivantes pour les afficher sur votre site :

  • nombre de visites aujourd'hui ;

  • garder en mémoire les nombres de visites de chaque jour ;

  • afficher le nombre maximum de visites en un jour suivi de la mention « Établi le ...» ;

  • faire la moyenne du nombre de visites par jour.

Eh oui, ça se complexifie. :-°

Il est tout à fait possible d'utiliser un fichier pour ce script, mais par mesure de confort et de facilité, nous allons faire ça avec une table SQL. C'est plus simple pour débuter.

Allez, cette fois je donne pas plus d'indications. ;)

Bonne chance !

Si vous avez du mal avec les données temporelles de MySQL, je vous conseille ce tutoriel : MySQL et les données temporelles.

1, 2, 3... Correction !

Alors, c'est plus compliqué que ça en a l'air hein ?

Euh...

Ne vous inquiétez pas si vous n'y êtes pas arrivé directement, servez-vous de la correction pour compléter votre code.

On commence par la structure de la table SQL que je vais utiliser.

-- -- Structure de la table `visites_jour` -- CREATE TABLE `visites_jour` ( `visites` mediumint(9) NOT NULL, `date` date NOT NULL );

On voit donc que c'est une table très basique, mais nous n'aurons pas besoin de plus.

Passons au code PHP.

<?php //ETAPE 1 - Affichage du nombre de visites d'aujourd'hui $retour_count = mysqli_query($connexion, 'SELECT COUNT(*) AS nbre_entrees FROM visites_jour WHERE date=CURRENT_DATE()');//On compte le nombre d'entrées pour aujourd'hui $donnees_count = mysqli_fetch_assoc($retour_count); //Fetch-array echo 'Pages vues aujourd\'hui : <strong>'; // On affiche tout de suite pour pas le retaper 2 fois après if ($donnees_count['nbre_entrees'] == 0) //Si la date d'aujourd'hui n'a pas encore été enregistrée (première visite de la journée) { mysqli_query($connexion, 'INSERT INTO visites_jour(visites, date) VALUES (1, CURRENT_DATE());'); //On rentre la date d'aujourd'hui et on marque 1 comme nombre de visites. echo '1'; //On affiche une visite car c'est la première visite de la journée } else { //Si la date a déjà été enregistrée $retour = mysqli_query($connexion, 'SELECT visites FROM visites_jour WHERE date=CURRENT_DATE()'); //On sélectionne l'entrée qui correspond à notre date $donnees = mysqli_fetch_assoc($retour); $visites = $donnees['visites'] + 1; //Incrémentation du nombre de visites mysqli_query($connexion, 'UPDATE visites_jour SET visites = visites + 1 WHERE date=CURRENT_DATE()'); //Update dans la base de données echo $visites; //Enfin, on affiche le nombre de visites d'aujourd'hui ! } echo '</strong></br/>'; //ETAPE 2 - Record des connectés par jour $retour_max = mysqli_query($connexion, 'SELECT visites, date FROM visites_jour ORDER BY visites DESC LIMIT 0, 1'); //On sélectionne l'entrée qui a le nombre visite le plus important $donnees_max = mysqli_fetch_assoc($retour_max); echo 'Record : <strong>' . $donnees_max['visites'] . '</strong> établi le <strong>' . $donnees_max['date'] . '</strong><br/>'; //On l'affiche ainsi que la date à laquelle le record a été établi //ETAPE 3 - Moyenne du nombre de visites par jour $total_visites = 0; //Nombre de visites /*(pour éviter les bugs on ne prendra pas le nombre du premier exercice, mais celui-ci reste utile pour être affiché sur toutes les pages car il est plus rapide, contrairement à $total_visites dont on ne se servira que pour la page de stats)*/ $total_jours = 0;//Nombre de jours enregistrés dans la base $total_visites = mysqli_fetch_assoc(mysqli_query($connexion, 'SELECT SUM(visites) FROM visites_jour AS total_visites')); $total_visites = $total visites['total visites']; $total_jours = mysqli_fetch_assoc(mysqli_query($connexion, 'SELECT COUNT(*) FROM visites_jour AS total_jours')); $total_jours = $total_jours['total_jours']; $moyenne = $total_visites/$total_jours; //on fait la moyenne echo 'Moyenne : <strong>' . $moyenne . '</strong> visiteurs par jour<br/>'; // On affiche ! Terminé !!! ?>

Vous pouvez ajouter un champ "id_page" dans la table qui vous permettra d'enregistrer le nom de la page qui a été vue et ainsi voir les pages qui intéressent le plus vos internautes. ;)

TP n°2 : qui est connecté sur mon site ?

Ce script se déroulera en trois parties :

  • affichage du nombre de visiteurs connectés ;

  • affichage du record du nombre de connectés suivi de la date où il a été établi ;

  • affichage de la liste des connectés avec leurs IP et la page qu'ils visitent (il est déconseillé d'afficher les IP des visiteurs publiquement, on préfèrera séparer cette partie dans le panel admin).

Affichage du nombre de visiteurs connectés

Mettons-nous d'accord sur un point : il est impossible de réellement savoir qui lit nos pages. En effet, même si l'internaute reste connecté pour lire un article de notre site pendant 1 heure, on ne le saura pas, on va donc faire des approximations.

Nous allons donc considérer que :

  • lorsqu'un internaute affiche notre page, il reste connecté dessus 5 minutes ;

  • si au bout des 5 minutes il n'a pas changé de page (donc s'il n'en a pas chargé une autre) on le supprime, il n'est plus connecté ;

  • nous allons identifier les connectés grâce à leur IP ;

  • quand l'internaute change de page, on recommence le décompte de 5 minutes.

Nous allons faire un truc intéressant : on va aussi mettre dans un champ la page où se trouve le visiteur, ce qui permettra de faire une liste des visiteurs connectés plus complète !

Je vous rappelle que l'IP d'un visiteur se récupère grâce à la variable Superglobale $_SERVER['REMOTE_ADDR'] . Pour la convertir en nombre, utilisez la fonction ip2long(). Pour convertir ce nombre en IP, utilisez long2ip(). Cela facilitera l'enregistrement dans la base de données.

Si vous bloquez, vous pouvez aller voir ce TP qui est (très) similaire et qui vous donnera quelques indications en plus. ;)

3, 2, 1, correction !

Structure de la table 'connectes' :

CREATE TABLE IF NOT EXISTS `connectes` ( `ip` int(12) NOT NULL, `timestamp` int(11) NOT NULL, `page` varchar(50) NOT NULL );

Script PHP :

<?php //On prend l'adresse de la page à laquelle on enlève le \ du début (1er caractère) : $page = substr($_SERVER['PHP_SELF'], 1); // On stocke dans une variable le timestamp qu'il était il y a 5 minutes : $timestamp_5min = time() - (60 * 5); // 60 * 5 = nombre de secondes écoulées en 5 minutes //On commence par virer les entrées trop vieilles (+ de 5 minutes) mysqli_query($connexion, 'DELETE FROM connectes WHERE timestamp < ' . $timestamp_5min); $retour = mysqli_query($connexion, 'SELECT COUNT(*) AS nb_connectes FROM connectes WHERE ip=\'' . ip2long($_SERVER['REMOTE_ADDR']) . '\''); $donnees = mysqli_fetch_assoc($retour); //On regarde si le visiteur est déjà dans la table if ($donnees['nb_connectes'] == 0) // Si il n'y est pas, on l'ajoute { mysqli_query($connexion, 'INSERT INTO connectes(ip, timestamp, page) VALUES(\'' . ip2long($_SERVER['REMOTE_ADDR']) . '\', NOW()), \'' . $page . '\''); } else // Sinon, on remet le décompte de 5 minutes à 0 { mysqli_query($connexion, 'UPDATE connectes SET timestamp=NOW(), page=\'' . $page . '\' WHERE ip=\'' . ip2long($_SERVER['REMOTE_ADDR']) . '\''); } //Enfin, on calcule le nombre total d'entrées puis on l'affiche ! $retour = mysqli_query($connexion, 'SELECT COUNT(*) AS nb_connectes FROM connectes'); $donnees = mysqli_fetch_assoc($retour); $visiteurs_connectes = $donnees['nb_connectes']; // Affichage echo 'Visiteurs connectés : <strong>' . $donnees['nb_connectes'] . '</strong><br/>'; ?> Affichage du record de connectés

Ce script va directement à la suite du premier vu qu'on aura besoin de la variable $visiteurs_connectes.

Ce script est très simple, on doit stocker deux nombres :

  • le record ;

  • la date à laquelle il a été établi.

Inutile de faire une table rien que pour ça, on va donc utiliser...
... les fichiers !

Comment allons-nous faire ?

On va organiser les données du fichier en une ligne, contenant le record suivi de la date.
Le fichier se situe dans le répertoire de nos statistiques : stats/records.txt.
On l'initialise en mettant "0 0/0/0" dedans, puis on met son CHMOD à 777.

Pour séparer les données de vos chaînes de caractères, il existe la fonction explode() qui va vous permettre de couper en plusieurs morceaux le contenu de votre fichier.

Correction ?<?php $f_records = fopen('records.txt', 'r+'); //On ouvre le fichier $dernierRecord = fgets($f_records); //On prend sa première ligne $dernierRecord = explode(' ', $dernierRecord); //Je vous avais dit de regarder la fonction explode ! //Elle va permettre de séparer notre fichier en 2 parties : //Le record (0) dans $dernierRecord[0] et la date (0/0/0) dans $dernierRecord[1] echo 'Record du nombre de connectés : <strong>'; //On le marque tout de suite //Ici on va avoir besoin de la variable $visiteurs_connectes de l'exercice précédent if ($visiteurs_connectes > $dernierRecord[0]) //Si le nombre de connecté est plus important que le record actuel { rewind($f_records); //On "rebobine " le fichier $ligne = $visiteurs_connectes . ' ' . date('d/m/Y'); fwrite($f_records, $ligne); //On écrit la ligne sous la forme fixée au départ echo $visiteurs_connectes . '</strong> établi le <strong>' . date('d/m/Y'); } else { //sinon, on affiche le record du fichier. echo $dernierRecord[0] . '</strong> établi le <strong>' . $dernierRecord[1]; } // On ferme la balise puis le fichier echo '</strong><br/>'; fclose($f_records); ?> Affichage de la liste des connectés

Script archi-simple, on va juste afficher :

  • l'IP du visiteur ;

  • la page qu'il visite.

Euh... Hum... Correction :p<?php echo '<strong>Liste des connectés : </strong>(' . $visiteurs_connectes . ')<br/>'; $retour = mysqli_query($connexion, 'SELECT ip, page FROM connectes'); while ($donnees = mysqli_fetch_assoc($retour)) { echo long2ip($donnees['ip']) . ' : ' . $donnees['page'] . '<br />'; } ?>

Pas trop dur ? >_

Eh bah dis donc ! Ça c'est du beau boulot !

Eh oui, vous avez vu ce qu'on est capable de faire ? Ces parties 1 et 2 n'étaient pas si faciles que ça finalement. o_O

Allez, contemplez ce magnifique résultat (le mien est un peu plus sophistiqué, mais bon, c'est du pareil au...

Appeler le centre

Avez-vous besoin d'un coach de formation?

Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.

Des statistiques pour votre site !

Prix sur demande