Editeur de fichier html & PHP

Bonjour,
Je voudrais faire un editeur de fichier html & php pour mon site, histoire de pouvoir le gérer sans logiciel.

J'ai fait ceci (le chemin du fichier étant déjà indiqué précédemment et le code de la page est bien affiché):
Disons que $fichier = "../index.php"
-----------------------------------------
PAGES2.PHP:
-----------------------------------------
<?php
$fichier = $_POST['chemin'];
if($_POST['Submit']){
$open = fopen($fichier,"w+");
$text = $_POST['update'];
fwrite ($open, stripslashes($text));
fclose($open);
echo ("Fichier mis à jour.<br />");
$file = file($fichier);
foreach($file as $text) {
echo ($text."<br />");
}
}else{
$file = file($fichier);
echo ("<form action=".$PHP_SELF." method='post'>");
echo ("<textarea Name='update' cols='115' rows='20'>");
foreach($file as $text) {
echo ($text);
}
echo ("</textarea>");
echo ("<br /><br /><center><input name='Submit' type='submit' value='Changer la page' />\n
</center></form>");
}
?>


Quand je clique sur le bouton Changer la page. Ca ne change rien.
Merci d'avance
--
Cordialement
Pinouf42
Configuration: Microsoft Windows 7
Firefox 3.6 Beta 5

29 réponses

Résumé de la discussion

Un éditeur de fichier HTML et PHP est envisagé pour gérer le site sans logiciel, via un script qui reçoit le chemin du fichier et tente d’écrire le contenu transmis par un formulaire. Des soucis apparaissent lorsque le bouton soumetteur déclenche la mise à jour, car la condition if($_POST['Submit']) peut rester fausse, ce qui empêche l’écriture et l’affichage du nouveau contenu. Les réponses suggèrent notamment d’utiliser isset sur les champs 'update' et 'chemin', puis d’écrire avec fopen($_POST['chemin'], 'w+') afin d’éviter que l’envoi du formulaire ne soit pas reconnu. En parallèle, les échanges évoquent aussi des tests simples comme initialiser $fichier directement ou ajuster l’emplacement du chemin après vérification, sans conclure sur une solution définitive.

Bobot (l’IA à votre service)
  1. Merci beaucoup de ton aide, c'est très gentil d'avoir pensé à moi et d'être revenu, je vais tester cela. Merci beaucoup.
    1. Re- bonjour pinouf !
      Désolé pour cette longue absence (j'ai été beaucoup pris ces temps-ci).
      Mais j'ai utiliser ton code chez moi pour voir si ça faisait la même chose et en effet, le code brut ne change pas le fichier. J'ai trouvé 2 erreurs qui, rectifiées, ont permis de modifier comme voulue le fichier :
      - Dans la page 2, à la ligne 16, on a ça :
      echo ("<form action=".$PHP_SELF." method='post'>");
      Chez moi, le $PHP_SELF n'est pas définit, je suppose que c'est différent pour toi. Le problème, c'est les guillemets. Car une fois afficher en html, on peut lire <form action=/lefichieramodifier.html method='post'>. Il n'y a pas de guillemets qui définissent la valeur de action donc il comprend que action est = a tout ce qui est souligné ! Je te conseille donc de modifier la ligne PHP aisni :
      echo ("<form action='".$PHP_SELF."' method='post'>");
      ou même
      echo ("<form action='' method='post'>");

      - Toujours dans la page 2, c'est la valeur de $fichier, ou de $_POST['chemin']. Mise en situation : L'administrateur qui veut modifier une page entre sont adresse dans le champ de la page 1, puis valide. La valeur du champ $_POST['chemin'] est remplie et valide, puisque le formulaire de page1 viens d'être validé. L'administrateur fait les modifications nécessaires (je passe). Il valide le formulaire de la page 2 donc, et c'est là que ça coince : il n'y a aucun champ nommé "chemin" dans le formulaire qui vient de lui être envoyé (celui de la page 2). La valeur de $_POST['chemin'] est donc nulle !!!, se basant sur cette valeur, PHP ne peut modifier aucun fichier. Pour parer ce problème, on va rajouter dans le formulaire de la page 2 un champ qui contient la valeur de $_POST['chemin'] transmise par le formulaire de la page 1. Rajoute donc une ligne php dans la page 2, en dessous de la ligne 16 :
      echo ("<input type='hidden' name='chemin' value='". $fichier ."'>");
      Chez moi, c'est modifié !

      En espérant avoir été assez clair ! @+
      1. Ecris-le lui ici : http://www.commentcamarche.net/communaute/profil-rd_9?section=mp
        1. Re-salut ! Désolé pour mon absence :D.
          Bon, sais vraiment pas pourquoi ce ne fonctionne pas, ce code est nickel...
          Cela te dérangerais si tu pouvais m'envoyer ton code entier pour voir si ça marche chez moi et changer au cas où ? C'est peut-être une autre partie de ta page qui fait que ça ne fonctionne pas... Peut-être...
          1. Bin là, j'ai plus d'idée =D
            La nuit porte conseil je re-regarderai demain :-)
            1. J'avais déjà essayé de le mettre après le if(isset... mais sa ne fonctionnais pas, il ne m'ouvrait aucun fichier.
              En mettant $_POST['chemin'] dans fopen sa ne change rien.
              1. Ou le vilain :-P
                Essaye de mettre $fichier = $_POST['chemin']; juste APRES le if(isset($_POST['update'],$_POST['chemin'])){,
                et/ou de mettre $open = fopen($_POST['chemin'],"w+");
                1. Et fait pareil juste après $fichier = $_POST['chemin']; avec $fichier cette fois ?
                  1. On avance ;-)
                    Test numéro 2 : met ça au début du code (en re-modifiant le test 1, biensur) :
                    echo ('"'. $_POST['chemin'] .'"');
                    En haut de ta page (quand tu la visualise) il doit y avoir des guillemets. Il y a-t-il un texte dedan :-p ?
                    C'est juste pour vérifier que $_POST['chemin'] possède bien une valeur
                    1. Mais je voudrais pouvoir specifier avant le fichier que je veux modifier =(
                      1. Et alors essaye de mettre au début de cette page l'instruction $fichier="../index.php" à la place de $_POST['chemin'] (juste pour tester). Ca donne quoi ?
                        1. En fait quand j'ai dit disons que $fichier="../index.php" c'est parce que j'ai un formulaire avant qui me demande le chemin vers le fichier. Et je dit que dedans j'ai inséré ../index.php donc la valeur $fichier est égale à ../index.php

                          Merci d'avance
                          1. C'est donc qu'il y a 2 instruction contraire :
                            Disons que $fichier = "../index.php" 
                            ----------------------------------------- 
                            PAGES2.PHP: 
                            ----------------------------------------- 
                            <?php
                            $fichier = $_POST['chemin']


                            La 1ère dit que $fichier='../index.php', la 2ème dit que c'est égale à $_POST['chemin']. Supprime l'une des deux !
                            • 1
                            • 2