willy96: Checkbox

Hallo

Ich habe eine hoffentlich kleine Frage zu Checkboxen.

Und zwar würde ich gerne einen Ordner Auslesen und die enthaltenen Dateien als Auswahlfeld oder Checkboxen ausgeben lassen. Sprich alle Dateien in dem Ordner sollen als Checkboxen oder in einem Auswahlfeld erscheinen und man soll eine oder mehrere auswählen können.
Dies soll möglichst Dynamisch sein also wenn man eine Datei löscht oder einen Anderen Ordner ausliest dennoch die richtigen Ergebnisse bekommt.

Gedacht ist das alles für einen Webserver (apache) dass man nach dem Upload auch die Möglichkeit hat die Dateien in dem Enthaltenen Ordner wieder zu löschen.

Vielen Dank schonmal :)

Gruß willy96

  1. Hello Willi,

    Ich habe eine hoffentlich kleine Frage zu Checkboxen.

    Und zwar würde ich gerne einen Ordner Auslesen und die enthaltenen Dateien als Auswahlfeld oder Checkboxen ausgeben lassen. Sprich alle Dateien in dem Ordner sollen als Checkboxen oder in einem Auswahlfeld erscheinen und man soll eine oder mehrere auswählen können.
    Dies soll möglichst Dynamisch sein also wenn man eine Datei löscht oder einen Anderen Ordner ausliest dennoch die richtigen Ergebnisse bekommt.

    Gedacht ist das alles für einen Webserver (apache) dass man nach dem Upload auch die Möglichkeit hat die Dateien in dem Enthaltenen Ordner wieder zu löschen.

    Dafür benötigst Du serverseitig eine aktive Lösung, also z.B. ein Script in PHP, Perl, ...

    Und dann solltest Du dieses Vorhaben auf jeden Fall mit einer Session umsetzen, sodass Du die Möglichkeit zu einer "Vorwärts-Rückwärts"-Absicherung hast, also die Dateinamen übersetzen lassen kannst.

    Beispiel:

    Beim Request auf die Ressource (z.B. das PHP-Script) liest dies die Dateinamen im
       gewünschtren Pfad aus und trägt Pfad und Dateinamen in ein Array in der Session ein.
       Der Index des Arrays und der Dateiname werden dann ins Formular geschrieben, dass
       du dem Client sendest. Wenn der Client nun eine Checkbox auswählt und wieder einen
       Request auslöst, werden die Indexe (und ggf. auch die Dateinamen) wieder an die
       Ressource gesendet. Nur, wenn der Index (und der Dateiname) auch im Array vorhanden
       sind, darf die Datei gelöscht werden.

    Noch eine Stufe mehr wäre es, den Index auch noch als Unique-Zufallszahl zu gestalten.

    Wenn Du nur den Dateinamen benutzen würdest ohne vorher das Kontrollarray zu schreiben, könnte der Client jede beliebige Datei (ggf. auch in anderen Pfaden) als Löschauftrag bestimmen.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hi Habe das Ganze jetzt mithilfe eines PHP Scriptes was ich gefunden habe gelöst allerdings löscht er die Dateien nicht richtig. Kann mir jemand sagen was ich falsche gemacht habe? Vielen Dank :)

      Das Script:

      <html>

      <TITLE>DIR</TITLE>

      <BODY>

      <?php

      /* **************************************************************

      dir.php3
      
      
      
      A script to manage files on your web
      
      
      
      Questions, comments, bug reports to : yannickf@yahoo.com
      
      SourceForge project phpFileManager:
      
      http://sourceforge.net/project/?group_id=1640
      
      
      
      
      
      **************************************************************
      
      History
      
      Version 0.1	
      
      				first release
      
      
      
      Version 0.2	Feb 21 2000
      
      				bug correction
      
      
      
      Version 0.3	Feb 22 2000
      
      				change sort algo
      
      				add icons before files
      
      				set display for atime, ctime, utime
      
      
      
      **************************************************************
      

      */

      function cmp( $a, $b )

      {

      GLOBAL $sort;
      
      
      
      if( $a->inode == $b->inode )
      
      	return 0;
      
      
      
      switch( $sort )
      
      {
      
        case "size":
      
      		return ($a->size > $b->size) ? -1 : 1;
      
        case "type":
      
      		return strcmp($a->type, $b->type);
      
        case "view":
      
      		return strcmp($a->view, $b->view);
      
        case "atime":
      
      		return ($a->atime > $b->atime) ? -1 : 1;
      
        case "ctime":
      
      		return ($a->ctime > $b->ctime) ? -1 : 1;
      
        case "mtime":
      
      		return ($a->mtime > $b->mtime) ? -1 : 1;
      
        case "group":
      
      		return strcmp($a->group, $b->group);
      
        case "inode":
      
      		return ($a->inode > $b->inode) ? -1 : 1;
      
        case "owner":
      
      		return strcmp($a->owner, $b->owner);
      
        case "perms":
      
      		return ($a->perms > $b->perms) ? -1 : 1;
      
        case "ext":
      
      		return strcmp($a->ext, $b->ext);
      
        case "name":
      
        default:
      
      		return 1;
      
      }
      

      }

      function getIcons( $ext )

      {

      switch( $ext )
      
      {
      
      	case "dir":
      
      		$file = "dir";
      
      		break;
      
      	case "link":
      
      		$file = "link";
      
      		break;
      
      	case "zip":
      
      	case "tgz":
      
      	case "gz":
      
      	case "Z":
      
      		$file = "compressed";
      
      		break;
      
      	case "gif":
      
      	case "jpg":
      
      		$file = "image2";
      
      		break;
      
      	case "dvi":
      
      		$file = "dvi";
      
      		break;
      
      	case "":
      
      	case "exe":
      
      		$file = "binary";
      
      		break;
      
      	case "sh":
      
      	case "php":
      
      	case "php3":
      
      	case "sql":
      
      	case "inc":
      
      	case "js":
      
      		$file = "script";
      
      		break;
      
      	case "txt":
      
      		$file = "text";
      
      		break;
      
      	case "html":
      
      	case "shtml":
      
      	case "phtml":
      
      		$file = "world1";
      
      		break;
      
        default:
      
      		$file = "generic";
      
      		break;
      
      }
      
      
      
      return $IMG="<IMG SRC='icons/".$file.".gif'>";
      

      }

      class MyFile {

      var $name;
      
      var $path;
      
      var $type;
      
      var $ext;
      
      var $stype;
      
      var $sfile;
      
      var $size;
      
      var $file;
      
      var $atime;
      
      var $ctime;
      
      var $mtime;
      
      var $group;
      
      var $inode;
      
      var $owner;
      
      var $perms;
      
      
      
      function set( $filename, $path )
      
      {
      
      	GLOBAL $cd;
      
      
      
      	$this->name  = $filename;
      
      	$this->path  = $path    ;
      
      	$this->file  = $this->path."/".$this->name;
      
      
      
      	$this->type  = filetype( $this->file );
      
      	$this->size  = filesize( $this->file );
      
      	$this->atime = fileatime( $this->file );
      
      	$this->ctime = filectime( $this->file );
      
      	$this->mtime = filemtime( $this->file );
      
      	$this->group = filegroup( $this->file );
      
      	$this->inode = fileinode( $this->file );
      
      	$this->owner = fileowner( $this->file );
      
      	$this->perms = fileperms( $this->file );
      
      	
      
      	switch( $this->type )
      
      	{
      
      		case "link":
      
      			$this->sfile = readlink( $this->file  );
      
      			$this->stype = filetype( $this->sfile );
      
      			$this->ext   = "link";
      
      			break;
      
      		case "file":
      
      			$list = explode( ".", $this->name );
      
      			$nb = sizeof( $list );
      
      			if( $nb > 0 )
      
      				$this->stype = $list[$nb-1];
      
      			else
      
      				$this->stype = "???";
      
      
      
      			$this->ext   = $this->stype;
      
      
      
      			switch( $this->stype )
      
      			{
      
      			  case "gif":
      
      			  case "GIF":
      
      			  case "jpg":
      
      			  case "JPG":
      
      					if( isset( $cd ) )
      
      						$pwd = $cd."/";
      
      					else
      
      					  $pwd = "";
      
      
      
      					$this->sfile = "<IMG SRC='".$this->file."'>";
      
      					break;
      
      			  default:
      
      					$this->sfile = $this->stype;
      
      					break;
      
      			}
      
      			break;
      
      	  default:
      
      			$this->stype = "";
      
      			$this->sfile = "";
      
      			$this->ext   = $this->type;
      
      			break;
      
      	}
      
      }
      
      
      
      function formatSize()
      
      {
      
      	return number_format( $this->size, 0, ".", " ");
      
      }
      

      }

      function genUrl( $ref, $args, $key = "", $val = "" )

      {

      $valist = "";
      
      
      
      reset( $args );
      
      
      
      if( $key != "" )
      
      	$args[ "$key" ] = $val;
      
      
      
      if( !is_array( $args ) )
      
      	return $ref;
      
      
      
      while( list( $key, $val ) = each( $args ) )
      

      {

      	if( $val == "" )
      
      		continue;
      
      
      
      	if( $valist == "" )
      
      		$valist .= "?";
      
      	else
      
      		$valist .= "&";
      
      
      
      	$valist .= $key."=".$val;
      
      }
      
      return $ref.$valist;
      

      }

      function updir( $path )

      {

      $last = strrchr( $path, "/" );
      
      $n1   = strlen( $last );
      
      $n2   = strlen( $path );
      
      return substr( $path, 0, $n2-$n1 );
      

      }

      $ref = "dir.php3";

      if( isset( $cd ) )

      {

      $path = $cd;
      
      //$lcd = "?cd=$cd'";
      
      $args[ "cd" ] = $cd;
      

      }

      else

      {

      $path = ".";

      //$lcd = "";
      
      $args[ "cd" ] = "";
      

      }

      if( isset( $nb ) )

      {

      for( $i = 0; $i < $nb; $i++ )
      
      {
      
      	$var = "id_$i";
      
      	if( isset( $$var ) )
      
      	{
      
      		$file = $path."/".$$var;
      
      		if( is_file( $file ) || is_link( $file ) )
      
      		{
      
      			if( unlink( $file ) )
      
      				echo "<BR><b>$file</b> deleted\n";
      
      			else
      
      				echo "<BR>unable to delete <b>$file</b>\n";
      
      		}
      
      		elseif( is_dir( $file ) )
      
      		{
      
      			if( rmdir( $file ) )
      
      				echo "<BR><b>$file</b> deleted\n";
      
      			else
      
      				echo "<BR>unable to delete <b>$file</b>\n";
      
      		}
      
      	}
      
      }
      

      }

      $step = 100;

      if( !isset( $sort ) )

      $sort = "name";
      

      else

      $args[ "sort" ] = $sort;
      

      if( !isset( $from ) )

      $from = 0;
      

      else

      $args[ "from" ] = $from;
      

      if( !isset( $to ) )

      $to   = $from + $step;
      

      $d = dir($path);

      echo "\n";

      echo "<br><a href=$ref >Home</a>\n";

      $updir = updir($d->path);

      if( $updir != "." )

      echo "<br>Up dir; <a href=$ref?cd=$updir>$updir</a>\n";
      

      echo "<br>cd: <a href=$ref?cd=".$d->path."/..>..</a>\n";

      echo "<br>Chemin: <b>".$d->path."</b>\n";

      $n    = 0;

      while( $entry=$d->read() )

      {

      $lFiles[ $n ] = new MyFile;
      
      $lFiles[ $n ]->set( $entry, $path );
      
      $n++;
      

      }

      $d->close();

      echo "<FORM NAME='del' METHOD='post' ACTION='".genUrl( $ref, $args )."'>\n";

      echo "<TABLE BORDER=1>\n";

      echo "<TR>\n";

      echo "<TH>D</TH>\n";

      //  echo "<TH><a href='".genUrl( $ref, $args, "sort", "type" )."'>Type</a></TH>\n";

      echo "<TH><a href='".genUrl( $ref, $args, "sort", "name" )."'>Name</a></TH>\n";

      echo "<TH><a href='".genUrl( $ref, $args, "sort", "size" )."'>Size</a></TH>\n";

      echo "<TH><a href='".genUrl( $ref, $args, "sort", "ext"   )."'>ext</a></TH>\n";

      echo "<TH><a href='".genUrl( $ref, $args, "sort", "atime" )."'>atime</a></TH>\n";

      echo "<TH><a href='".genUrl( $ref, $args, "sort", "ctime" )."'>ctime</a></TH>\n";

      echo "<TH><a href='".genUrl( $ref, $args, "sort", "mtime" )."'>mtime</a></TH>\n";

      echo "<TH><a href='".genUrl( $ref, $args, "sort", "perms" )."'>perms</a></TH>\n";

      echo "<TH><a href='".genUrl( $ref, $args, "sort", "group" )."'>group</a></TH>\n";

      echo "<TH><a href='".genUrl( $ref, $args, "sort", "owner" )."'>owner</a></TH>\n";

      echo "<TH><a href='".genUrl( $ref, $args, "sort", "inode" )."'>inode</a></TH>\n";

      echo "<TH>View</TH>\n";

      echo "</TR>\n";

      @usort( $lFiles, cmp );

      for( $i = 0; $i < $n; $i++ )

      {

      if( ( $i < $from ) || ( $i >= $to ) )
      
      	continue;
      
      
      
      $k = $i;
      
      echo "<TR>\n";
      
      echo "<TD><INPUT TYPE='checkbox' NAME='id_$k' VALUE='".
      
      	$lFiles[ $k ]->name
      
      	."'></TD>\n";
      
      
      
      $IMG=getIcons( $lFiles[ $k ]->ext );
      
      
      
      $dform = "M j y H:i";
      

      //   echo "<TD ALIGN=CENTER >".$lFiles[ $k ]->type."</TD>\n";

      echo "<TD>$IMG".$lFiles[ $k ]->name."</TD>\n";
      
      echo "<TD ALIGN=RIGHT  >".$lFiles[ $k ]->formatSize()."</TD>\n";
      
      echo "<TD>".$lFiles[ $k ]->ext  ."</TD>\n";
      
      echo "<TD>".date( $dform, $lFiles[ $k ]->atime )."</TD>\n";
      
      echo "<TD>".date( $dform, $lFiles[ $k ]->ctime )."</TD>\n";
      
      echo "<TD>".date( $dform, $lFiles[ $k ]->mtime )."</TD>\n";
      
      echo "<TD>".$lFiles[ $k ]->perms."</TD>\n";
      
      echo "<TD>".$lFiles[ $k ]->group."</TD>\n";
      
      echo "<TD>".$lFiles[ $k ]->owner."</TD>\n";
      
      echo "<TD>".$lFiles[ $k ]->inode."</TD>\n";
      
      
      
      switch( $lFiles[ $k ]->type )
      
      {
      

      case "link":

      		if( $lFiles[ $k ]->stype == "dir" )
      
      		{
      
      			$tcd = $lFiles[ $k ]->path."/".$lFiles[ $k ]->name;
      
      			echo "<TD><a href='".
      
      				genUrl( $ref, $args, "cd", $tcd )."'>".
      
      				$lFiles[ $k ]->sfile."</a></TD>\n";
      
      		}
      
      		else
      
      			echo "<TD>".$lFiles[ $k ]->sfile."</TD>\n";
      
      		break;
      
        case "dir":
      
      		$tcd = $lFiles[ $k ]->path."/".$lFiles[ $k ]->name;
      
      		echo "<TD><a href='".
      
      			genUrl( $ref, $args, "cd", $tcd )."'>".
      
      			$lFiles[ $k ]->name."</a></TD>\n";
      
      		break;
      
        case "file":
      
      		echo "<TD>".$lFiles[ $k ]->sfile."</TD>\n";
      
      		break;
      
        default:
      
      		echo "<TD>NO</TD>\n";
      
      		break;
      
      }
      
      echo "</TR>\n";
      

      }

      echo "</TABLE>\n";

      $from = $from - $step;

      if( isset( $cd ) )

      {

      echo "<INPUT TYPE='hidden' NAME='cd' VALUE='$cd'>\n";
      

      }

      echo "<INPUT TYPE='hidden' NAME='nb' VALUE='$n'>\n";

      //echo "<br>from=$from;to=$to;n=$n\n";

      echo "<br>\n";

      if( $from >=  0 )

      {

      echo "<a href='".
      
      	genUrl( $ref, $args, "from", $from )."' >Prev</a>/\n";
      

      }

      if( $to   <= $n )

      {

      echo "<a href='".
      
      	genUrl( $ref, $args, "from", $to )."'   >Next</a> \n";
      

      }

      echo "<br>\n";

      echo "<INPUT TYPE='submit' VALUE='Del'>\n";

      echo "</FORM>\n";

      ?>

      </body>

      </html>

      1. Kann man das irgendwie vereinfacht darstellen so steigt da ja keiner durch !?

        1. Hello,

          Kann man das irgendwie vereinfacht darstellen so steigt da ja keiner durch !?

          Du könntest das selber machen. Das wird dann vermutlich kompakter und sehr viel verständlicher.
          An diesem Script wird wohl eher keine Hand anlegen, denn es ist ja überhaupt nicht kommentiert.

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
           ☻_
          /▌
          / \ Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. Hello

            Alles klar werd mich mal ransetzen und es versuchen :)

            schöne Grüße willy96

            1. Hello,

              Alles klar werd mich mal ransetzen und es versuchen :)

              Denk an die Trennung von

              • Befehlsentgegennahme
              • Befehlsauswertung und Kontrolle
              • Datenbeschaffung
              • Datenzwischenspeicherung
              • Datenaufbereitung
              • Ausgabe

              Liebe Grüße aus dem schönen Oberharz

              Tom vom Berg

              --
               ☻_
              /▌
              / \ Nur selber lernen macht schlau
              http://bergpost.annerschbarrich.de
              1. Guten Morgen

                Ich habe jetzt einfach mein Upload Script genommen und dieses in ein Unlink Script umgewandelt.
                Kann man so etwas machen?
                Es Funktioniert !:)
                Nur leider öffnet sich dummerweise wenn man auf das Filefield klickt natürlich die Auswahl der Files auf dem eigenen Rechner.
                Meine Frage hier:
                Kann man dem Filefield sagen anstatt den eigenen Rechner zu browsen, den Server, oder einen Spezifischen Pfad, zu browsen ?

                Vielen Dank

                Grüße willy96

                1. Achso hier mal mein Script:

                  #!/usr/bin/perl

                  use strict;
                  use warnings;
                  use CGI qw(-utf8);
                  use File::Copy;
                  use CGI::Carp qw(fatalsToBrowser);
                  use File::Basename;
                  $CGI::POST_MAX = 300_000_000_000;

                  my $c = CGI->new;

                  if($c->param)
                  {
                          print $c->header(-charset => 'utf-8'), $c->h2('Result');

                  my $fh = $c->param('delfile');      # Get the FileHandle from temp-File
                          my $source = $c->tmpFileName($fh); # get the source filename
                          my $dest = $fh;                    # scalar context, origin filename from UserAgent
                          my $ref = [fileparse($dest)];      # Dateiname in [0]
                          print "Der Delete war Erfolgreich";
                          unlink $source, "/var/www/Fileserver/$ref->[0]";
                          print   $c->h2('Navigation'),
                                  $c->start_form( -enctype => 'multipart/form-data'),
                                  $c->button(-name => 'back', -value => 'back', -onclick => 'javascript:history.go(-1)'")
                                  $c->button(-name => 'back2', -value => 'zum Fileserver', -onclick => "location....")
                                  $c->end_form;

                  }

                  else{ # Erzeuge das Upload-Formular
                          print $c->header(-charset => 'utf-8'),
                                  $c->h2('send a file'),
                                  $c->start_form( -enctype => 'multipart/form-data'),
                                  $c->textfield(-name => 'delfile'),
                                  $c->submit(-name => 'remove', -value => 'Datei löschen'),
                                  $c->reset(-name => 'clear', -value => 'Feld löschen'),
                                  $c->button(-name => 'back', -value => 'Zurück zum Fileserver', -onclick => "location....")
                                  $c->end_form;
                          }

                2. Hier ist das Filefield das Textfield hatte es in Textfield umbenannt weil sich so nicht der Filebrowser öffnet :)

                  1. Bounjoun willy96,

                    Hier ist das Filefield das Textfield hatte es in Textfield umbenannt weil sich so nicht der Filebrowser öffnet :)

                    Wenn ich richtig verstehe, willst du folgendes:

                    1. User darf eine/mehrere Dateien uploaden
                       2. User darf überprüfen, welche Dateien im Verzeichnis sind und
                          ggfs. Dateien wieder entfernen

                    Den ersten Punkt hast du bereits gelöst.

                    Du suchst jetzt eine Lösung für den zweiten Punkt.

                    Und genauso, wie hier 2 Punkte aufgelistet sind, würde ich das ganze in zwei Schritten realisieren:

                    1. wie Punkt 1, nur enthält die Ausgabe des Upload-Skripts einen
                          Link, der wie folgt heißen könnte: Dateien jetzt überprüfen?
                       2. dieser Link verweist auf einem zweiten Skript oder eine Subroutine
                          des Upload-Skripts, die folgendes macht:

                    • mit opendir(), readdir() die Dateien im Verzeichnis ausliest
                             • mit grep die . und .. und evtl. Dateien, die der User nicht
                               sehen soll, entfernt
                             • die Elemente des verbliebenen Arrays in einer Schleife durch-
                               geht und eine Ausgabe mit den Dateinamen und einer Checkbox
                               davor erstellt. Das ist ein Formular, das beim Submit das
                               Skript wieder aufruft, das dann mit unlink() die zum Löschen
                               ausgewählten Dateien entfernt

                    In Perl in kurzer Zeit erledigt.

                    Adiou.

                    --
                    Ich bin eigentlich ganz anders, aber ich komme so selten dazu. - Ödön von Horwáth
                    Ist Rudi Carrell Gott? Oder George Harrison Ford?
                    Ich bin faul und das ist gut so.
                    1. Hello P.,

                      • die Elemente des verbliebenen Arrays in einer Schleife durch-
                                 geht und eine Ausgabe mit den Dateinamen und einer Checkbox
                                 davor erstellt. Das ist ein Formular, das beim Submit das
                                 Skript wieder aufruft, das dann mit unlink() die zum Löschen
                                 ausgewählten Dateien entfernt

                      Und eben genau hier liegt der Fehler. Löschen ohne Session ist Genickbruch auf Raten für den Server. Es darf keinesfalls der per Post übertragene Klartextname der Datei dazu benutzt werden, diesen direkt in die Unlink-Anweisung einzusetzen.

                      Hier muss dringend nochmal überprüft werden, ob dieser Name auch in der Liste der erlaubten Dateien vorhanden ist, also ob der Pfad zum Verzeichnis passt und der User die Datei überhauot löschen darf.

                      Sonst könnte jede Datei des Systems, auf die der Perl-User passende Rechte hat, gelöscht werden.

                      Liebe Grüße aus dem schönen Oberharz

                      Tom vom Berg

                      --
                       ☻_
                      /▌
                      / \ Nur selber lernen macht schlau
                      http://bergpost.annerschbarrich.de
                      1. Bounjoun Tom,

                        Sonst könnte jede Datei des Systems, auf die der Perl-User passende Rechte hat, gelöscht werden.

                        Klar, Sicherheitsmaßnahmen müssen her.

                        Adiou.

                        --
                        Ich bin eigentlich ganz anders, aber ich komme so selten dazu. - Ödön von Horwáth
                        Ist Rudi Carrell Gott? Oder George Harrison Ford?
                        Ich bin faul und das ist gut so.
                        1. Hello P.,

                          Sonst könnte jede Datei des Systems, auf die der Perl-User passende Rechte hat, gelöscht werden.

                          Klar, Sicherheitsmaßnahmen müssen her.

                          Nur, um das nochmal kalr auszusprechen. Man könnte ja denken, "wieso? ich habe doch nur die Namen der vorhandenen Dateien angeboten im Löschformular. Da kann der User vorm Client doch gar keinen anderen Dateien löschen".

                          Aber eben hier liegt ein häufiger Fehler. Der User vorm Client könnte per eigenem Formular oder sonstig selbst gestaltetem Request jeden ausgedachten Namen einsetzen. Und der würde dann auch zur Löschung eingesetzt werden...

                          Liebe Grüße aus dem schönen Oberharz

                          Tom vom Berg

                          --
                           ☻_
                          /▌
                          / \ Nur selber lernen macht schlau
                          http://bergpost.annerschbarrich.de
                    2. Re!

                      1. wie Punkt 1, nur enthält die Ausgabe des Upload-Skripts einen
                            Link, der wie folgt heißen könnte: Dateien jetzt überprüfen?

                      Alternativ kannst du gleich bei der Ausgabe des Uploads den zweiten Schritt einbauen: »Das Verzeichnis enthält nun folgende Dateien, die Sie wieder entfernen können«.

                      • mit opendir(), readdir() die Dateien im Verzeichnis ausliest
                               • mit grep die . und .. und evtl. Dateien, die der User nicht
                                 sehen soll, entfernt
                               • die Elemente des verbliebenen Arrays in einer Schleife durch-
                                 geht und eine Ausgabe mit den Dateinamen und einer Checkbox
                                 davor erstellt. Das ist ein Formular, das beim Submit das
                                 Skript wieder aufruft, das dann mit unlink() die zum Löschen
                                 ausgewählten Dateien entfernt

                      In Perl in kurzer Zeit erledigt.

                      Adiou.

                      --
                      Ich bin eigentlich ganz anders, aber ich komme so selten dazu. - Ödön von Horwáth
                      Ist Rudi Carrell Gott? Oder George Harrison Ford?
                      Ich bin faul und das ist gut so.