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

JavaScript Discussion :

Écrire une variable reçue en argument


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 106
    Par défaut Écrire une variable reçue en argument
    Bonjour à tous,

    Je me résigne une nouvelle fois , a appeler au secours !

    Certainement dû à une overdose ou une incompréhension de ma part, mais je n'arrive pas à écrire un chiffre dans un fichier que je reçois en argument.

    Pour ceux qui me suive sur les autres posts.
    j'ai rajouter un potar sur ma platine ESP32.

    Ce potar me sert a régler un tension qui est lue par mon ESP32 . C'est une valeur analogique ( comme un thermomètre par exemple).

    Dans mon programme avec l'ESP32 je lis cette valeur je la transforme en string et je l'envoie en argument dans un GET. Exactement comme pour l'état de mes leds.
    Ce qui me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    client.print("GET /analogique.php?V_ana=1234  HTTP/1.1")");
    Sauf que cette fois-ci cette valeur( ici 1234) envoyer sous forme de string est en fait une valeur numérique que je dois décomposer.

    J'ai donc créer comme pour l'état de mes led en fichier nommé : analogique.php . et dans ce fichier je récupère mon argument pour l'inscrire en dur dans mon fichier .
    Ainsi mon navigateur pourra de temps en temps venir lire la valeur et mettre à jour par exemple l'aiguille un compte tour.

    Fichier analogique.php actuellement :
    Code php : 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
    1999  
    <?php echo $_GET['V_ana'] ?>
     
     
    <?php
        include("fonction.php");
     
        if($_GET['V_ana'] == '1999')
        {				
            ecrireDansFichier('analogique.php',"1999",0);
     
         }
        else {
            ecrireDansFichier('analogique.php',"pas bon ",0);
        }  
    ?>

    la fonction ecriredansFichier est opérationnelle car je me sers ailleurs.
    mais la voici quand même

    Fonction.php
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
        // #####################################   FUNCTION    ################################################
        function ecrireDansFichier($url_fichier,$data,$position){
            $monfichier = fopen($url_fichier, 'r+'); // j'ouvre le fichier et je place le curseur au début
            fseek($monfichier, $position); // On met le curseur en position
            fputs($monfichier, $data );    // On écrit les données
            fclose($monfichier);
        }
     ?>

    Donc comment faire pour convertir ma chaine de caractère reçue, l'écrire sur mon fichier analogique.php que mon index.php puisse allez a son tour la lire pour effectuer une action suivant la valeur ?

  2. #2
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 130
    Par défaut
    Salut
    client.print("GET /analogique.php?V_ana=1234 HTTP/1.1")");
    client.print("GET /analogique.php?V_ana=1234 HTTP/1.1"); me semble t il
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 106
    Par défaut
    Bonsoir ProgElecT,

    Tu as raison . C'est juste une erreur de copier/coller malheureusement!

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 106
    Par défaut
    Ok c'était une erreur de ma part . je n'avais pas ouvert la connexion au serveur. Du coup je voyais ma trame partir avec le port série, mais elle n’arrivai jamais ;

    Je vous mets ma function javascript qui est un copié/coller des mises a jours de l'état de mes leds :

    JS
    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
    			MAJLedB()  // je repete l'opération toute les 0.5 secondes
     
    			/*Met à jour l'état la valeur analogique  toutes les 0.5 secondes */		
    			function MAJVana() {
     
    				const idVana1 = document.getElementById("id-V_ana"); // je défini l'endroit du texte que je dois remplacer par son ID
                   	const requete_Vana1= new XMLHttpRequest();
    				requete_Vana1.open("GET", "/analogique.php", true);
    				requete_Vana1.send();
    				requete_Vana1.addEventListener("load", () => {
    					idVana1.textContent = requete_Vana1.responseText ;
     
    					setTimeout( MAJVana, 500 )	
    				})									
    			}			
    			MAJVana()  // je repete l'opération toute les 0.5 secondes
    La page analogique.php
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    1495      
     
     
     
    <?php
        include("fonction.php");
    	ecrireDansFichier('analogique.php',$_GET['V_ana'],0);
    ?>

    Le html
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <h1>La valeur du potar = <span id="id-V_ana">-</span></h1>

    Bon rien de méchant mais le code s'allonge petit a petit.

    Puis-je imbriquer plusieurs fonctions dans la fonction de mise à jour toutes les 0.5 secondes ? Comme ca je sais que dans cette fonction je place mes données à actualiser régulièrement !
    Voici le JS de la partie a imbriquer
    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
    //-------------------------------------------------------------------------------
    			/*Met à jour l'état des LEDs  toutes les 0.5 secondes */		
    			function MAJLedV() {
     
    				const idTextLed1 = document.getElementById("id-etat-ledv"); // je défini l'endroit du texte que je dois remplacer par son ID
                   	const requete_LEDV = new XMLHttpRequest();
    				requete_LEDV.open("GET", "/etatLED1.php", true);
    				requete_LEDV.send();
    				requete_LEDV.addEventListener("load", () => {
    					idTextLed1.textContent = requete_LEDV.responseText ;
     
    					if (requete_LEDV.responseText.includes("éteinte")) {
          					imageLedVon.style.display ='none';
    						imageLedVoff.style.display ='inline';
    					} else if (requete_LEDV.responseText.includes("allumée")) {
    						imageLedVon.style.display ='inline';
    						imageLedVoff.style.display ='none';
    					}
    				    setTimeout( MAJLedV, 500 )	
    				})									
    			}			
    			MAJLedV()  // je repete l'opération toute les 0.5 secondes
     
    			function MAJLedB() {
     
    				const idTextLed2 = document.getElementById("id-etat-ledb"); // je défini l'endroirt du texte que je dois remplacer par son ID
    				const requete_LEDB = new XMLHttpRequest();  // Je créer un objet de type requete
    				requete_LEDB.open("GET", '/etatLED2.php', true);  // je constitue ma requete
                    requete_LEDB.send();  // j'envoie ma requete		
    				requete_LEDB.addEventListener("load", () => {  // à la reception de la réponse du réponse, je remplace le texte
    					idTextLed2.textContent = requete_LEDB.responseText // je remplace le texte par la réponse recue dans la requete
     
    					if (requete_LEDB.responseText.includes("éteinte")) {
          					imageLedBon.style.display ='none';
    						imageLedBoff.style.display ='inline';
    					} else if (requete_LEDB.responseText.includes("allumée")) {
    						imageLedBon.style.display ='inline';
    						imageLedBoff.style.display ='none';
    					}
    					setTimeout( MAJLedB, 500 )
    				});
     
    			}								
    			MAJLedB()  // je repete l'opération toute les 0.5 secondes
     
    			/*Met à jour l'état la valeur analogique  toutes les 0.5 secondes */		
    			function MAJVana() {
     
    				const idVana1 = document.getElementById("id-V_ana"); // je défini l'endroit du texte que je dois remplacer par son ID
                   	const requete_Vana1= new XMLHttpRequest();
    				requete_Vana1.open("GET", "/analogique.php", true);
    				requete_Vana1.send();
    				requete_Vana1.addEventListener("load", () => {
    					idVana1.textContent = requete_Vana1.responseText ;
     
    					setTimeout( MAJVana, 500 )	
    				})									
    			}			
    			MAJVana()  // je repete l'opération toute les 0.5 secondes
    Merci de m'avoir lu

  5. #5
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 665
    Par défaut
    une amélioration que vous pouvez faire est d'utiliser une requête unique pour mettre à jour les données de la page. et pour faire cela plus efficacement sur le serveur web, vous pouvez utiliser un sgbdr (comme mysql par exemple) pour stocker les données au lieu de les enregistrer dans des fichiers texte.

    dans la base de données, vous aurez une table avec les champs "code" et "valeur" par exemple et donc vous aurez un script php unique qui va enregistrer les valeurs de la carte avec des requêtes dans le genre valeur.php?code=potentiometre&valeur=129.
    et pour la mise à jour de l'affichage, le javascript appellera un seul script qui retournera toutes les données au format json.

    l'avantage d'un sgbdr est qu'il sera ensuite plus facile de faire évoluer tout le système. vous pourrez par exemple enregistrer la date du dernier envoi de données pour vérifier que tout fonctionne régulièrement. vous pourrez aussi classer les valeurs quand vous aurez plusieurs cartes à plusieurs endroits.

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 205
    Par défaut
    Bonjour,
    Citation Envoyé par dje8269
    Bon rien de méchant mais le code s'allonge petit a petit.
    Tu es en bonne voie pour du « code spagetti » .

    Citation Envoyé par dje8269
    Puis-je imbriquer plusieurs fonctions dans la fonction de mise à jour toutes les 0.5 secondes ?
    As tu conscience que lorsque tu auras une vingtaine d’équipements connectés cela reviendra à faire 20 requêtes espacées de .5s/20, calcul très approximatif.


    je retiendrais de ce qu'à écrit mathieu :
    une amélioration que vous pouvez faire est d'utiliser une requête unique pour mettre à jour les données de la page
    (...)
    et pour la mise à jour de l'affichage, le javascript appellera un seul script qui retournera toutes les données au format json.
    c'est ce que je t'avais préconisé dans une autre de tes discussions : Actualiser une page à la reception d'une requête !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/11/2009, 15h19
  2. écrire une variable dans un fichier
    Par Bathou dans le forum Débuter
    Réponses: 2
    Dernier message: 11/09/2008, 15h00
  3. passer une variable js comme argument en php
    Par moncef357 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 22/08/2008, 15h48
  4. Réponses: 4
    Dernier message: 21/03/2007, 11h35
  5. écrire une variable
    Par antywey dans le forum Windows
    Réponses: 5
    Dernier message: 17/03/2006, 09h06

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