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 :

Amélioration script de saisie [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    psl
    psl est déconnecté
    Membre actif
    Avatar de psl
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 98
    Points : 242
    Points
    242
    Par défaut Amélioration script de saisie
    Bonjour,
    Je suis un grand débutant en script php mais j'essaye de me soigner.
    Je dispose d'organes de commande de lumières qui s'allument avec le coucher solaire civil et qui s’éteignent à une certaine heure.
    Le micro-contrôleur de pilotage ne dispose pas d'IHM (interface homme machine) et la mise à jour de l'horloge temps réel (RTC) se fait via le serveur web embarqué.
    Actuellement la mise à jour du RTC se fait via une ligne de commande CURL.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    curl http://xxx.yyy.zzz.k/cde/11-JJ-MM-AAAA-HH-MM-SS-D
    Pour faciliter la mise à jour RTC, j'utilise un script représenté sur l'image jointe.
    Nom : Capture du 2018-03-03 21-22-19.png
Affichages : 91
Taille : 17,3 Ko
    Le script fait le job mais à plusieurs imperfections, à savoir:
    - le contrôle de validité de la date se fait à posteriori,
    - les choix jour, mois, année, heure, minute et seconde ne sont pas persistants.
    Actuellement, la saisie se fait dans un formulaire avec 6 selects et un submit (Mise à jour RTC).
    Mon souhait est de faire la saisie dans l'ordre suivant:
    - année, mois, jour, heure, minute puis seconde. (jusque la pas de problèmes)
    - après les sélections année et mois (et avant l'action sur le bouton "Mise à jour RTC") de définir la borne maxi des jours (28, 29, 30 ou 31).
    Je crois que j'ai atteint la limite actuelle des mes connaissances php pour cette opération.
    Une piste de recherche pour faire ce type de calcul m'aiderait bien. (du genre onchange() déclencher un fonction php)
    Merci pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 330
    Points : 15 673
    Points
    15 673
    Par défaut
    pour simplifier la saisie de la date, vous pouvez utiliser une aide JavaScript comme ce calendrier par exemple :
    http://jqueryui.com/datepicker/

    mais avant de partir dans cette voie, il faudrait peut-être revenir en arrière et reparler de la fonctionnalité.
    Il s'agit bien de remettre à l'heure l'horloge du microcontrôleur ?
    dans ce cas il serait encore plus pratique que l'heure de l'ordinateur soit automatiquement récupérée au lieu de la saisir manuellement.

    et vous parlez aussi de contrôle, est ce que le microcontrôleur fourni un URL qui permet de voir l'heure actuellement configurée ?

  3. #3
    psl
    psl est déconnecté
    Membre actif
    Avatar de psl
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 98
    Points : 242
    Points
    242
    Par défaut
    Bonjour,
    Merci pour la réponse.
    Citation Envoyé par mathieu Voir le message
    pour simplifier la saisie de la date, vous pouvez utiliser une aide JavaScript comme ce calendrier par exemple :
    http://jqueryui.com/datepicker/
    Comme je suis têtu, j'avais exclu l'utilisation de Javascript.
    Mais cela reste valable uniquement tant que l'on n'a pas changé d'avis

    Citation Envoyé par mathieu Voir le message
    mais avant de partir dans cette voie, il faudrait peut-être revenir en arrière et reparler de la fonctionnalité.
    Il s'agit bien de remettre à l'heure l'horloge du microcontrôleur ?
    dans ce cas il serait encore plus pratique que l'heure de l'ordinateur soit automatiquement récupérée au lieu de la saisir manuellement.
    C'est bien cela dans les grandes lignes. Le micro-contrôleur est un ESP8266 embarquant, entre autre, des fonctionnalités wifi et le RTC est un DS3232 piloté par un bus I2C.
    Au départ, j'avais envisagé de passer, pour la mise à jour, par un serveur NTP
    Mais pour des raisons de sécurité les différents modules de contrôle et/ou de commande (régulation de température, commande des volets, simulation de présence et autres chinoiseries ...) sont sur un réseau wifi complètement déconnecté de la toile.
    Au stade actuel, il y a 47 modules sur le wifi "domotique".

    Citation Envoyé par mathieu Voir le message
    et vous parlez aussi de contrôle, est ce que le microcontrôleur fourni un URL qui permet de voir l'heure actuellement configurée ?
    Il est possible, via la commande qui va bien, d'obtenir du serveur embarqué:
    - HH:MM:SS,
    -JJ/MM/AAAA,
    ou
    - JJ/MM/AAAA-HH:MM:SS

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 330
    Points : 15 673
    Points
    15 673
    Par défaut
    je n'appelle pas ça être têtu d'éviter le JavaScript, c'est juste être conscient que JavaScript côté client peut poser des problèmes d'utilisation suivant le navigateur utilisé.
    et c'est pour cette raison que je fais le maximum pour que mon code fonctionne sans JavaScript et j'en ajoute quand ça peut apporter une vraie aide.

    mais dans votre cas, il est surement possible d'automatiser tout ça avec juste un simple bouton "mettre à l'heure" à cliquer donc plus besoin de JavaScript

    Citation Envoyé par psl Voir le message
    via la commande qui va bien
    et elle va bien à quel endroit ?
    si elle n'est pas timide et qu'elle est d'accord de me donner son adresse, je peux essayer de vous aider à automatiser tout ça.

  5. #5
    psl
    psl est déconnecté
    Membre actif
    Avatar de psl
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 98
    Points : 242
    Points
    242
    Par défaut
    Re,
    Merci pour le ton et la forme de réponse
    J'adore
    Si j'envoie au serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    curl http://xxx.yyy.zzz.k/cde/06
    Réponse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JJ/MM/AAAA
    HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nJJ/MM/AAAA</html>\n
    Si j'envoie au serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    curl http://xxx.yyy.zzz.k/cde/07
    Réponse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    HH:MM:SS
    HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nHH:MM:SS</html>\n
    Si j'envoie au serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    curl http://xxx.yyy.zzz.k/cde/08
    Réponse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JJ/MM/AAAA-HH:MM:SS
    HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nJJ/MM/AAAA-HH:MM:SS</html>\n
    Il va de soi que le serveur peut fournir tout autre information. Je me sens beaucoup plus à l'aise côté embarqué en C et/ou C++.
    [edit]
    Ajout de la réponse complète généré par le serveur

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 330
    Points : 15 673
    Points
    15 673
    Par défaut
    en utilisant "file_get_contents" pour faire des requêtes HTTP, ça donne quelque chose comme le code suivant.

    il y a juste quelque chose à préciser c'est le format de la dernière valeur "D" pour définir le jour. suivant le format demandé, il faudra remplacer le "N" à la fin de la ligne 5
    https://secure.php.net/manual/fr/function.date.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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    <?php
     
    if (isset($_POST["mettreALHeure"])) {
     
        $heureFormatee = date("d-m-Y-H-i-s-N");
     
        lancerCommande("cde/11-$heureFormatee");
     
     
        // redirection
        header("Location: {$_SERVER["REQUEST_URI"]}");
        exit();
     
    }
     
     
    // récupération de l'heure du serveur
     
    $heureServeur = lancerCommande("cde/08");
     
    $strp = strptime(trim(strip_tags($heureServeur)), "%d/%m/%Y-%H:%M:%S");
     
    $timestampServeur = mktime(
          $strp["tm_hour"]
        , $strp["tm_min"]
        , $strp["tm_sec"]
        , $strp["tm_mon"] + 1
        , $strp["tm_mday"]
        , $strp["tm_year"] + 1900
    );
     
     
    // heure actuelle
    $heure = time();
     
     
    // affichage
     
    ?>
    <html>
    <head>
         <meta charset="UTF-8"/>
         <title>mise à l'heure</title>
    </head>
    <body>
     
        <p>
            Réponse brute*: 
            <pre style="border : 2px dashed #000; padding : 0.5em;"><?php
                echo htmlspecialchars($heureServeur);
            ?></pre>
        </p>
     
        <p>
            Heure serveur*: 
            <br/>
            <?php echo htmlspecialchars(date("d/m/Y H:i:s", $timestampServeur));?>
        </p>
     
        <p>
            Heure ordinateur*: 
            <br/>
            <?php echo htmlspecialchars(date("d/m/Y H:i:s", $heure));?>
        </p>
     
     
        <?php if (abs($heure - $timestampServeur) > 1) { // considéré à l'heure avec 1 seconde de décalage ?>
     
            <form action="" method="POST">
                <input type="submit" name="mettreALHeure" value="Mettre à l'heure"/>
            </form>
     
        <?php }?>
     
    </body>
    </html>
     
    <?php
     
     
    function lancerCommande($commande) {
     
        $baseURL = "https://serveur";
     
        $resultat = file_get_contents("$baseURL/$commande");
     
        return $resultat;
     
    }

  7. #7
    psl
    psl est déconnecté
    Membre actif
    Avatar de psl
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 98
    Points : 242
    Points
    242
    Par défaut
    Re,
    Merci pour l'aide, je vais tester de ce pas.
    Citation Envoyé par mathieu Voir le message
    il y a juste quelque chose à préciser c'est le format de la dernière valeur "D" pour définir le jour. suivant le format demandé,il faudra remplacer le "N" à la fin de la ligne 5
    https://secure.php.net/manual/fr/function.date.php
    Concernant D, il s'agit du jour de la semaine (numérique) utilisé pour la programmation du RTC (1=Lundi .... 7=dimanche).

  8. #8
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 330
    Points : 15 673
    Points
    15 673
    Par défaut
    je viens de modifier la ligne 21 pour gérer les balises de la réponse.

  9. #9
    psl
    psl est déconnecté
    Membre actif
    Avatar de psl
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 98
    Points : 242
    Points
    242
    Par défaut
    Merci Mathieu,
    Je viens de survoler le code et je dois admettre que mes faibles connaissances en php sont mises à rude épreuve
    Je vais étudier tout cela d'un peu plus prêt pour comprendre le déroulement du script.
    Je reviens pour vous faire part du résultat de mes tests.

  10. #10
    psl
    psl est déconnecté
    Membre actif
    Avatar de psl
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 98
    Points : 242
    Points
    242
    Par défaut
    Re,
    Premier essai = cela ne fonctionne pas.
    Alors il ne reste plus qu'à chercher. On va tout de même pas se laisser impressionner par des lignes de code (même si l'on ne maîtrise pas).

    Pour rendre le script opérationnel, j'ai modifié la ligne 85.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $baseURL = "https://serveur";
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $baseURL = "http://serveur";
    Maintenant le script fonctionne comme proposé par Mathieu (chapeau bas pour la solution).
    Il me reste à étudier le code pour comprendre le fonctionnement et en même temps améliorer mes connaissances sur le php.
    Je pense que cela va m'ouvrir d'autres possibilités pour mon installation "domotique".
    Encore merci.

    [edit]
    Un autre problème est apparu. Le DS3232 est nettement plus précis que le Raspberry Pi de supervision (non connecté à internet).
    Pour moi, la solution est relativement simple. Je vais rajouter un RTC plus précis que le DS3232 au RaspPi (c'est mon domaine de prédilection) et tout rentrera dans l'ordre.

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

Discussions similaires

  1. Améliore script net logon
    Par stanley44 dans le forum VBScript
    Réponses: 0
    Dernier message: 21/09/2011, 10h08
  2. améliorer script de logs site web
    Par nicocans dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 21/07/2011, 11h41
  3. BASH Amélioration script
    Par Tiolebucheron dans le forum Linux
    Réponses: 39
    Dernier message: 13/02/2010, 17h31
  4. Script DOS saisie automatique password
    Par bonito6 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 17/07/2007, 09h24

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