tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
1815
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    Feb 2004
    Ort
    Merseburg
    Beiträge
    406
    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-Code:
    $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.
     

  2. #2
    MiLa MiLa ist offline Mitglied Smaragd
    Registriert seit
    Aug 2003
    Beiträge
    1.166
    PHP-Code:
    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
     

  3. #3
    Registriert seit
    Feb 2004
    Ort
    Merseburg
    Beiträge
    406
    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.
     

  4. #4
    Avatar von Ben Ben
    Ben Ben Ben Ben ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Raum FFM
    Beiträge
    1.364
    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-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']); 
    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.
     

  5. #5
    MiLa MiLa ist offline Mitglied Smaragd
    Registriert seit
    Aug 2003
    Beiträge
    1.166
    Probiers doch aus, oder les http://www.php.net/foreach ...
    Soweit ich weiss geht es nicht.

    Ah, da war jmd. schneller...
     

  6. #6
    Registriert seit
    Feb 2004
    Ort
    Merseburg
    Beiträge
    406
    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-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();

    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.
     

  7. #7
    Avatar von Ben Ben
    Ben Ben Ben Ben ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Raum FFM
    Beiträge
    1.364
    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-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']); 
    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.
    Geändert von Ben Ben (05.08.04 um 10:04 Uhr)
     

  8. #8
    Registriert seit
    Feb 2004
    Ort
    Merseburg
    Beiträge
    406
    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" />
     

  9. #9
    Avatar von Ben Ben
    Ben Ben Ben Ben ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Raum FFM
    Beiträge
    1.364
    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

  1. Löschen mehrere IDs
    Von crashx im Forum PHP
    Antworten: 3
    Letzter Beitrag: 14.12.06, 16:33
  2. Mehrere SQL-Datensätze löschen
    Von ULtImateFreak im Forum PHP
    Antworten: 3
    Letzter Beitrag: 19.05.05, 17:05
  3. Antworten: 19
    Letzter Beitrag: 14.04.05, 12:26
  4. Antworten: 1
    Letzter Beitrag: 23.06.03, 16:09
  5. Mehrere Ebenen löschen?
    Von Xardul im Forum Photoshop
    Antworten: 3
    Letzter Beitrag: 25.02.02, 18:13