Dateien aus Verzeichnissen mit Checkbox löschen

qsrs

Erfahrenes Mitglied
Hallo,

ich lese Verzeichnisse mit folgendem Skript aus:
PHP:
 $dirname = "library/languages/";
 $files = array();
 $dir = opendir ($dirname);
  while ($file = readdir ($dir)) {
   if (($file != ".") && ($file != "..")) {
    if (is_file ($dirname."/".$file)) {
    $files[] = $file;
    }
   }
  }
 closedir ($dir);
 sort ($files);

Jetzt möchte ich die aufgelisteten Dateien löschen. Es wird jeweils eine Checkbox pro Datei ausgegeben:
PHP:
<input name=\"select[]\" type=\"checkbox\" id=\"select[]\" value=\"".$i."\">
Jetzt schicke ich das Formular ab an eine Datei, in der ich mit folgendem Skript versuche, die selektierten Dateien zu löschen:
PHP:
 $dirname = "library/languages/";
 $files = array();
 $dir = opendir ($dirname);
  while ($file = readdir ($dir)) {
   if (($file != ".") && ($file != "..")) {
    if (is_file ($dirname."/".$file)) {
    $files[] = $file;
    }
   }
  }
 closedir ($dir);
 sort ($files);
 for ($i2 = 0; $i2 < count ($select); $i2++) {
  $file_delete = substr ($select[$i2], 0, -4);
  if (!unlink ("library/languages/".$file_delete.".php"))) {
   echo "Fehler";
   }
  }
Dieser Ansatz hat leider nicht geklappt. Was mache ich falsch?
 

Flex

(aka Felix Jacobi)
[phpf]error_reporting[/phpf] mal auf höchstes Level gestellt?

Ansonsten:

PHP:
for ($i2 = 0; $i2 < count ($select); $i2++) {
  $file_delete = substr ($select[$i2], 0, -4);
  if (!unlink ("library/languages/".$file_delete.".php"))) {
   echo "Fehler";
   }
  }

Bei "if (!unlink ("library/languages/".$file_delete.".php"))) {" öffnest du nur 2 Klammern (if und unlink), schließt aber 3. Da kann ja schonmal was nicht stimmen ;)
 

qsrs

Erfahrenes Mitglied
Habe das Skript gekürzt und dabei eine Klammer zuviel am Ende. Daran liegt es aber nicht. Fehler gibt er aus, und zwar das er die Datei/en nicht löschen kann, da sie nicht vorhanden sind ($file_delete ist leer).
 

Flex

(aka Felix Jacobi)
Beachtest du auch, dass [phpf]register_globals[/phpf] vielleicht deaktiviert ist und du deshalb auf $_POST['select'][x] zugreifen musst?
 

qsrs

Erfahrenes Mitglied
Ja, ganz sicher. Ich glaube eher, dass ich etwas in der for-Schleife falsch mache. Ich komme aber nicht darauf.
 

Flex

(aka Felix Jacobi)
Also ich habs mal ein wenig angepasst ( <form> zeigt auf die gleiche Datei ) und ein anderes Verzeichnis genommen und es funktioniert wunderbar...

Sind denn die Dateiberechtigungen richtig gesetzt?
 

Html

Erfahrenes Mitglied
Hallo arbeite an einem ähnlichen Script. Lese Bilder aus einem Ordner aus und möchte diese dann mit einer Checkbox löschen. Beim Auswählen einer Checkbox funktioniert alles.

Jedoch soll es auch möglich sein mehrere Bilder gleichzeitig zu löschen. Daher habe ich die Checkboy als Array deklariert. Es wird zwar erkannt wie wieviele Einträge das Array hat aber die einzelnen Inhalte werden nicht ausgelesen.

Warum?


PHP:
<?
$dirname = "bilder/Einsatz_2007/TN/";
$files = array();
$dir = opendir ($dirname);

while ($file = readdir ($dir)) {
   if (($file != ".") && ($file != "..")) {
   if (is_file ($dirname."/".$file)) {
   $files[] = $file;
    }
   }
  }
closedir ($dir);
sort ($files); 
 
echo"<form name='form2' method='post' action='ordner_auslesen.php'>";
 
for ($i2 = 0; $i2 < count ($files); $i2++) {

echo "<img src=bilder/Einsatz_2007/TN/".$files[$i2]."><input type='checkbox' name='test[]' value=".$files[$i2]."><br><br>";
   }
 
 
echo"<input type='submit' name='Löschen' value='Löschen'>";
 
 
if (isset($_POST['Löschen']))
{
echo count ($_POST['test']);

for ($i = 0; $i < count ($_POST['test']); $i++) {

echo $test[$i];

 
 //unlink ("bilder/Einsatz_2007/TN/".$delete[$i]);
 //unlink ("bilder/Einsatz_2007/GR/".$delete[$i]);
  
  } 
 }
 ?>
 

mAu

Erfahrenes Mitglied
Wird nichts ausgegeben weil $test != $_POST['test']. Du musst es wie folgt abändern...
PHP:
echo $test[$i];

// wird zu

echo $_POST['test'][$i];