IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Application de suivi d'activité


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de jack554
    Inscrit en
    Février 2003
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 192
    Points : 106
    Points
    106
    Par défaut Application de suivi d'activité
    Je voudrais réaliser un petit exercice en vue d'une application plus importante de suivi d'activité.
    Énoncé du problème :
    Soit une page Web avec un bouton "Cliquer ici" (jusque là, ça va !)
    L'utilisateur doit cliquer tous les jours sur ce bouton.
    S'il ne le fait pas pendant, mettons, 5 jours de suite, un mail de rappel lui est envoyé, et le compteur de "jours non cliqués" repart à zéro.

    Cela suppose donc un script quotidien genre "cron" tournant sur le serveur et qui :
    - incrémente un compteur de 1 chaque jour
    - teste si ce compteur est supérieur à 4, alors il envoie le mail et remet le compteur à 0
    Un genre comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?php
     
      $monfichier = fopen('compteur.txt', 'r+');   // On ouvre le fichier
      $nbr = fgets($monfichier);                   // On lit la première ligne (compteur)
      $nbr += 1;                                   // On augmente de 1 ce compteur
      fseek($monfichier, 0);                       // On remet le curseur au début du fichier
      fputs($monfichier, $nbr);                    // On écrit le nouveau compteur
     
      // Si le compteur est >4 on envoie un mail
      if ($nbr>4) {
        ini_set( 'display_errors', 1 );
        error_reporting( E_ALL );
        $from = "test@domaine.ovh";
        $to = "destinataire@mail.com";
        $subject = "Vérification PHP mail";
        $message = "ALERTE ***  Vous n'avez pas cliqué depuis 5 jours.";
        $headers = "From:" . $from;
        mail($to,$subject,$message, $headers);
        echo "Le mail a été envoyé.";
     
        $nbr = 0;                                  // On remet le compteur à 0
        fseek($monfichier, 0);                     // On remet le curseur au début du fichier
        fputs($monfichier, $nbr);                  // On écrit le nouveau compteur
      }
     
      // Quand on a fini de l'utiliser, on ferme le fichier
      fclose($monfichier);
      echo '<p>Compteur actuel : ' . $nbr . ' </p>';
    ?>
    Ça, ça fonctionne :-)

    Il me manque donc juste un processus qui remet le compteur à 0 lorsque l'utilisateur clique sur le bouton de la page Web, et là je n'y arrive pas, j'ai essayé en PHP mais impossible puisque exécuté sur le serveur, Javascript pareil, impossible d'affecter une fonction JS à un bouton HTML, ou je ne sais pas faire.

    Merci d'avance pour vos idées et suggestions.
    Jack.

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Si je devais faire quelque chose comme ça, je m'y prendrai autrement. Des suggestions:
    • Pour le coté "persistance des données", j'utiliserai plutôt une base de données qu'un fichier.
    • Pas la peine d'incrémenter quoi que ce soit, il suffit de stocker la date du clique (ou du mail) et de la comparer à la date courante.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Membre régulier Avatar de jack554
    Inscrit en
    Février 2003
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 192
    Points : 106
    Points
    106
    Par défaut
    Oui CosmoKnacki tu as raison, merci de l'idée, j'ai bien sûr une base MySQL sur mon hébergement OVH.

    Bon, je ne sais pas du tout manipuler une base de données depuis une page Web, mais ça, ça s'apprend, je m'en doute
    Je vais chercher dans cette direction.

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Dans tes recherches, fait attention à ne pas te tourner vers des tutoriels trop anciens qui utilisent les fonctions mysql_ (cette extension est obsolète depuis au moins 10 ans et a été enlevée des dernières versions de PHP), préfère leur des tutoriels récents utilisant l'extension PDO.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  5. #5
    Membre régulier Avatar de jack554
    Inscrit en
    Février 2003
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 192
    Points : 106
    Points
    106
    Par défaut
    Ok, merci du conseil.

    En fait il est facile de trouver des tutoriels sur MySQL, sur PHP, sur HTML, sur le shell Linux, séparément ; mais j'ai un peu de mal à trouver quelque chose qui me donnerait des exemples mélangeant les disciplines, par exemple :

    - exécuter des commandes de bases de données MySQL depuis un shell Linux
    - exécuter des commandes de bases de données depuis une page Web (mon fameux bouton qui mémorise dans une table de la base le fait qu'on ait appuyé dessus )

    ...

  6. #6
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    C'est PHP qui fait la "jointure" entre tout ça: lorsque tu cliques sur le bouton de page html, l'information est envoyé à un script PHP qui interrogera la base de données et la mettra à jour. Ce coté là, c'est de la gestion de formulaire (même s'il n'y a qu'un bouton) et c'est traité en long en large et en travers sur le web. Donc l'ensemble PHP, MySQL, HTML, tu trouveras.

    Pour ce qui est de la tâche CRON: le script qui va vérifier que le délai n'est pas dépassé peut être écrit avec n'importe quel langage dont PHP, car PHP est interprété par un module du serveur apache certes, mais il y a un autre interpréteur PHP (PHP CLI: Command Line Interface) qui lui peut exécuter des scripts indépendamment du serveur (donc sans avoir à taper une url dans son navigateur). Basiquement, il faut juste ajouter une petite entête pour indiquer le chemin de l'interpréteur du script et rendre le fichier exécutable via la commande shell chmod +x monscript.php. Ça ressemble à ça:
    Code monscript.php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #!/usr/bin/php7.4
    <?php
    echo "toto";

    Reste à savoir si ton hébergement te donne accès au shell et te permet de régler des tâches CRON. (car sur un hébergement mutualisé basique, tu peux oublier.)
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  7. #7
    Membre régulier Avatar de jack554
    Inscrit en
    Février 2003
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 192
    Points : 106
    Points
    106
    Par défaut
    Merci et re-merci, grâce à ton idée j'avance à la vitesse "V".

    J'ai écrit deux scripts PHP :

    - un qui incrémente un compteur dans une table de ma base (créée avec PHPMyAdmin) : il sera exécuté tous les jours. J'ai vu que sur mon compte OVH on pouvait créer des crons, et j'ai testé le script depuis mon navigateur, ça fonctionne. Il me restera à inclure le test "si compteur >5 envoyer un mail". Actuellement il est comme ça (mais ça ne doit pas être très intéressant pour toi !):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php
     
    // Script exécuté chaque jour : faire +1 dans le compteur de la table t_compteur
     
      try {
      // On se connecte à MySQL
       $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
      }
      catch(Exception $e) {
        die('Erreur : '.$e->getMessage());                       // Si erreur, stop
      }
     
      // Si tout va bien, on peut continuer
     
      $bdd->exec('UPDATE t_compteur SET compteur = compteur+1'); // On incrémente de 1 le compteur
      $reponse = $bdd->query('SELECT * FROM t_compteur');        // On récupère le compteur
      while ($donnees = $reponse->fetch()) {                     // On affiche chaque entrée une à une
        echo 'msg_cron : ' . $donnees['compteur'] . ' ===';
      }
     
      $reponse->closeCursor();                                   // Termine le traitement de la requête
    ?>
    - un qui remet à 0 ce compteur : il sera exécuté à l'appui sur un bouton, donc je dois créer un formulaire, tâche suivante pour moi ;-)

    Je laisse quelques jours ce fil ouvert jusqu'à ce que j'arrive à terminer (c'est bien parti), je le cloturerai après.
    :-)

  8. #8
    Membre régulier Avatar de jack554
    Inscrit en
    Février 2003
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 192
    Points : 106
    Points
    106
    Par défaut
    Alors là je ne comprend pas ce qui se passe.
    J'ai trouvé un exemple de script de formulaire avec exécution de commande SQL avec PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <html>
      <head>
        <meta charset="utf-8">
      </head>
      <body>
        <h1>Ajouter un contact</h1>
        <form method="post">
          <label>Champ bidon</label> <input type="text" name="bidon">
          <br><br>
          <input type="submit" value="Cliquer">
        </form>
        <p>
        <?php
        if (isset($_POST['bidon'])) {
          try {
          // On se connecte à MySQL
          $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
          }
     
          catch(Exception $e) {
            die('Erreur : '.$e->getMessage());
          }
          $bdd->exec('UPDATE t_compteur SET compteur = 0');
          $reponse->closeCursor();
         }
     
        ?>
        </p>
      </body>
    </html>
    A l'exécution, des lignes de code sont recopiées ! Comme ça :

    Nom : bug.jpg
