Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/10/2011, 12h49   #1
Invité de passage
 
Inscription : octobre 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 5
Points : 1
Points : 1
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 :
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.
machalfven est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2011, 13h16   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
pourquoi t’utilises pas file_get_contents et file_put_contents ?
pourquoi les balises sont des fois en majuscule et des fois en minuscule ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2011, 13h48   #3
Invité de passage
 
Inscription : octobre 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 5
Points : 1
Points : 1
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".
machalfven est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2011, 14h27   #4
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 807
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : juin 2008
Messages : 13 807
Points : 35 789
Points : 35 789
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 !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, 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
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2011, 14h50   #5
Invité de passage
 
Inscription : octobre 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 5
Points : 1
Points : 1
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.
machalfven est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2011, 15h05   #6
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 807
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : juin 2008
Messages : 13 807
Points : 35 789
Points : 35 789
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 !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, 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
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2011, 15h34   #7
Invité de passage
 
Inscription : octobre 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 5
Points : 1
Points : 1
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!
machalfven est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2011, 15h50   #8
Invité de passage
 
Inscription : octobre 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 5
Points : 1
Points : 1
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 :
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é...)
machalfven est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h53.


 
 
 
 
Partenaires

Hébergement Web