Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] wybór folderu i usunięcie z niego pliku
Forum PHP.pl > Forum > PHP
felixk
Witam, tworzę mały system archiwum, który umożliwiał będzie podgląd listy folderów i następnie wybór jednego z nich i wyświetlenie jego zawartości w postaci tabeli. Każdy element osobno może być usunięty. O ile teoretycznie wybór działa to usuwanie już nie bardzo. Zmienna dir po kliknięciu w submit zawiera ścieżkę w formie "archiwum/folder", mimo wszystko pliki z podfolderu i tak się nie usuwają. Poniżej kod. Z góry dziękuję za wszelką pomoc

  1. <?php
  2. $rok = gmdate("Y");
  3. ?>


  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.  
  4.  
  5. <script type="text/javascript">
  6. function confirmDelete2(delUrl) {
  7. if (confirm("Czy na pewno chcesz usunąć plik z serwera? Usunięcie jest nieodwracalne")) {
  8. document.location = delUrl;
  9. }
  10. }
  11.  
  12. </head>

  1. <?php
  2.  
  3. $akcja = isset($_GET['akcja']) ? $_GET['akcja'] : ' ';
  4.  
  5. if($akcja == "pokaz_archiwum")
  6. {
  7.  
  8. echo '<form name="form" action="" method="post">';
  9. echo '<ul style="list-style: none">';
  10. foreach(glob('archiwum/*', GLOB_ONLYDIR) as $directory) {
  11. $dir = str_replace('archiwum/', '', $directory);
  12. echo '<li><input type="radio" name="folder" value="'.$dir.'" />'.$dir.'</li>';
  13. echo '</ul>';
  14. echo '<input type="submit" value="Wybierz folder" name="btn" />';
  15. echo '</form>';
  16. }
  17.  
  18. $folder = $_POST['folder']
  19.  
  20. $dir = "archiwum".'/'."$folder";
  21.  
  22. if ( $handle = opendir ( $dir ) )
  23. {
  24. while ( false !== ( $file = readdir ( $handle ) ) )
  25. {
  26. if ( ( $file != '.' ) && ( $file != '..' ) )
  27. {
  28. $files[] = $file;
  29. }
  30. }
  31. closedir ( $handle );
  32. }
  33.  
  34. if ( !empty ( $files ) )
  35. {
  36. sort ( $files );
  37.  
  38. <fieldset>
  39. <legend>Pliki w aktualnie wybranym katalogu</legend>
  40. <table align="center" border="1" width="100" cellpadding="0" cellspacing="0">
  41. <tr>
  42. <td>Nazwa pliku na serwerze</td>
  43. <td>Plik</td>
  44. <td>Usuń plik</td>
  45. </tr>';
  46.  
  47. for($i = 0, $c = count($files); $i < $c; $i++) {
  48.  
  49. $names[] = pathinfo($files[$i], PATHINFO_FILENAME);
  50.  
  51. echo '<tr>
  52. <td>'.$files[$i].'</td>
  53. <td>'.$names[$i].'</td>';
  54.  
  55.  
  56. if (isset($_GET['usun'])){
  57. $usun = $_GET['usun'];
  58.  
  59. if(file_exists($dir.'/'.$usun) & $usun!=""){
  60. unlink($dir.'/'.$usun);
  61. }
  62. }
  63.  
  64. if (($files[$i] != '.') & ($files[$i] != '..') & ($files[$i]!= "")& !is_dir($files[$i])) {
  65. echo "<td><a title=\"Klknij, aby usunąć plik z serwera\" href=\"java script:confirmDelete2('index.php?akcja=pokaz_archiwum&amp;usun=$files[$i]')\">$names[$i]</a></td>";
  66.  
  67. }
  68. echo'</tr>';
  69. }
  70.  
  71. if ($usun)
  72. {
  73. echo 'Plik usunięty!';
  74. }
  75.  
  76. echo '</table></fieldset>';
  77. }
  78. ?>

  1. </body>
  2. </html>
timon27
Strzelam że masz podwójnie folder w ścieżce - $files chyba zawiera nazwy plików z pełną ścieżką? Jeśli tak to niepotrzebnie w module 'usuń' doklejasz z przodu $folder.
felixk
Pliki już się usuwają, ale dopiero po tym jak odświeżę drugi raz stronę a nie od razu po header. Po kliknięciu w link usuwający tworzy się adres index.php?akcja=pokaz_archiwum&usun=nazwapliku i dopiero jak na tym odświeżę to usunie. Poniżej kod

  1. echo '<form name="form" action="" method="post">';
  2. $dir = $_SERVER['DOCUMENT_ROOT'].'/dokumenty/wypoczynek_letni/archiwum/';
  3. $src = $dir;
  4. $kat = $dir;
  5. $katalog = opendir($kat);
  6. while($kat = readdir($katalog)) {
  7. if(is_dir($src.$kat) && $kat != "." && $kat != "..") {
  8. $sort_kat[] = $kat;
  9. }
  10. }
  11. sort($sort_kat);
  12. echo '<ul style="list-style: none">';
  13. while(list($key,$val) = each($sort_kat)) {
  14. $sciezka = $dir.$val;
  15. echo '<li><input type="radio" name="folder" value="'.$sciezka.'" />'.$val.'</li>';
  16. }
  17. echo '</ul>';
  18. echo '<input type="submit" value="Wybierz folder" name="btn" />';
  19. echo '</form>';
  20.  
  21.  
  22. $dirr = $_POST['folder'];
  23. echo $dirr;
  24.  
  25. if ( $handle = opendir ( $dirr ) )
  26. {
  27. while ( false !== ( $file = readdir ( $handle ) ) )
  28. {
  29. if ( ( $file != '.' ) && ( $file != '..' ) )
  30. {
  31. $files[] = $file;
  32. }
  33. }
  34. closedir ( $handle );
  35. }
  36.  
  37.  
  38.  
  39. if ( !empty ( $files ) )
  40. {
  41. sort ( $files );
  42.  
  43. <fieldset>
  44. <legend>Pliki w aktualnie wybranym katalogu</legend>
  45. <table align="center" border="1" width="100" cellpadding="0" cellspacing="0">
  46. <tr>
  47. <td>Nazwa pliku na serwerze</td>
  48. <td>Plik</td>
  49. <td>Usuń plik</td>
  50. </tr>';
  51.  
  52. for($i = 0, $c = count($files); $i < $c; $i++) {
  53.  
  54. $names[] = pathinfo($files[$i], PATHINFO_FILENAME);
  55.  
  56. echo '<tr>
  57. <td>'.$files[$i].'</td>
  58. <td>'.$names[$i].'</td>';
  59.  
  60.  
  61. if (isset($_GET['usun'])){
  62. $usun = $_GET['usun'];
  63.  
  64. if(file_exists($dirr.'/'.$usun) & $usun!=""){
  65. unlink($dirr.'/'.$usun);
  66. echo $usun;
  67. }
  68. }
  69.  
  70. if (($files[$i] != '.') & ($files[$i] != '..') & ($files[$i]!= "")& !is_dir($files[$i])) {
  71. echo "<td><a title=\"Klknij, aby usunąć plik z serwera\" href=\"java script:confirmDelete2('index.php?akcja=pokaz_archiwum&amp;usun=$files[$i]')\">$names[$i]</a></td>";
  72.  
  73. }
  74. echo'</tr>';
  75. }
  76.  
  77. if ($usun)
  78. {
  79. header ("Location: index.php?akcja=pokaz_archiwum");
  80. }
  81.  
  82. echo '</table></fieldset>';
  83. }
  84.  
  85. else
  86. {
  87. echo 'Brak plików...';
  88. }
nospor
Wszystko sie usuwa jak nalezy, juz za pierszym razem, tylko ze jak ty mieszasz kasowanie z wyswietlaniem i nawet jak dany plik skasujesz to nadal go wyswietlasz na liscie, to nie dziw sie ze on na tej liscie nadal jest :/

A header ci nie dziala bo przed header slesz mase kodu do przegladarki a tak byc nie moze.

To sie robi tak, ze najpierw sie kasuje, a dopiero potem wyswietla liste i wowczas wszystko dziala wizualnie od razu i to bez zadnego header
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.