Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Panel edycji plików z serwera
Forum PHP.pl > Forum > Przedszkole
zmarcin
dry.gif

Wpadłem na pomysł, że fajnie byłoby stworzyć panel do edycji stron mojego serwisu, który by wykorzystywał php.

Widzę to tak, że dostęp do katalogu, w którym są pliki tworzące panel, jest chroniony hasłem.
Ponieważ chcę maksymalnie zautomatyzować proces edycji, myślę o czymś takim:


1. Aby rozpocząć edycję jakiegoś pliku, podaję jego pełną nazwę (no, oczywiście muszę też pamiętać o ścieżce dostępu), wpisując ją do formularza, który wyswietla się po zalogowaniu (np.
<INPUT TYPE=text NAME=plik>
), po czym klikam submit.

2. Otwiera mi się strona edycji, która pobiera z formularza zmienną $plik i otwiera jodpowiedni plik do edycji (za pomocą textarea).

3. Wszystko kończy plik zapisz.

Czy ktoś ma pomysł, jak takie cudo zrobić, o ile to możliwe, ale w php prawie wszystko jest możliwe, więc może i to. winksmiley.jpg

--
4. A na koniec - czy jest możliwe utworzenie w takim panelu zupełnie nowych plików, o rozszerzeniu .txt, .php?
dry.gif
Ociu
1. Może lepiej czytanie katalogu i lista plików do edycji. Klikasz na jeden potem get'em on leci do textarea.

2. file_get_contents" title="Zobacz w manualu PHP" target="_manual

4. Zapisujesz plik o podanej nazwie. nic prostrzego.
MissMoneypenny
Myślę że ten artykuł może Ci pomóc. Tam jest wyjasnione podobne zagadnienie winksmiley.jpg artykuł
_Mateo
Mam dzisiaj super nastroj, wiec zapodam gotowca smile.gif

plik form.htm:
  1. <form action="edytuj.php" method=post>
  2. Sciezka: <input type="text" name="plik" />
  3. <input type="submit" value="klik" />
  4. </form>


plik edytuj.php:
  1. <?php
  2.  
  3. if(file_exists($_POST['plik'])) {
  4.     
  5.     echo '<form method=post action=\"zapisz.php\">
  6.     <textarea name=\"tresc\"> '.
  7.     file_get_contents($_POST['plik'])
  8.     .'</textarea><input type=\"hidden\" name=\"file\" value=\"'.$_POST['plik'].'\" />
  9.     <input type=\"reset\" value=\"przywroc domyslne\" />
  10.     <input type=\"submit\" value\"Zapisz zmiany\" />
  11.     </form>';
  12. }
  13. else {
  14. echo('Nie ma takowego pliku '.$_POST['plik']);
  15. }
  16.  ?>


plik zapisz.php:
  1. <?php
  2.  
  3. if(!empty($tresc)) {
  4.  
  5.     $handle=fopen($_POST['file'], 'w');
  6.     fputs($handle, $_POST['tresc']);
  7.     fclose($handle);
  8.     echo 'Zapisano zmiany';
  9. }
  10.  
  11. else {
  12.     echo 'nie dales tresci pliku';
  13. }
  14. ?>


i tyle smile.gif
edit: jeszcze sposob sugerowany przez @ociu - musiosz zmienic tylko plik form.htm (musi miec rozszezenie php, a zatem form.php) i plik edytuj.php:

form.php
  1. <?php
  2.  
  3. $handle=opendir('katalog');
  4. while($file=readdir($handle)) {
  5. echo &#092;"<a href=\"edytuj.php?plik=$file\">$file</a>\";
  6. }
  7.  
  8. ?>


edytuj.php
[php]
<?php

if(file_exists('katalog/'.$_GET['file'])) {

echo '<form method=post action="zapisz.php">
<textarea name="tresc"> '.
file_get_contents('katalog/'.$_GET['file'])
.'</textarea><input type="hidden" name="file" value="'.$_POST['plik'].'" />
<input type="reset" value="przywroc domyslne" />
<input type="submit" value"Zapisz zmiany" />
</form>';
}
else {
echo('Nie ma takowego pliku '.$_POST['plik']);
}
?>
php]
zmarcin
Nie chce mi to działać - wykonuje się instrukcja else - "nie dales tresci pliku" - nie mam pojęcia dlaczego...
_Mateo
aha... sprobuj w warunku zamiast !empty($tresc) dac !empty($_POST['tresc']) - powinno dzialac
Guest
Wciąż to nie działa blink.gif
Ociu
Lepiej skorzystać tutaj z file_put_contents...
zmarcin
_Mateo, a wyprobowales u siebie ten skrypt?
_Mateo
Skrypt powinien działać... napisany jest dobrze. A przekazujesz oczywiscie wartosc w tym polu?

POPRAWKA: SKRYPT JEST OK - DZIAŁA.
zmarcin
tzn. chodzi Ci czy wypełniam input'a? -> tak

Wszystko zgrałem tak, jak mi zapodałeś i kicha, tam w jednym miejscu było raz GET, a raz POST, ale jak to dopasowałem, to tez nic nie pomogło. A u Ciebie to działa?
_Mateo
aha, przeciez tam nie ma byc isset($_POST['tresc']) - raczej chyba to si.e przekazuje do pliku zapisz.php
usun to wyrazenie war i bedzie chadzac biggrin.gif
zmarcin
U Ciebie działa?

No to ja już nie wiem, co jest grane, bo wszystko zrobiłem tak, jak mi pokazałeś - także zmieniłem kawałek kodu:

  1. <?php
  2. !empty($_POST['tresc']) 
  3. ?>


