mehrere Dateien löschen

low-group

Erfahrenes Mitglied
Hallo,

wie kann ich mehrere Dateien löschen, wenn ich bestimmte Daten der Dateien per $_Post übergeben bekomme?
Also so sieht es bis jetzt aus:

PHP:
$attids=implode(',',$_POST['attid']);
$attext=implode(',',$_POST['attext']);

Das sind jetzt die ID`s der Dateien und die Endung dazu, also datei-$attid.$attext

Wie kann ich diese über einen Befehl löschen und eventl. vorher abfragen, ob diese existieren. Mir geht es da mehr um die Schleife e.t.c.
 
PHP:
if(file_exists("datei-".$attid.".".$attext))
{
  unlink("datei-".$attid.".".$attext);
}

Das Ganze kannst du natürlich auch beliebig in eine Schleife einbauen, sollte keine Problem sein ;)
 
kann ich in einer Schleife 2 Sachen reinnehmen, also z.b.:

foreach($attids as $id AND $attext as $ext) ?

Da ich ja dann die ID`s und die Endung in einer Schleife brauche.
 
Wenn man davon ausgeht, dass die Beiden Arrays gleich viele Datensätze haben, denn für jede ID eine Endung kannst du das mit ner While-Schleife machen:

PHP:
while( list($key,$val) = each($_POST['attid']) )
{
  if(file_exists("datei-".$val.".".$_POST['attext'][$key])
{
  unlink("datei-".$val.".".$_POST['attext'][$key]);
}

//Falls du attid später nochmal druchlaufen willst
reset($_POST['attid']);

Denn beide Arrays sind indiziert und haben somit die gleichen Inidzes es sei denn sie wurden verändert. Somit kann man die ID vom akutllen Attidelement ($key) zum auslesen des Wertes von atttext nehmen.
 
so nach etlichen Versuchen ging es immer noch nicht, nach den obigen Code, kam immer nur der erste Buchstabe der Endung raus, keine Ahnung wieso.

nun habe ich es so gemacht, sodaß ich die extension nochmal aus der DB auslese und dort in der while-Schleife diese Datei löschen will, nur der löscht die immer nochnicht. Ordnerrechte und Dateirechte haben alle 777.

Nun hier mein richtiger komplette Code:

PHP:
  if(isset($_POST['action']) && $_POST['action']=="delmark") {
  $attids=implode(',',$_POST['attid']);

   $db->query("DELETE FROM bb".$n."_attachments WHERE attachmentid IN (".addslashes($attids).")");
      $db->unbuffered_query("UPDATE bb".$n."_posts SET attachmentid=0 WHERE userid='$wbbuserdata[userid]' AND attachmentid IN (".addslashes($attids).")",1);

$result = $db->query("select attachmentextension FROM bb".$n."_attachments WHERE attachmentid IN (".addslashes($attids).")");
 while($row=$db->fetch_array($result)) {
$attend = $row['attachmentextension'];
$aid = $row['attachmentid'];
if(file_exists("attachments/attachment-".$aid.".".$attend))
{ 
 @unlink("attachments/attachment-".$aid.".".$attend);
} 
else
{
echo $aid.".".$attend."<br>";
}
}

header("Location: usercp.php?action=attachment&sid=$session[hash]");
 exit();
}

Der muß doch irgendwie dazu zu bringen sein, daß er dies löscht.
Ich habe vorher Radio-Buttons, wo ich verschiedene attids markiere zum löschen.

PS: es kommt keine Fehlermeldung, es wird nur der Eintrag in der DB gelöscht, aber die Datei nicht.
 
dann mach mal das @ vor dem unlink weg, da dies Fehlermeldungen unterdrückt.

Wenn bei dem Code aus meinem Post nur der erste Buchstabe genommen wird liegt es daran das es kein Array ist.... dann modifizieren wir das etwas:

PHP:
$attid  = (is_array($_POST['attid']))?($_POST['attid']):(array($_POST['attid']));
$attext = (is_array($_POST['attext']))?($_POST['attext']):(array($_POST['attext']));

while( list($key,$val) = each($attid) )
{
  if(file_exists("datei-".$val.".".attext[$key])
{
  unlink("datei-".$val.".".$attext[$key]);
}

//Falls du attid später nochmal druchlaufen willst
reset($_POST['attid']);

Aber geht eben wieder mal von der Annahme aus, dass die beiden Postvariablen identisch sind, sprich beide kein Array oder ein Array mit
gleicher Anzahl sind.
 
Zuletzt bearbeitet:
bei deinem Code kommt jetzt eine Fehlermeldung in deiner ersten Zeile:



Parse error: parse error, unexpected T_STRING in /home/www/doc/7189/low-group.de/www/Forum/usercp.php

achso nochwas, ich übergebe das $attext so, eventl. liegt ja der Fehler dort:


<input type="hidden" name="$attext" value="$attext" />
 
Zu meinem Code, ja beim Ternären Operator hatben 2 Klammern gefehlt habe ich verbessert. Warum er den Doppelpunkt als frown-image umwandelt im PHO-Code ist mir schleirhaft.

Zu deiner Übergabe, d.h. du kennst den Namen des Feldes nicht, da dieser dem Inhalt vo n $atttext entspricht. Sprich du übergibst einen Parameter bei dem Name und Wert identisch sind du ihn aber eigentlich nicht kennen kannst. Das $ müsste meines Erachtens daher weg:

PHP:
<input type="hidden" name="attext" value="$attext" />
 
Zurück