Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Podgląd i usuwanie plików z katalogu
Forum PHP.pl > Forum > Przedszkole
Tuomi
Witam.
Prosiłbym o pomoc w napisaniu kodu, który:
1. wyświetlałby zawartość katalogu,
2. przy każdej nazwie pliku byłby checkbox,
3. pod nazwami przycisk do kasowania zaznaczonego pliku.
Udało mi się zrobić pierwsze dwa punkty, ale nie działa mi opcja usuwania pliku.
Co zrobiłem źle?

Plik wyświetlający zawartość katalogu z checkboxami [pliki.php]:
  1. <?
  2. //wyswietlanie plikow
  3. $directory="okladka";
  4. $dir=opendir($directory);
  5. $file_list="<ul>";
  6. while($file_name=readdir($dir))
  7. {
  8. if(($file_name!=".")&&($file_name!=".."))
  9. {
  10. $file_list.="<li><input type=checkbox name=plik value=$file_name> $file_name</li>";
  11. }
  12. }
  13. $file_list.="</ul>";
  14. closedir($dir);
  15. echo "<form action=usun-plik.php method=post>$file_list <input type=submit name=ok value=Kasuj />";
  16. ?>


Plik odpowiadający za usuwanie zaznaczonego pliku [usun-plik.php]:
  1. <?php
  2. include 'pliki.php';
  3. $nazwa_pliku = $_POST['plik'];
  4. unlink($nazwa_pliku);
  5. echo 'Plik pomyślnie usunięty. <a href=pliki.php>Powrót</a>';
  6. ?>

Jak zrobić, żeby taki formularz działał?
Z góry dzięki za pomoc.
Wazniak96
Dajesz złą ścieżkę usuwania pliku. Czytasz pliki z folderu "okladka", a próbujesz usunąć z bieżącego. smile.gif
d3ut3r
Moim zdaniem powinieneś w ogóle unikać takich konstrukcji, co jeżeli w $_POST będzie na przykład:

../../plik.php

przy takim kodzie zostawiasz otwartą furtkę do usunięcia wszystkiego co jest w zasięgu skryptu.
viking
PHP daje ci takie fajne sposoby a ty robisz to brutalnym młotkiem:
http://php.net/manual/en/class.directoryiterator.php
http://php.net/manual/en/class.filesystemiterator.php
Możesz nawet http://php.net/manual/en/class.globiterator.php do szybkiego odfiltrowania.
Tuomi
Tylko trzeba te "fajne przykłady" rozumiećbiggrin.gif Ok. Zrobię to na zasadzie ramek tzn 3 pliki: pliki.php, all.php, del.php. W plik.php będą iframe'y do all.php i del.php, w all.php będzie wyświetlanie zawartości folderu a del.php bedzie odpowiadał za usunięcie (poprzez wpisanie nazwy w polu input). Temat można zamknąćwink.gif

Udało się bez ramek zrobićwink.gif
pliki-all.php
  1. <form action="pliki-del.php?del=1" method="GET">
  2. <?
  3. $katalog = '../okladka';
  4. $dir = opendir($katalog);
  5. while(false !== ($file = readdir($dir)))
  6. if($file != '.' && $file != '..')
  7. {
  8. echo '<input type="checkbox" name="file" value="'. $file . '" /> '. $file . '<br />';
  9. }
  10. closedir($dir);
  11. ?>
  12. <br><input type="submit" value="Kasuj" />!<br>
  13. </form>

pliki-del.php
  1. <?
  2. $del=$_GET['del'];
  3. $file = $_GET['file'];
  4. $katalog = '../okladka';
  5. if (unlink($katalog .'/'. $file))
  6. {
  7. echo "Plik zostal pomyslnie usuniety. <a href=pliki-all.php>Wroc</a>.";
  8. }
  9. ?>

Powyższe pliki są umieszczone w katalogu pliki, zaś katalog z plikami (okladka) jest umieszczony w katalogu głównym
Skrypt może nie profesjonalny, ale ważne, że działa:)
Jeszcze takie małe pytanie. Co trzeba zmienić/wstawić, żeby w przypadku putego katalogu wyświetlało: "Brak plików do usunięcia."
Próbowałem użyć
  1. if (!empty($dir))
  2. {
  3. echo '<br>Brak plików do usunięcia!<br>';
  4. }

ale wtedy echo jest wyświetlane niezależnie od tego czy katalog jest pusty czy nie. Z góry dzięki za pomoc;)
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.