Pliki php mają oczywiście ponadawane prawa.

To podaj mi, proszę, wersję, która u Ciebie zadziałała.
_Mateo
Juz dzialają wszystkie, i u ciebie tez powinny. Naturalnie usunałes warunek oraz else do niego? czyli
  1. <?php
  2.  
  3. if(isset($_GET['plik'])) {
  4.     if(file_exists('katalog/'.$_GET['plik'])) {
  5.             $handle=fopen('katalog/'.$_GET['plik'], 'w');
  6.             fputs($handle, $_POST['tresc']);
  7.             fclose($handle);
  8.     }
  9.     else {
  10.         echo 'nie ma takiego pliku';
  11.     }
  12. }
  13. else {
  14.     echo 'nie podano pliku do edycji';
  15. }
  16.  
  17. ?>


Cytat
w jednym miejscu było raz GET, a raz POST, ale jak to dopasowałem

Tam nie było co dopasowywac smile.gif jezeli nie kapujesz tych $_GET i $_POST, to w manualu poczytaj o tablicach predefiniowanych.
zmarcin
Widzę, że jestem ciężkim przypadkiem, odpornym na php...

Wgrałem aktualnie takie pliki na serwer:

form.php:

  1. <?php
  2.  
  3. $handle=opendir('katalog');
  4. while($file=readdir($handle)) {
  5. echo &#092;"<a href=\"edytuj.php?plik=$file\">$file</a>\";
  6. }
  7.  
  8. ?>

- jak otwieram ten plik, to mam biały ekran - nic się nie dzieje...


edytuj.php:

  1. <?php
  2.  
  3. if(isset($_GET['plik'])) {
  4.     if(file_exists('katalog/'.$_GET['plik'])) {
  5.             $handle=fopen('katalog/'.$_GET['plik'], 'w');
  6.             fputs($handle, $_POST['tresc']);
  7.             fclose($handle);
  8.     }
  9.     else {
  10.         echo 'nie ma takiego pliku';
  11.     }
  12. }
  13. else {
  14.     echo 'nie podano pliku do edycji';
  15. }
  16.  
  17. ?>


zapisz.php:

  1. <?php
  2.  
  3. if(!empty($POST['tresc']) {
  4.  
  5. $handle=fopen($_POST['file'], 'w');
  6. fputs($handle, $_POST['tresc']);
  7. fclose($handle);
  8. echo 'Zapisano zmiany';
  9. }
  10.  
  11. else {
  12. echo 'nie dales tresci pliku';
  13. }
  14. ?>



To może zapodaj mi w całości te plik, jeżeli Ci działają, bo ja się w tym gąszczu kodu jeszcze b. słabo orientuję.
_Mateo
nr 1. przy testach sworzyles katalog i masz w nim pliki?
nr 2. plik zapisz.php w Twoim jest ze skryptu pierwszego. zatem nie ma prawa działać. Dodaj do sciezki ktora otwiera plik 'katalog/'. Kod przed 20 sekundami usunałem opróżniając kosz smile.gif zropb tak jak Ci powiedzialem w 2 punktach.
zmarcin
Najlepiej by było, jakbyś podał kod tych 3 plików, które u Ciebie działają, bo ja się już całkiem zamotałem...
_Mateo
form.php:

  1. <?php
  2.  
  3. $handle=opendir('katalog');
  4. while($file=readdir($handle)) {
  5. if($file!='.' && $file!='..') {
  6. echo &#092;"<a href=\"edytuj.php?plik=$file\">$file</a><br />\";
  7. }
  8. }
  9.  
  10. ?>


edytuj.php:
  1. <?php
  2.  
  3. if(file_exists($_GET['file'])) {
  4.  
  5. echo '<form method=post action=\"zapisz.php\">
  6. <textarea name=\"tresc\"> '.
  7. file_get_contents('katalog/'.$_GET['file'])
  8. .'</textarea><input type=\"hidden\" name=\"file\" value=\"'.$_GET['file'].'\" />
  9. <input type=\"reset\" value=\"przywroc domyslne\" />
  10. <input type=\"submit\" value\"Zapisz zmiany\" />
  11. </form>';
  12. }
  13. else {
  14. echo('Nie ma takowego pliku '.$_GET['file']);
  15. }
  16. ?>


zapisz.php"
  1. <?
  2. if(isset($_GET['plik'])) {
  3. if(file_exists('katalog/'.$_GET['plik'])) {
  4. $handle=fopen('katalog/'.$_GET['plik'], 'w');
  5. fputs($handle, $_POST['tresc']);
  6. fclose($handle);
  7. }
  8. else {
  9. echo 'nie ma takiego pliku';
  10. }
  11. }
  12. else {
  13. echo 'nie podano pliku do edycji';
  14. }
  15.  
  16. ?>
zmarcin
Mam wciąż ten sam problem - po otwarciu pliku form.php widzę tylko biały ekran...

Pozostałe skrypty wykonuje serwer bez zarzutu - dzisiaj wstawiłem sondę i działa elegancko, od ponad 2 m-cy jest księga gości...

A może admin serwera zablokował niektóre funkcje? No bo u Ciebie to działa, a u mnie nie.
_Mateo
pojecia nie mam co jest nie tak - skrypt w istocie działa - testowałem 2 razy. Mozesz pokombinowac jakos, juz nie mam pomyslow co moze byc nie tak...
zmarcin
W każdym razie dzięki wielkie za pomoc!!!

biggrin.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.