Avatar billede minus Nybegynder
28. maj 2008 - 12:22 Der er 10 kommentarer og
1 løsning

Funktion søges: Vælge filer fra en mappe og slette dem

Hej,

Som overskriften siger, så søger jeg en funktion hvor jeg kan markere elementer fra en mappe. Efter at have markeret disse elementer, kan man trykke på en knap, hvorefter de markerede filer vil blive slettet.

Spørg gerne, hvis det er lidt uforståeligt :)

Takker på forhånd
Avatar billede jakobdo Ekspert
28. maj 2008 - 14:36 #1
Jeg forstår det godt! :o)

Kunne du ikke lave en funktion som lister alle filer (med en checkbox og et unikt id eller lign) via glob() og så sletter filerne/mapperne med unlink() eller rmdir()
Avatar billede jl4511 Nybegynder
28. maj 2008 - 15:51 #2
Prøv denne:

<?php

function build_form($path_to_mappe)
{
  if ($dir = @opendir($path_to_mappe)) {
    echo "<form name='slette_form' method='post' action=''>\n";
    echo "<input name='action' value='slet' type='hidden'>\n";
    $cnt = 0;
    while ($file = readdir($dir)) {
      if (is_dir($path_to_mappe . $file)) continue;
      if ($file == '.' || $file == '..') continue;
           
      // Her bygges form-feltet
      $cnt++;
      echo "<input id='field_" . $cnt . "' name='files[]' value='" . $path_to_mappe . $file . "' type='checkbox'><label for='field_" . $cnt . "'>". $file . "</label><br />\n";
     
    }
    closedir($dir);
    echo "<br />\n";
    echo "<input name='btn' value='Slet markerede' type='submit'>\n";
    echo "</form>\n";
  }
}

if ($_POST['action'] == "slet") {
  if (is_array($_POST['files'])) {
    foreach($_POST['files'] AS $var) {
      echo $var . "<br />\n";  // Kun for test
      @unlink($var);
    }
  }
} else {
  build_form("user/images/img_2006/");  // SKAL slutte med "/"
}

?>
Avatar billede minus Nybegynder
28. maj 2008 - 21:25 #3
jl4511 --> Lige præcis. :) Er det muligt at lave at den sletter fra en undermappe med samme filnavn bare med "thumb_" foran?

Altså:
Jeg vælge at slette "billede.jpg" fra mappen: 'galleri'.
Så vil den automatisk også slette filen "thumb_billede.jpg" fra 'galleri/thumbs'. Dette skal foregå skjult, altså det skal ikke være med på listen, men koden opfatter selv, at den skal slette thumb-billedet ud fra navnet.

Er det muligt at tilføje det ind i koden? :)
Avatar billede jakobdo Ekspert
28. maj 2008 - 21:58 #4
Du skal jo bare udvide variablen: $var i denne linje:

@unlink($var);
Avatar billede minus Nybegynder
28. maj 2008 - 22:04 #5
jakobdo --> Har forsøgt med følgende:

@unlink($var);
@unlink('thumbs/thumb_'.$var);

men som du sikkert har gættet, virker det ikke. Så hvordan skal udvide den ene variabel alene? :)
Avatar billede jl4511 Nybegynder
28. maj 2008 - 22:18 #6
Det er fordi $var indeholder stien til billedfilen, foruden billedefilen selv.
Du skal derfor udtrække filenavnet og hæfte det på undermappen.

Sådan:
if ($_POST['action'] == "slet") {
  if (is_array($_POST['files'])) {
    foreach($_POST['files'] AS $var) {
      echo $var . "<br />\n";  // Kun for test
      @unlink($var);
      $thumb = explode("/",$var);
      $thumb = $thumb[count($thumb)-1];
      $thumb = "under_mappe/" . $thumb;
      echo $thumb . "<br />\n";  // Kun for test
      @unlink($thumb);
    }
  }
} else {
  build_form("user/images/img_2006/");  // SKAL slutte med "/"
}
Avatar billede jakobdo Ekspert
28. maj 2008 - 22:18 #7
Du kunne også bruge pathinfo() på $var, så kan du klippe og klistre.
Avatar billede minus Nybegynder
28. maj 2008 - 22:33 #8
jl4511 --> Vi er derhenne af :)
Men den sletter ikke billedet fra mappen "thumbs" med teksten "thumb_" foran.

Når jeg sletter billede.jpg siger den:

galleri/billede.jpg
thumbs/billede.jpg

Tror det der går galt, er at scriptet vil slette billede.jpg fra thumbs-mappen som ligger ved siden af galleri-mappen.

Men thumbnailsene ligger i en undermappe for galleri som hedder thumb, altså "galleri/thumbs".
Og hvert billede i denne mappe har teksten "thumb_" foran.

Altså det den burde skrive:

galleri/billede.jpg
galleri/thumbs/thumb_billede.jpg
Avatar billede minus Nybegynder
28. maj 2008 - 22:35 #9
Kunne se at jeg bare skulle rette følgende linje til at gå til undermappen også:

      $thumb = "galleri/thumbs/" . $thumb;

Den sletter fint billede.jpg men ikke filnavn med thumb_ foran :)
Avatar billede minus Nybegynder
28. maj 2008 - 22:40 #10
Okay så, ser ud til at jeg fik det til at virke.

rettede samme linje om til:
      $thumb = "galleri/thumbs/thumb_" . $thumb;

Ved ikke om det er helt "lovligt" men det virker :)

Takker for hjælpen
Avatar billede jakobdo Ekspert
28. maj 2008 - 22:40 #11
Hvad så med:

echo $var . "<br />\n";  // Kun for test
$path_parts = pathinfo($var);
@unlink($var);
@unlink($path_parts['dirname'] . '/thumbs/thumbs_' . $path_parts['basename']);
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester