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 :
Code : PHP | <?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 ?
Si c'est le cas, il serait préférable de revoir vos bases, non ?
Code : PHP | <?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é.
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 !
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.
Code : SQL | --
-- 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.
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 | <?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é !!!
?>
|