Affichages : 99
Taille : 21,9 Ko

  9. #9
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 453
    Points : 43 106
    Points
    43 106
    Par défaut
    Reste à savoir si ton hébergement te donne accès au shell et te permet de régler des tâches CRON. (car sur un hébergement mutualisé basique, tu peux oublie
    Avec OVH, tu peux utiliser CRON en mutualisé, mais il se programme depuis le manager.

    Mais comme ça a été dit, j'utiliserais plutôt la comparaison avec la date stockée.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  10. #10
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Citation Envoyé par jack554
    A l'exécution, des lignes de code sont recopiées !
    Est-ce que ton fichier a bien l'extension .php?
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  11. #11
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    Avec OVH, tu peux utiliser CRON en mutualisé, mais il se programme depuis le manager.
    Au temps pour moi.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  12. #12
    Membre régulier Avatar de jack554
    Inscrit en
    Février 2003
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 192
    Points : 106
    Points
    106
    Par défaut
    CosmoKnacki : Oups ... En effet quand un fichier contient du PHP, c'est mieux de lui donner l'extension PHP !
    Merci, ça fonctionne, mon clic sur le bouton du mini-formulaire remet bien le compteur à 0.

    chrtophe : Merci, oui, j'ai programmé mon "cron" depuis le Manager, résultat demain ;-)
    J'analyserai la version avec comparaison de date plus tard, mais c'est une piste intéressante en effet.

    En tout cas merci à vous deux, je crois que j'ai (enfin) compris les interactions entre HTML, scripts PHP et MySQL !

    Comme dit plus haut, je finalise tout ça et je ferme la discussion dans quelques jours.
    Bon dimanche !

  13. #13
    Membre régulier Avatar de jack554
    Inscrit en
    Février 2003
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 192
    Points : 106
    Points
    106
    Par défaut
    Bonjour,

    Je n'ai pas dû placer mon shell pour le cron au bon endroit, résultat ce matin :

    [2020-08-09 23:13:02] ## OVH ## START - 2020-08-09 23:13:02.223806 executing: /usr/local/php7.3/bin/php /homez.83/penseeduhn/msgu_cron.php
    [2020-08-09 23:13:02] Could not open input file: /homez.83/penseeduhn/msgu_cron.php
    [2020-08-09 23:13:02]
    [2020-08-09 23:13:02] ## OVH ## END - 2020-08-09 23:13:02.297358 exitcode: 1
    Pourtant je l'ai mis directement dans le répertoire www ("penseeduhn" est le nom de ma base de données et "msgu_cron.php le nom de mon shell à exécuter tous les jours)

    Bon, si vous ne savez pas, je vais envoyer un ticket à OVH :-)

  14. #14
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 453
    Points : 43 106
    Points
    43 106
    Par défaut
    le dossier /home.83/penseeduhn n'est pas dans www. Tes fichiers php standards doivent être dans qq chose comme /home.83/www.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  15. #15
    Membre régulier Avatar de jack554
    Inscrit en
    Février 2003
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 192
    Points : 106
    Points
    106
    Par défaut
    Bonjour,

    Chrtophe : Merci. En fait il suffisait que j'indique dans le chemin du cron à exécuter : www/msgu_cron.php.
    Ça a fonctionné.

    Je continue avec l'envoi de mail, mais si ça ne fonctionne pas j'ouvrirai un autre fil, ce n'est pas le même sujet.

    Merci à tous et bonne journée,
    Jack

  16. #16
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 453
    Points : 43 106
    Points
    43 106
    Par défaut
    Vu que ton script ne doit pas être exécuté par le site web, places plutôt celui-ci hors de www.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/07/2020, 09h21
  2. [UC] suivi d'activité
    Par hicham.gi dans le forum Cas d'utilisation
    Réponses: 24
    Dernier message: 06/03/2009, 11h56
  3. Réponses: 11
    Dernier message: 22/08/2007, 11h46
  4. Réponses: 3
    Dernier message: 01/08/2006, 15h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo