ERLEDIGT
NEIN
NEIN
ANTWORTEN
8
8
ZUGRIFFE
1815
1815
EMPFEHLEN
-
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:
Das sind jetzt die ID`s der Dateien und die Endung dazu, also datei-$attid.$attextPHP-Code:$attids=implode(',',$_POST['attid']);
$attext=implode(',',$_POST['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.
-
Das Ganze kannst du natürlich auch beliebig in eine Schleife einbauen, sollte keine Problem seinPHP-Code:
if(file_exists("datei-".$attid.".".$attext))
{
unlink("datei-".$attid.".".$attext);
}
-
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:
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.PHP-Code: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']);
-
Probiers doch aus, oder les http://www.php.net/foreach ...
Soweit ich weiss geht es nicht.
Ah, da war jmd. schneller...
-
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:
Der muß doch irgendwie dazu zu bringen sein, daß er dies löscht.PHP-Code: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();
}
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:
Aber geht eben wieder mal von der Annahme aus, dass die beiden Postvariablen identisch sind, sprich beide kein Array oder ein Array mitPHP-Code:
$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']);
gleicher Anzahl sind.Geändert von Ben Ben (05.08.04 um 10:04 Uhr)
-
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-Code:<input type="hidden" name="attext" value="$attext" />
Ähnliche Themen
-
Löschen mehrere IDs
Von crashx im Forum PHPAntworten: 3Letzter Beitrag: 14.12.06, 16:33 -
Mehrere SQL-Datensätze löschen
Von ULtImateFreak im Forum PHPAntworten: 3Letzter Beitrag: 19.05.05, 17:05 -
Mehrere Dateien mittels array und unlink löschen
Von qsrs im Forum PHPAntworten: 19Letzter Beitrag: 14.04.05, 12:26 -
Kontroverse: mehrere Dateien oder mehrere Funktionen?!
Von ludz im Forum PHPAntworten: 1Letzter Beitrag: 23.06.03, 16:09 -
Mehrere Ebenen löschen?
Von Xardul im Forum PhotoshopAntworten: 3Letzter Beitrag: 25.02.02, 18:13





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren