La Homepage de Floppy
v3.00 - Tutoriaux PHP + MySQL



Un compteur de download
(PHP4 uniquement)

 


Vous pouvez accèder directement à la partie qui vous intéresse en cliquant ci-dessous :
  • Paramétrage du tutorial
  • Information sur le tutorial
  • Création de la table dans MySQL
  • Création du fichier globale.inc.php
  • Création du fichier fonction.inc.php
  • Création du fichier redirect.php
  • Création du fichier de statistiques / d'affichage
  • Conclusion



  • Paramétrage du tutorial
     


    Ce tutorial utilise des Valeurs par défaut
    Si vous n'utilisez pas les mêmes valeurs, veuillez les changer et appuyer sur le bouton de validation des modifications
    Pour remettre un champ à sa valeur initiale, cliquez sur sa description
    Modification des paramètres
    Nom de la base de données  : 
    Nom de la table dans la base  : 
    Remarque : ces valeurs apparaitront dans le tutorial sous cette forme : lfa



    Information sur le tutorial
     


    Ce tutorial explique comment créer et mettre à jour une table de la base mySQL, permettant de gérer un compteur de download

    Pour illustrer le tutorial, nous allons créer
  • 1 table dans la base MySQL pour stocker les informations des compteurs
  • 1 fichier include contenant les variables globales au tutorial
  • 1 fichier include contenant les fonctions utilisées dans le tutorial
  • 1 fichier PHP de redirection
  • 1 page d'affichage des fichiers prévus pour le download (ici des .zip)
  • 5 fichiers .zip : fichier01.zip - fichier02.zip - fichier03.zip - fichier04.zip - fichier05.zip (ces fichiers sont également dans l'archive compteur_dl.zip)

    Vous pouvez vous rendre compte du résultat en cliquant ici : résultat du tutorial

    Au préalable, vous devez avoir installé Apache, PHP 4 et MySQL (cf. tutorial sur l'installation d'apache + PHP 4 + MySQL)
    Eventuellement, vous devez avoir installé phpMyAdmin (cf. tutorial sur l'installation de phpMyAdmin)
    Vous devez également avoir un minimum de connaissances sur les bases de données et le SQL (sujets non abordés dans ce tutorial)

    Pour tout complément d'information ou pour toutes questions, vous pouvez me laisser un mail ou poster un message dans le forum

    Merci de ne pas réutiliser ce tutorial sans citer mon site : La homepage de Floppy

    Bonne lecture...



    Création de la table dans MySQL
     


    Etape Description
    1 Si vous souhaitez récupérer le fichier de création de la table, il se trouve dans l'archive compteur_dl.zip (fichier compteur_dl.sql)
    2 Créez une base de donnée lfa à l'aide de phpMyAdmin
    3 Créez la table compteur_dl dans votre base de données lfa, à l'aide de phpMyAdmin
    Cette table est définie ainsi :
    #
    # Structure de la table 'compteur_dl'
    #
    CREATE TABLE compteur_dl (
        nomFichier varchar(255) NOT NULL,
        nbHit int(11) DEFAULT '0' NOT NULL,
        nomComplet varchar(255) NOT NULL,
        PRIMARY KEY (nomFichier),
        UNIQUE nomFichier (nomFichier)
    );
    #
    # Contenu de la table 'compteur_dl'
    #
    INSERT INTO compteur_dl VALUES ('fichier01.zip', '0', 'Premier fichier');
    INSERT INTO compteur_dl VALUES ('fichier02.zip', '0', 'Deuxième fichier');
    INSERT INTO compteur_dl VALUES ('fichier03.zip', '0', 'Troisième fichier');
    INSERT INTO compteur_dl VALUES ('fichier04.zip', '0', 'Quatrième fichier');
    INSERT INTO compteur_dl VALUES ('fichier05.zip', '0', 'Cinquième fichier');
    Explication : voici l'explication des champs de la table :
  • nomFile : clé primaire (unique) de la table, identifiant 1 enregistrement unique
  • nbHit : champ contenant le nombre de fois que le fichier a été 'downloadé'
  • nomComplet : description du fichier
    Remarque : on insère 5 enregistrement dans la table, correspondant chacun à un fichier
  • 4 Vous n'aurez plus besoin de phpMyAdmin pour la suite du tutorial




    Création du fichier globale.inc.php
     


    Etape Description
    1 Si vous souhaitez récupérer le fichier globale.inc.php, il se trouve dans l'archive compteur_dl.zip
    2 Créez un fichier d'include globale.inc.php, contenant les variables globales d'accès à votre base
    Ce fichier est prévu pour un usage en local et un usage sur le serveur de votre hébergeur (Free par exemple), d'où le test sur le HTTP_HOST
    Ce fichier contient ces lignes :
    <?
    if (getenv("HTTP_HOST") == "localhost") {
        // variables globales localhost
        $host = "localhost";
        $base = "lfa";
        $login = "";
        $pass = "";
    } else {
        // variables globales Free
        $host = "sql.free.fr";
        $base = "laurent.fagot";  // à changer
        $login = "laurent.fagot"; // à changer
        $pass = "xxxxxxxx";       // à changer
    }
    ?>
    Explication : voici l'explication des variables utilisées :
  • $host : nom du host (serveur) hébergeant la base
  • $base : nom de la base sur le serveur
  • $login : login pour accèder à la base
  • $pass : mot de passe pour accèder à la base
    Attention : selon si vous utilisez le fichier en local ou sur le serveur, vous devez faire des modifications :
  • Pour la partie variables globales localhost, il ne devrait pas y avoir de modification à effectuer (mise à part $base)
  • Pour la partie variables globales Free, il vous faut modifier les valeurs des lignes marquées par '// à changer' comme suit :
        - $base : votre identifiant de connexion sur Free
        - $login : votre identifiant de connexion sur Free (le même que $base)
        - $pass : votre mot de passe sur Free
    Remarque : si vous utilisez un autre fournisseur d'accès que Free, veuillez adapter les valeurs aux variables




  • Création du fichier fonction.inc.php
     


    Etape Description
    1 Si vous souhaitez récupérer le fichier fonction.inc.php, il se trouve dans l'archive compteur_dl.zip
    2 Créez un fichier d'include fonction.inc.php, contenant les fonctions d'accès à votre base
    Ce fichier est découpé en foncions (d'où son nom), et il ne contient que du code PHP
    Ajoutez donc la ligne en début de fichier :
    <?
    3 Fonction connecte() : connexion à la base
    Ajoutez ces lignes au fichier :
    function connecte() {
        global $base, $host, $login, $pass;
        $conn = mysql_connect($host, $login, $pass);
        mysql_select_db($base);
        return $conn;
    }
    Utilise les variables globales $base, $host, $login et $pass, définies dans le fichier globale.inc.php
    Retourne l'identifiant de la connecion ($conn)
    4 Fonction deconnecte($conn) : déconnexion de la base
    Ajoutez ces lignes au fichier :
    function deconnecte($conn) {
        mysql_close($conn);
    }
    Utilise la variable de connexion $conn, passée en argument et issue de la fonction connecte()
    5 Fonction updateCompteur_dl($fichier) : incrémente le compteur de download du fichier passé en paramètre ($fichier)
    Ajoutez ces lignes au fichier :
    function updateCompteur_dl($fichier) {
        $result = mysql_query("select * from compteur_dl where nomFichier = '$fichier'");
        $row = mysql_fetch_object($result);
        if ($row) {
            $cpt = $row->nbHit + 1;
            $query = "update compteur_dl set nbHit = $cpt where nomFichier = '$fichier'";
            mysql_query($query);
        }
        mysql_free_result($result);
    }
    Accède à l'enregistrement dans la table compteur_dl dont le champ nomFichier contient la valeur du paramètre $fichier
    Si l'enregistrement est trouvé, on récupère la valeur du champ nbHit, on l'incrémente (+1) et on le met à jour dans la table
    6 Fonction getCompteur_dl($fichier) : récupère le nombre de download du fichier passé en paramètre ($fichier)
    Ajoutez ces lignes au fichier :
    function getCompteur_dl($fichier) {
        $result = mysql_query("select * from compteur_dl where nomFichier = '$fichier'");
        $row = mysql_fetch_object($result);
        if ($row)
            $cpt = $row->nbHit;
        else
            $cpt = 0;
        mysql_free_result($result);
        return $cpt;
    }
    Accède à l'enregistrement dans la table compteur_dl dont le champ nomFichier contient la valeur du paramètre $fichier
    Si l'enregistrement est trouvé, on retoune la valeur du champ nbHit, sinon on retourne la valeur zéro (0)
    7 Fonction getNom($fichier) : récupère le nom complet du fichier passé en paramètre ($fichier)
    Ajoutez ces lignes au fichier :
    function getNom($fichier) {
        $result = mysql_query("select * from compteur_dl where nomFichier = '$fichier'");
        $row = mysql_fetch_object($result);
        if ($row)
            $res = $row->nomComplet;
        else
            $res = "";
        mysql_free_result($result);
        return $res;
    }
    Accède à l'enregistrement dans la table compteur_dl dont le champ nomFichier contient la valeur du paramètre $fichier
    Si l'enregistrement est trouvé, on retoune la valeur du champ nomComplet, sinon on retourne une chaine vide
    8 Fonction getTotalHitsCompteur_dl() : retourne le nombre total de hits, tous fichiers confondus
    Ajoutez ces lignes au fichier :
    function getTotalHitsCompteur_dl() {
        $result = mysql_query("select sum(nbHit) as total from compteur_dl");
        $row = mysql_fetch_object($result);
        if ($row)
            $total = $row->total;
        else
            $total = 0;
        mysql_free_result($result);
        return $total;
    }
    Accède à la somme des champs nbHit des enregistrements de la table compteur_dl
    Si une somme a pu être trouvée, on retourne cette somme, sinon on retourne la valeur zéro (0)
    9 Fermez le fichier PHP en ajoutant cette ligne en fin de fichier :
    ?>




    Création du fichier redirect.php
     


    Etape Description
    1 Si vous souhaitez récupérer le fichier redirect.php, il se trouve dans l'archive compteur_dl.zip
    2 Créez un fichier PHP redirect.php, contenant le code de redirection des fichiers
    Ce fichier comporte les lignes suivantes :
    <?
    include "globale.inc.php";
    include "fonction.inc.php";
    $conn = connecte();
    $fichier = $HTTP_GET_VARS["fichier"];
    updateCompteur_dl($fichier);
    deconnecte($conn);
    header("Location: " . $fichier);
    ?>
    Explication : on met à jour le compteur du nombre de download et on redirige la page (fontion PHP header)
    Ce fichier PHP nécessite qu'on lui passe en paramètre le nom du fichier ($fichier)




    Création du fichier de statistiques / d'affichage
     


    Etape Description
    1 Si vous souhaitez récupérer le fichier liste.php, il se trouve dans l'archive compteur_dl.zip
    2 Créez un fichier PHP liste.php, contenant le code des statistiques / d'affichage
    Ce fichier comporte les lignes suivantes :
    <?
    include "globale.inc.php";
    include "fonction.inc.php";
    $conn = connecte();
    ?>
    <html>
    <head>
    </head>
    <body>
    <font face="Trebuchet MS, Comic Sans MS" size=2>
    <center>
    <br>
    Ci-dessous se trouve les <b>fichiers à télécharger</b> du tutorial<br>
    (classés par ordre decroissant de récupération)
    <br><br><br>
    <table cellspacing=0>
    <tr>
        <td align=center bgcolor="08119a">
            <font face="Trebuchet MS, Comic Sans MS" size=2 color="ffffff">
            Rang
            </font>
        </td>
        <td align=center bgcolor="08119a">
            <font face="Trebuchet MS, Comic Sans MS" size=2 color="ffffff">
            Fichier
            </font>
        </td>
        <td align=center bgcolor="08119a">
            <font face="Trebuchet MS, Comic Sans MS" size=2 color="ffffff">
            Nombre de hits
            </font>
        </td>
    </tr>
    <?
    $total = getTotalHitsCompteur_dl();
    $result = mysql_query("select * from compteur_dl order by nbHit desc");
    $ligne = 1;
    $rang = 1;
    while ($row = mysql_fetch_object($result)) {
        $nom = $row->nomFichier;
        $cpt = $row->nbHit;
        $nomComplet = $row->nomComplet;
        ?>
        <tr>
            <td align=center bgcolor="<? if ($ligne > 0) echo "ffffff"; else echo "eeeeff"; ?>">
                <font face="Trebuchet MS, Comic Sans MS" size=2>
                <? echo $rang ?>
                </font>
            </td>
            <td align=center bgcolor="<? if ($ligne > 0) echo "ffffff"; else echo "eeeeff"; ?>">
                <font face="Trebuchet MS, Comic Sans MS" size=2>
                <a href="redirect.php?fichier=<? echo $nom ?>"><? if ($nomComplet == "") echo $nom; else echo $nomComplet; ?></a>
                </font>
            </td>
            <td align=center bgcolor="<? if ($ligne > 0) echo "ffffff"; else echo "eeeeff"; ?>">
                <font face="Trebuchet MS, Comic Sans MS" size=2>
                <? echo $cpt ?>
                </font>
            </td>
        </tr>
        <?
        $ligne = - $ligne;
        $rang++;
    }
    mysql_free_result($result);
    ?>
    <tr>
        <td align=center bgcolor="08119a" colspan=2>
            <font face="Trebuchet MS, Comic Sans MS" size=2 color="ffffff">
            <b>Total</b>
            </font>
        </td>
            <td align=center bgcolor="08119a">
            <font face="Trebuchet MS, Comic Sans MS" size=2 color="ffffff">
            <b><? echo $total ?></b>
            </font>
        </td>
    </tr>
    </table>
    </center>
    </font>
    <?
    deconnecte($conn);
    ?>
    </body>
    </html>
    Explication : voici les explications générales du fichier :
  • chargement du fichier globale.inc.php (include)
  • chargement du fichier fonction.inc.php (include)
  • connexion au serveur
  • création d'une table
  • affichage de la première ligne de la table (titre des colonnes)
  • récupération du nombre total de download
  • requête pour accèder à tous les enregistrements de la table (triés par nombre de hits decroissants)
  • accès à chaque enregistrement (1 par 1)
  • ajout d'une ligne par enregistrement
  • bouclage tant qu'il y a des enregistrements
  • affichage de la dernière ligne du tableau (le total)
  • deconnexion
  • 3 Remaque : lorsque vous récupérez un fichier en cliquant sur son lien, le compteur de download (nbHit) est mis à jour dans la base, mais le résultat n'apparait pas à l'écran. Pour faire apparaître ce résultat (incrémentation du compteur) à l'écran, il faut réactualiser la page de votre navigateur




    Conclusion
     


    Vous avez maintenant tous les exemples pour accèder et manipuler une base de données MySQL :
  • accès à la base de données (connexion et deconnexion)
  • accès à des enregistrement d'une table
  • mise à jour de champs dans une table...

    Résumé : voici la méthode résumé pour utiliser un compteur sur une page
  • ajoutez un enregistrement dans la table compteur_dl correspondant au fichier
  • au début du fichier,
        - chargez le fichier globale.inc.php (include)
        - chargez le fichier fonction.inc.php (include)
        - connectez-vous au serveur
        - lancez l'incrémentation du fichier souhaité (fichier redirect.php)
  • en fin de fichier, déconnectez-vous du serveur

    Rappels :

    Avant de commencer votre développement :
  • Lancez le serveur Apache
  • Lancez le serveur MySQL

    Pendant le développement :
  • Déposez vos sources dans la racine de votre site web () ou dans un sous-répertoire de cette racine

    Avant de quitter :
  • Arrêtez le serveur MySQL
  • Arrêtez le serveur Apache


    © Floppy /AD - 01/2003