Lire un bloc de texte, le modifier, et le sauvegarder !

Lire un bloc de texte, le modifier, et le sauvegarder ! - PHP - Programmation

Marsh Posté le 17-02-2010 à 01:40:35    

Bonjour à tous,
 
j'ai besoin rapidement d'un bout de code (depuis le temps que je me dis qu'il faut que je me mette au PHP  :whistle: )
 
La finalité : Lire un bloc de texte dans un fichier .txt, l'afficher dans un TEXTAREA où je pourrais le modifier, et ensuite réécrire le texte modifié dans le fichier .txt
 
J'ai commencé à me renseigner sur le PHP, ca a l'air facilement faisable, mais je n'ai plus le temps de potasser, il me faut une solution rapidement :/
 
Si une bonne âme voulait bien me venir en aide.. thanx  [:fpe]


---------------
old feedback
Reply

Marsh Posté le 17-02-2010 à 01:40:35   

Reply

Marsh Posté le 17-02-2010 à 02:02:51    

Code :
  1. <?
  2. $fname = 'filename.txt';
  3. if($_POST['edit']==1){
  4.     $fhandle = fopen($fname,"w" );
  5.     fwrite($fhandle,$_POST['text']);
  6.     fclose($fhandle);
  7. }else{
  8.     echo '<textarea id="textbox" cols="50" rows="20">';
  9.     readfile($fname);
  10.     echo '</textarea><br/><button onclick="post_to_url(\'#\', {\'edit\':\'1\', \'text\':document.getElementById(\'textbox\').value})">Save</button>';
  11. }
  12. ?>
  13. <script>
  14. function post_to_url(path, params, method)
  15. {
  16.     method = method || "post"; // Set method to post by default, if not specified.
  17.     // The rest of this code assumes you are not using a library.
  18.     // It can be made less wordy if you use one.
  19.     var form = document.createElement("form" );
  20.     form.setAttribute("method", method);
  21.     form.setAttribute("action", path);
  22.     for(var key in params) {
  23.         var hiddenField = document.createElement("input" );
  24.         hiddenField.setAttribute("type", "hidden" );
  25.         hiddenField.setAttribute("name", key);
  26.         hiddenField.setAttribute("value", params[key]);
  27.         form.appendChild(hiddenField);
  28.     }
  29.     document.body.appendChild(form);    // Not entirely sure if this is necessary
  30.     form.submit();
  31. }
  32. </script>


 
Vous aurez besoin d'obtenir la permission d'écrire dans le fichier. Je ne prends pas le mérite de le fonction "post_to_url" (J'ai oublié où je l'ai trouvé).


Message édité par AJW256 le 17-02-2010 à 13:04:07

---------------
J'apprends parler en français alors je ferai des erreurs. S'il vous plaît corrigez-moi :)
Reply

Marsh Posté le 17-02-2010 à 11:53:49    

en même temps, je vois pas l'intérêt de gérer le formulaire avec du javascript alors que du html suffit :/


Message édité par rufo le 17-02-2010 à 11:54:22

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 17-02-2010 à 12:36:43    

Merci pour ton script AJW256, je testerai ca ce soir :jap:


---------------
old feedback
Reply

Marsh Posté le 17-02-2010 à 13:02:27    

Oui, vous pouvez le faire avec l'HTML au lieu du Javascript mais je préfére le faire ce chemin.


---------------
J'apprends parler en français alors je ferai des erreurs. S'il vous plaît corrigez-moi :)
Reply

Marsh Posté le 17-02-2010 à 13:07:15    

C'est une meilleure alternative:
 

Code :
  1. <?
  2. $fname = 'filename.txt';
  3. if(!$_POST['textbox']){
  4.      $fhandle = fopen($fname,"w" );
  5.      fwrite($fhandle,$_POST['text']);
  6.      fclose($fhandle);
  7. }else{
  8.      echo '<form method="post" action="#"><textarea id="textbox" cols="50" rows="20">';
  9.      readfile($fname);
  10.      echo '</textarea><br/><INPUT type="submit" value="Save"></form>';
  11. }
  12. ?>


 
