Mehrere Dateien mittels array und unlink löschen

qsrs

Erfahrenes Mitglied
Hallo,

habe ein Skript geschrieben, welches auch Uploads verwaltet. Jetzt ist es möglich, sich alle Dateien tabellarisch ausgeben zu lassen. In jeder Spalte ist eine Checkbox welche die Funktion hat, die Datei/en zu löschen. Da es mehrere sein können, löse ich es über ein Array. Das Löschen aus der Datenbank funktioniert auch, nur die Unlink-Funktion nicht. Hier wird versucht immer den ersten Datensatz, der ausgegeben wird, zu löschen.

Ich gebe in der Anzeige folgende Werte in versteckten Feldern mit:
PHP:
 <td><input name=\"del[]\" type=\"checkbox\" id=\"del[]\" value=\"".$array[$i][id]."\">
<input name=\"maincategory[]\" type=\"hidden\" id=\"maincategory[]\" value=\"".$array[$i][maincategory]."\">
<input name=\"subcategory[]\" type=\"hidden\" id=\"subcategory[]\" value=\"".$array[$i][subcategory]."\">
<input name=\"file_name[]\" type=\"hidden\" id=\"file_name[]\" value=\"".$array[$i][file_name]."\"></td>
Löschvorgang:
PHP:
if ($action == "delete") {
for ($i = 0; $i < count($del); $i++) {
unlink ("../../files/".$maincategory[$i]."/".$subcategory[$i]."/".$file_name[$i]."");
$sql3 = "DELETE FROM `$dbtable5` WHERE `id` = '".$del[$i]."'";
mysql_query ($sql3, $dbconnect);
}
}
 
Hallo...

schwierig das anhand der Codeschnipsel zu lösen, lass Dir doch mal Deine hidden fields mit nem echo ausgeben, dann siehst Du ja schonmal, ob Deine Tabelle richtig gefüllt wird,
wenn ja würde ich noch die unlink Befehl debuggen. Einfach mal den ganzen String nen echo davor, ob da alles richtig zusammengesetz wird.

VG Clemens
 
Habe beides mit echo getestet.

1. Die Werte in den versteckten Feldern stimmen alle.

2. Die For Schleife.
Es ist so, das alles stimmt (Pfade, Zuordnungen etc.), nur stimmt das was ich ausgewählt habe, überhaupt nicht. Wenn ich 2 Dateien auswähle, werden einfach die zwei ersten Datensätze ausgegeben, egal ob ich andere ausgewählt habe. Sind es 3, werden immer die ersten 3 ausgegeben usw.

Was mache ich falsch?
 
In der Zeile ...
Code:
unlink ("../../files/".$maincategory[$i]."/".$subcategory[$i]."/".$file_name[$i]."");
...läßt Du Dir ja immer nur die Arraystelle $i ausgeben. Da die Schleife mit 0 beginnt und count(Array) als Abbruchkriterium hat, bekommst Du immer alle Stellen von 0 - (Anzahl Deiner ausgewählten Boxen) ausgegeben.

Wenn Du statt dessen...
Code:
unlink (../../files/".$maincategory[$del[$i]]."/".$subcategory[$del[$i]]."/".$file_name[$del[$i]].")
.... schreibst, greifst Du nur die Nummern heraus deren id im $del - Array gespeichert sind.

Ich denke das ist des Rätsels Lösung...
Schönen Abend Clemens
 
Danke für die Antwort. Habe ich versucht. Jetzt werden leider gar keine Werte ausgegeben, also mit echo wird Folgendes ausgegeben: ../../files///

Ich denke aber, dass das die richtige Richtung ist. Hast Du noch eine Idee?
 
Fehlt da bei <input name="del[]\" ... nicht ein \ vor dem " im Namen?
Vielleicht hilft das weiter.

redlama
 
Hallo redlama,

nein, das wurde beim Posten nur nicht angenommen. Versuch mal den Code zu kopieren und ein \ davor zu stellen, klicke auf Vorschau und Du wirst sehen, dass es nicht angenommen wird. Oft wird auch die Formatierung angezeigt, statt übernommen zu werden. Sowas sieht man auch häufiger: Text
Liegt wohl am WYSIWYG-Editor.
 
Hm... dann liegt es vermutlich noch an der checkbox im Formular...
es kommen vermutlich keine Werte an, weil die id der checkbox größer ist als die tatsächlich vorhandenen Arraystellen.

Wenn die Chechbox mit dem Wert x gesetzt ist, soll die dazugehörige Datei (maincategory[x]/subcategory[x]/file_name[x]) gelöscht werden... hmm...
also müsste eigentlich das del[] Array auch von 0 ab hochgezählt werden, anstatt den Wert der Variable $array[$i][id] zu enthalten.

Probier doch mal
Code:
<input name="del[]\" type=\"checkbox\" id=\"del[]\" value=\"".$i."\">

...viel Erfolg!
 
Hallo Clemens,

danke für deine bisherige Hilfe. Habe ich jetzt versucht. Das Ergebnis ist jetzt leider wie am Anfang. Es werden immer die Daten, ab dem ersten Datensatz angezeigt. Egal welche ich ausgewählt habe. Ich trete wieder mal auf der Stelle.
 
Hast Du schon mal versuch an Stelle des unlink ein echo zu machen, um zu sehen, was er Dir ausgibt? Und das gleiche auch mit dem SQL Query?
So versuche ich immer meinen Fehlern auf die Schliche zu kommen.

redlama
 
Zurück