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 :

Demande d'avis script lecture ecriture de fichier


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Demande d'avis script lecture ecriture de fichier
    Bonjour,

    après des jours de test et de recherche internet, je dois avouer que j'ai été mis en échec. Je pense que ce que j'essaie de faire est impossible sans AJAX, mais autant avoir l'avis d'autre personne pour en être sûr. Voici mon problème :

    Ce que je veux faire :

    Je veux une zone accessible par mot de passe, dans lequelle se trouve une textarea. La valeur de cette textarea est récupérée dans un fichier (ceci, c'est facile). Puis, je modifie à mon aise cette textarea et soumets modifie le fichier en conséquence (jusque là, ça va). Une fois le fichier soumis, je veux que ma page ait été rechargé tout en ayant comme nouvelle valeur, les données du fichier qui a été modifié (Et là, c'est le drame).

    Ce qui se passe :

    Je vois ma textarea avec la bonne valeur après m'être logué. Je modifie le texte dans cette zone, et soumets. Le fichier est modifié, la page rechargée. Mais le texte de la textarea est resté l'ancien, et je dois actualiser de nouveau manuellement pour voir le nouveau texte dans la textarea en accord avec le fichier.

    Ce que j'ai déjà essayé :

    - Retirer la mise en cache
    - tenter un onclick="reloader la page web" dans mon input submit
    - poser de manière très crade un <META HTTP-EQUIV="refresh" CONTENT="0;URL=http://my_url/index.php?atout=content&newvar=true"> après avoir valider en utilisant notamment une nouvelle variable, et donc rafraichir la page sous conditions. Mais sans succès

    Ou peut être le problème :

    A mon avis (et c'est là qu'AJAX est peut-être la solution), c'est du a la non interaction entre php (serveur) et html (client).

    Si quiconque à un avis à me donner, même celui d'abandonner mon idée parce qu'il peut me prouver que ça ne peut pas marcher, je suis preneur.

    Merci bien



    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
    <?php
      $atout = (isset($_GET['atout'])) ? $_GET['atout'] : '';
      if($atout=='password_reached'){
        $filename = "whatever.txt";
        $fp = fopen($filename,'r');
        while (!feof($fp)){$donnees=$donnees.fgets($fp);}
        fclose ($fp);
        echo '<form method="post" action="?atout=password_reached">
              <textarea rows="10" name="text" cols="60" WRAP="virtual">'.$donnees.'</textarea>
              <INPUT type="submit" name="bouton" value="Do"/>
              </form>
        ';
        $text = $_POST['text'];
        $fp = fopen ($filename, "w");
        if ($fp) {
          fwrite ($fp, $text);
          fclose ($fp);
          echo 'file wrote';
        }else{
          echo 'File was not written';
        }
      }else{
        echo "
          <form method=\"post\">
            LOGIN: <INPUT name=\"login\" type='text' size=8>
            PASSWORD: <INPUT type=\"password\" name=\"password\" size=8>
            <INPUT type='submit' name=\"bouton\" value='OK'>
          </form>
        ";
        $login = $_POST['login'];
        $password = $_POST['password'];
        if ($login=='login1' and $password=='password1'){
          echo "another page protected by password";
        }elseif($login=='' and $password==''){
          echo 'Enter your login and password to reach this specific section';
        }elseif($login=='login2' and $password=='password2'){
          echo '<META HTTP-EQUIV="refresh" CONTENT="0;URL=http://my_url/index.php?atout=content">';
        }else{
          echo 'Wrong password or login!';
        }
      }
    ?>

    Désolé pour les fautes et coquilles.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    pourquoi t’utilises pas file_get_contents et file_put_contents ?
    pourquoi les balises sont des fois en majuscule et des fois en minuscule ?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Je vais aller voir ces fonctions file_get_contents et file_put_contents. mais j'imagine que ça fait déjà plus ou ce que je fais moi.

    Pour les majuscules et minuscules, c'est juste que je ne suis pas propre quand je fait des tests. Je tiens à garder mes balises en majuscules, mais quand je fait des tests, je continue en minuscule par fainéantise... mais bon, le problème ne vient pas de la "cast".

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Tu mets une balise <meta> en plein milieu de la page... ...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Oui, et j'en suis pas forcément fier... Mais ça fait son job, et ça m'évite bien de passer par du javascript. C'est bien prévu de trouver une autre solution pour ça, mais là n'est pas mon problème le plus important.

  6. #6
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par machalfven
    Oui, et j'en suis pas forcément fier... Mais ça fait son job
    Citation Envoyé par machalfven
    donc rafraichir la page sous conditions. Mais sans succès
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Attention à la confusion. Peut être faut-t-il que j'en dise plus. Cette balise Meta ici me sert à rediriger l'utilisateur vers la zone "content" ou se trouve la textarea. L'idée est de ne plus avoir la demande de mot de passe d'affiché lorsque j'écris mon texte (textarea).

    Ceci, ça marche parfaitement.

    Maintenant, si je veux que le texte que je viens de valider via le "input submit" soit pris en compte, il me faut rafraîchir la page manuellement.

    Mon idée était d'utiliser cette astuce une seconde fois (au point ou j'en suis...) afin de rafraîchir automatiquement après validation de la "form".
    Pour cela, ce que je faisais, c'était de passer par une <form action=(nouvelle_url_avec_variable?refresh=true)> et de tester si refresh==true pour relancer un meta tag.

    Mais fausse bonne idée, puisque ça ne fonctionne pas mais déplace le problème. Hélas, c'est long à expliquer ce qui se passe exactement, et assez sournois, le mieux étant d'essayer et de le comprendre par soi même. Essayons quand même de voir ce qui se passe avec ce script tel que je l'ai posé plus haut!

    J'ai une textarea avec pour value, ce que je récupère d'un fichier (j'utilise maintenant les fonctions données par stealth35, mais ça revient au même -- je suis de la vielle école et préfère comprendre ce que je fait plutôt que copier coller ce que d'autre ont écrit)

    Cette valeur est stockée dans $text et écrite dans le fichier une première fois (valeur pas encore modifiée). Puis je modifie la textarea et "submit". Là, la page est "reloadé? raffrachie? ...?" et $text récupère la version modifié de ma textarea. Cependant, le fichier contenant encore l'ancienne version est affiché. Et enfin, le fichier est écrit avec la bonne $text (obtenue par le POST). Du coup, si je rafraîchi, j'aurais le bon texte modifié dans le fichier, ET dans la textarea.

    C'est ce que je comptais faire à coup de meta tag MAIS c'est à ce moment que je ne sais plus trop ce qui se passe et que je perd. Le résultat est mauvais quoiqu'il en soit.

    D'où mon appel au secours à quelqu'un qui comme moi préfère se poser les questions de "pourquoi?" plutôt que de chercher à résoudre bêtement en trichant (même si mes meta, c'est déjà de la triche...)

    20$ fictif à qui saura m'aider à comprendre

    Désolé, en relisant, je vois que c'est plein de fautes... J'édite les plus grosses, mais il doit en rester pas mal!

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Douple post, mea maxima culpa, mais j'apporte une solution.

    ça marche, mais c'est moche, donc même si je passe en résolu, n'hésitez pas à apporter de nouvelles idées.

    Ce que je fait, c'est de réecrire le fichier en entrée avec les valeurs $text SSI $text!=''. Donc, cette fois ci, le fichier est modifié avant de le lire en vue d'avoir la value de la textarea.

    Soit

    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
    <?php
      $atout = (isset($_GET['atout'])) ? $_GET['atout'] : '';
      if($atout=='password_reached'){
        $filename = "whatever.txt";
        $text = $_POST['text'];
        if($text!=''){file_put_contents($filename, $text);}
        $donnees=file_get_contents($filename);
        echo '<form method="post" action="?atout=password_reached">
              <textarea rows="10" name="text" cols="60" WRAP="virtual">'.$donnees.'</textarea>
              <INPUT type="submit" name="bouton" value="Do"/>
              </form>
        ';
        $text = $_POST['text'];
        if($text!=''){file_put_contents($filename, $text);}
      }else{
        echo "
          <form method=\"post\">
            LOGIN: <INPUT name=\"login\" type='text' size=8>
            PASSWORD: <INPUT type=\"password\" name=\"password\" size=8>
            <INPUT type='submit' name=\"bouton\" value='OK'>
          </form>
        ";
        $login = $_POST['login'];
        $password = $_POST['password'];
        if ($login=='login1' and $password=='password1'){
          echo "another page protected by password";
        }elseif($login=='' and $password==''){
          echo 'Enter your login and password to reach this specific section';
        }elseif($login=='login2' and $password=='password2'){
          echo '<META HTTP-EQUIV="refresh" CONTENT="0;URL=http://my_url/index.php?atout=content">';
        }else{
          echo 'Wrong password or login!';
        }
      }
    ?>


    Je vais quand même faire des tests de robustesses, parce que ça m'a l'air très capilo-tracté (et crade comme façon de codé...)

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

Discussions similaires

  1. [C++] lecture/ecriture dans fichier txt/binary
    Par vince3320 dans le forum C++
    Réponses: 6
    Dernier message: 28/09/2007, 18h00
  2. Lecture/Ecriture de fichiers MAT via .NET
    Par mimic50 dans le forum MATLAB
    Réponses: 3
    Dernier message: 29/03/2007, 11h48
  3. lecture/ecriture de fichier à distance avec indentification
    Par Mat1664 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 22/05/2006, 17h16
  4. Réponses: 4
    Dernier message: 03/02/2006, 13h50
  5. lecture-ecriture de fichier en mode Random (Get - Put)
    Par MuShRo_Om dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 15/01/2006, 14h53

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