En fait, je ne sais pas pourquoi je ne le fais pas ce chemin :lol:

Message cité 1 fois
Message édité par AJW256 le 17-02-2010 à 13:39:30

---------------
J'apprends parler en français alors je ferai des erreurs. S'il vous plaît corrigez-moi :)
Reply

Marsh Posté le 17-02-2010 à 14:05:00    

AJW256 a écrit :

C'est une meilleure alternative:
 
 
En fait, je ne sais pas pourquoi je ne le fais pas ce chemin :lol:


[HS]
"this way", quand on parle de quelque chose que l'on fait, se traduit par "de cette façon".
 
To do it this way => le faire de cette façon.
 
[/HS]


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 17-02-2010 à 14:41:53    

[HS] way = voie [/HS]

Reply

Marsh Posté le 17-02-2010 à 14:49:10    

stealth35 a écrit :

[HS] way = voie [/HS]


C'est tellement réducteur de traduire "way" par un seul et unique terme que c'est tout simplement faux. C'est un terme qui a tellement de signification possible que d'il n'est tout simplement pas possible de le traduire sans aucun contexte, sans mise en situation.


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 17-02-2010 à 15:00:43    

Je n'ai pas pensé que c'était correcte. Merci beaucoup :)
 
"En fait, je ne sais pas pourquoi je ne le fais pas de cette façon"


---------------
J'apprends parler en français alors je ferai des erreurs. S'il vous plaît corrigez-moi :)
Reply

Marsh Posté le 17-02-2010 à 15:00:43   

Reply

Marsh Posté le 17-02-2010 à 15:08:22    

AJW256 a écrit :

Je n'ai pas pensé que c'était correcte. Merci beaucoup :)
 
"En fait, je ne sais pas pourquoi je ne le fais pas de cette façon"


:jap:


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 17-02-2010 à 15:09:12    

kao98 a écrit :


C'est tellement réducteur de traduire "way" par un seul et unique terme que c'est tout simplement faux. C'est un terme qui a tellement de signification possible que d'il n'est tout simplement pas possible de le traduire sans aucun contexte, sans mise en situation.


 
sauf que dans se contexte là c'est que ca veux dire littéralement et en français.

Reply

Marsh Posté le 17-02-2010 à 15:17:35    

stealth35 a écrit :


 
sauf que dans se contexte là c'est que ca veux dire littéralement et en français.


Non.
Dans ce contexte, la traduction littérale, c'est "façon", ou "manière". Pas "voie".


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 17-02-2010 à 21:20:17    

@AJW256 > j'ai copié/collé ton code dans une page .htm puis j'ai créé un fichier filename.txt avec 3 lignes de texte, mais le résultat est une page blanche :/
 
Quel est le problème?
 


---------------
old feedback
Reply

Marsh Posté le 17-02-2010 à 21:32:43    

C'est PHP, vous avez besoin d'un espace web avec PHP installé. Aussi, le fichier a besoin d'une extension de .php.


---------------
J'apprends parler en français alors je ferai des erreurs. S'il vous plaît corrigez-moi :)
Reply

Marsh Posté le 17-02-2010 à 21:41:10    

J'ai placé mes fichier sur un espace web avec PHP.
 
J'ai renommé mon fichier .htm en .php mais cela me donne toujours une page blanche :??:


---------------
old feedback
Reply

Marsh Posté le 17-02-2010 à 21:45:31    

Mon code avait des erreurs, voici la bonne version:
 

Code :
  1. <?
  2. $fname = 'filename.txt';
  3. if(!isset($_POST['text'])){
  4.     echo '<form method="post" action="#"><textarea name="text" id="text" cols="50" rows="20">';
  5.     readfile($fname);
  6.     echo '</textarea><br/><INPUT type="submit" value="Save"></form>'; 
  7. }else{
  8.     $fhandle = fopen($fname,"w" );
  9.     fwrite($fhandle,$_POST['text']);
  10.     fclose($fhandle);
  11.     echo 'fichier sauveguard&eacute;';
  12. }
  13. ?>


 
Testez ici


Message édité par AJW256 le 17-02-2010 à 21:46:01

---------------
J'apprends parler en français alors je ferai des erreurs. S'il vous plaît corrigez-moi :)
Reply

Marsh Posté le 17-02-2010 à 21:53:34    

Merci, ca marche déjà mieux! Par contre j'ai un souci : la boite de saisie s'affiche toujours vide, sans reprendre le texte contenu dans le fichier :??:
 
Le texte que je saisi s'enregistre bien dans le fichier, mais si je rappele la page, la boite s'affiche toujours vide!
 
Dans ton lien cela marche très bien par contre!


---------------
old feedback
Reply

Marsh Posté le 17-02-2010 à 21:58:26    

Vous aurez besoin d'obtenir la permission d'écrire dans le fichier. Si votre serveur utilises Linux ensuite la permission du fichier a besoin d'être 777.


---------------
J'apprends parler en français alors je ferai des erreurs. S'il vous plaît corrigez-moi :)
Reply

Marsh Posté le 17-02-2010 à 21:58:51    

J'ai résolu en partie le problème : j'avais mis le paragraphe <script> après le code php!
 
Je l'ai placé avant, et maintenant le texte s'affiche bien dans la boite de saisie!
 
Mais nouveau problème : le texte que je modifie n'est pas sauvegardé, il m'affiche toujours la même chose :/


---------------
old feedback
Reply

Marsh Posté le 17-02-2010 à 22:08:44    

Quel code utilisez-vous? Vous n'avez pas besoin de <script>.


Message édité par AJW256 le 17-02-2010 à 22:10:13

---------------
J'apprends parler en français alors je ferai des erreurs. S'il vous plaît corrigez-moi :)
Reply

Marsh Posté le 17-02-2010 à 22:17:05    

Ah oui exact, j'avais recopié le <script> de ton 1er post mais je viens de le supprimer en ne gardant que le code php et ca fonctionne très bien :)
 
Pour mon problème de texte j'ai compris le souci : ce que je saisis est bien sauvegardé, mais quand je rappele la page php, l'explorateur va chercher dans son cache et m'affiche la même chose que précédemment.
 
En faisant "actualiser la page" je vois finalement bien le texte que j'avais modifié :love:
 
Existe t'il un code ou une balise à insérer en début de page pour empécher le navigateur d'aller chercher dans le cache? (en quelque sorte, "forcer" le rafraichissement de la page)


Message édité par jmb74 le 17-02-2010 à 22:20:20

---------------
old feedback
Reply

Marsh Posté le 17-02-2010 à 22:35:17    

Ecrirez ce au-dessus tout le code mais aprés le "<?":

 
Code :
  1. header("Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
  2. header("Last-Modified: " . gmdate("D, d M Y H:i:s" ) . " GMT" );
  3. header("Cache-Control: no-store, no-cache, must-revalidate" );
  4. header("Cache-Control: post-check=0, pre-check=0", false);
  5. header("Pragma: no-cache" );
 

Je pense que il traiterai tous les navigateurs.


Message édité par AJW256 le 17-02-2010 à 22:35:58

---------------
J'apprends parler en français alors je ferai des erreurs. S'il vous plaît corrigez-moi :)
Reply

Marsh Posté le 17-02-2010 à 23:39:21    

C'est très aimable à AJW256 d'aider ainsi. Cependant, les demandes de codes tout faits sont hors charte, à cause de toutes les demandes de résolution d'exercices qui arrivent régulièrement ici.
 
Je ferme donc ce sujet.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed