Avatar billede blueeye97 Nybegynder
07. oktober 2005 - 11:31 Der er 21 kommentarer og
2 løsninger

Vise mappeindhold med slettefunktion

Jeg vil godt kunne vise en mappes indhold, lidt a´la dette her:

<?
$maindir = "." ; $mydir = opendir($maindir) ; $exclude = array( "index.php") ; while($fn = readdir($mydir)) { if ($fn == $exclude[0] || $fn == $exclude[1]) continue; echo "<br><font size='1' face='Verdana'><a href='$fn'>$fn</a>"; } closedir($mydir);
exit;
?>


Det er selvfølgelig bare en index der viser alt andet end sig selv.

Det jeg tænker på, er en php fil uden for mappen som viser mappens indhold samtidig med at der er et afkrydsningsfelt ud for hvert filnavn. De enkelte filer kan så markeres og slettes når der klikkes på en send-knap.
Avatar billede dmdisco Nybegynder
07. oktober 2005 - 12:59 #1
hvis du smider et afkrysnings felt med hver filnavn i valuen så får du et array med
filnavnene der skal slettes og det array kan du så løbe igennem og unlink() de filer
Avatar billede dmdisco Nybegynder
07. oktober 2005 - 13:02 #2
<?
$maindir = "." ;
$mydir = opendir($maindir);
$exclude = array( "index.php");
while($fn = readdir($mydir)) {
    if ($fn == $exclude[0] || $fn == $exclude[1]) continue;
    echo "<br><font size='1' face='Verdana'><a href='$fn'>$fn</a> <input type=\"checkbox\" name=\"slet\" value=\"$fn\">";
}
closedir($mydir);
exit;
?>
Avatar billede blueeye97 Nybegynder
07. oktober 2005 - 13:59 #3
Jeg er selv kommet "næsten" lige så langt. bare med nedenstående. Hvordan laver leg løkken der finder de markerede og sletter dem ?

$maindir = "." ; $mydir = opendir($maindir) ; $exclude = array( "index.php") ; while($fn = readdir($mydir)) { if ($fn == $exclude[0] || $fn == $exclude[1]) continue; echo "<br><font size='1' face='Verdana'><input type='checkbox' name=$fn value='ON'><a href='$fn'>$fn</p>"; } closedir($mydir);
Avatar billede blueeye97 Nybegynder
07. oktober 2005 - 14:00 #4
leg=jeg
Avatar billede blueeye97 Nybegynder
07. oktober 2005 - 15:26 #5
Jeg rettede lige lidt i din version, så afkrydsningsfeltet står foran filnavnet.

Men jeg kan ikke se, hvordan jeg får samlet filnavnene op bagefter ??
Avatar billede blueeye97 Nybegynder
07. oktober 2005 - 15:26 #6
hov... glemte at paste >

<?
$maindir = "." ;
$mydir = opendir($maindir);
$exclude = array( "index.php");
while($fn = readdir($mydir)) {
    if ($fn == $exclude[0] || $fn == $exclude[1]) continue;
    echo "<br> <input type=\"checkbox\" name=\"slet\" value=\"$fn\"><font size='1' face='Verdana'><a href='$fn'>$fn</a> ";
}

closedir($mydir);

exit;
?>
Avatar billede dmdisco Nybegynder
07. oktober 2005 - 15:42 #7
prøv dette

foreach ($slet as $fil) {
  unlink($fil);
  print $fil." er slettet";
}
Avatar billede blueeye97 Nybegynder
07. oktober 2005 - 16:40 #8
Jeg prøvede lige sådan her, men det virker ikke:



<form enctype="multipart/form-data" action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
<?
$maindir = "." ;
$mydir = opendir($maindir);
$exclude = array( "index.php");
while($fn = readdir($mydir)) {
    if ($fn == $exclude[0] || $fn == $exclude[1]) continue;
    echo "<br> <input type=\"checkbox\" name=\"slet\" value=\"$fn\"><font size='1' face='Verdana'><a href='$fn'>$fn</a> ";
}

closedir($mydir);
echo "<p><input type='submit' value='Send' name='B1'><input type='reset' value='Nulstil' name='B2'></p>";

echo "</form>";


echo "Sletter filer";
foreach ($slet as $fil) {
  unlink($fil);
  print $fil." er slettet";
}

exit;
?>
Avatar billede blueeye97 Nybegynder
07. oktober 2005 - 16:56 #9
Det er da vist noget rod jeg har skrevet der... :o/
Avatar billede dmdisco Nybegynder
07. oktober 2005 - 17:54 #10
ja du skal lige lave et check om formen er submittet før du sletter filer

if ($_POST[slet]) {
  foreach ($slet as $fil) {
    unlink($fil);
    print $fil." er slettet";
  }
} elseif ($_POST[submit]) {
  echo "vælg en fil makker!";
}
Avatar billede blueeye97 Nybegynder
07. oktober 2005 - 18:09 #11
Sådan her ?

<form enctype="multipart/form-data" action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
<?
$maindir = "." ;
$mydir = opendir($maindir);
$exclude = array( "index.php");
while($fn = readdir($mydir)) {
    if ($fn == $exclude[0] || $fn == $exclude[1]) continue;
    echo "<br> <input type=\"checkbox\" name=\"slet\" value=\"$fn\"><font size='1' face='Verdana'><a href='$fn'>$fn</a> ";
}

closedir($mydir);
echo "<p><input type='submit' value='Send' name='B1'><input type='reset' value='Nulstil' name='B2'></p>";

echo "</form>";


if ($_POST[slet]) {
  foreach ($slet as $fil) {
    unlink($fil);
    print $fil." er slettet";
  }
} elseif ($_POST[submit]) {
  echo "vælg en fil makker!";
}
exit;
?>
Avatar billede dmdisco Nybegynder
07. oktober 2005 - 18:29 #12
tja det ser nogenlunde rigtigt ud smid et par $_POST[] ind hist og her hvis det er

ellers bare afprøv det og se om den laver kage i det hele
Avatar billede blueeye97 Nybegynder
08. oktober 2005 - 00:02 #13
Jeg har ikke været hjemme så jeg har ikke testet før nu. Der sker ikke ret meget, faktisk sker der ikke en sk.. :o))
Avatar billede pidgeot Nybegynder
08. oktober 2005 - 00:06 #14
foreach ($slet as $fil) {

Har du prøve at bruge $_POST[slet] i stedet for $slet her? Som den er der, kræver den linie at register_globals er slået til, hvilket normalt frarådes kraftigt.

Desuden bør du nok flytte

if ($_POST[slet]) {
  foreach ($slet as $fil) {
    unlink($fil);
    print $fil." er slettet";
  }
} elseif ($_POST[submit]) {
  echo "vælg en fil makker!";
}

ind FØR du begynder at lede efter filer, da den i den der udformning først fjerner dem EFTER den har gået igennem dem alle.
Avatar billede blueeye97 Nybegynder
08. oktober 2005 - 22:28 #15
Jeg er altså stået helt og aldeles af her :o))

Lige nu ser koden sådan her. Listen vises korrekt, der er checkboxe. Men der sker ikke en dyt når jeg prøver at slette en fil..

<form enctype="multipart/form-data" action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
<?




$maindir = "." ;
$mydir = opendir($maindir);
$exclude = array( "index.php");




while($fn = readdir($mydir)) {
    if ($fn == $exclude[0] || $fn == $exclude[1]) continue;
    echo "<br> <input type=\"checkbox\" name=\"slet\" value=\"$fn\"><font size='1' face='Verdana'><a href='$fn'>$fn</a> ";
}

closedir($mydir);
echo "<p><input type='submit' value='Send' name='B1'><input type='reset' value='Nulstil' name='B2'></p>";

echo "</form>";


if ($_POST[slet]) {
  foreach ($_POST[slet]  as $fil) {
    unlink($fil);
    print $fil." er slettet";
  }
} elseif ($_POST[submit]) {
  echo "vælg en fil makker!";
}


exit;
?>
Avatar billede pidgeot Nybegynder
08. oktober 2005 - 22:32 #16
if ($_POST[slet]) {
  foreach ($_POST[slet]  as $fil) {
    unlink($fil);
    print $fil." er slettet";
  }
} elseif ($_POST[submit]) {
  echo "vælg en fil makker!";
}


Flyt det der op før $maindir = "." ;, da filerne ellers først bliver slettet efter den har løbet dem igennem.

Hvis det stadig ikke virker, så prøv at sætte error_reporting(E_ALL); øverst i dit script og se om den melder nogle fejl.
Avatar billede blueeye97 Nybegynder
08. oktober 2005 - 22:41 #17
Følgende:

<form enctype="multipart/form-data" action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
<?
error_reporting(E_ALL);

if ($_POST[slet]) {
  foreach ($_POST[slet]  as $fil) {
    unlink($fil);
    print $fil." er slettet";
  }
} elseif ($_POST[submit]) {
  echo "vælg en fil makker!";
}



$maindir = "." ;
$mydir = opendir($maindir);
$exclude = array( "index.php",".", "..");




while($fn = readdir($mydir)) {
    if ($fn == $exclude[0] || $fn == $exclude[1]) continue;
    echo "<br> <input type=\"checkbox\" name=\"slet\" value=\"$fn\"><font size='1' face='Verdana'><a href='$fn'>$fn</a> ";
}

closedir($mydir);
echo "<p><input type='submit' value='Send' name='B1'><input type='reset' value='Nulstil' name='B2'></p>";

echo "</form>";





exit;
?>

giver disse fejl:

Notice: Use of undefined constant slet - assumed 'slet' in /hsphere/local/home/xx/xx.com/test/fil/4.php on line 5

Notice: Undefined index: slet in /hsphere/local/home/xx/xx.com/test/fil/4.php on line 5

Notice: Use of undefined constant submit - assumed 'submit' in /hsphere/local/home/xx/xx.com/test/fil/4.php on line 10

Notice: Undefined index: submit in /hsphere/local/home/xx/xx.com/test/fil/4.php on line 10
Avatar billede pidgeot Nybegynder
08. oktober 2005 - 22:45 #18
Godt, de fejl ville jeg også forvente med det script. Det er ikke strengt taget nødvendigt at du fixer disse, så du kan godt fjerne den error_reporting linie igen.

Tror i øvrigt jeg ser fejlen nu...

<input type=\"checkbox\" name=\"slet\" value=\"$fn\">

Der skal stå slet[], ikke bare slet. Ellers ved PHP ikke at der er tale om et array.
Avatar billede blueeye97 Nybegynder
08. oktober 2005 - 22:50 #19
OH YES :o))

Det hjalp en hel del...

Jeg rettede forresten

$exclude = array( "index.php",".", "..");

for at undgå . og .. i toppen. Men det er kun . der bliver skjult. Kan jeg ikke skjule både . og .. ?

Og svar så lige begge 2 :o)
Avatar billede pidgeot Nybegynder
08. oktober 2005 - 22:56 #20
Personligt ville jeg nok bare gøre det her:

while($fn = readdir($mydir)) {
    if (is_file($fn) && $fn!="index.php")
      echo "<br> <input type=\"checkbox\" name=\"slet\" value=\"$fn\"><font size='1' face='Verdana'><a href='$fn'>$fn</a> ";
}

såfremt du ikke skal bruge biblioteker til dit script. Men ellers hedder det:

while($fn = readdir($mydir)) {
    if ($fn == $exclude[0] || $fn == $exclude[1] || $fn == exclude[2]) continue;
    echo "<br> <input type=\"checkbox\" name=\"slet\" value=\"$fn\"><font size='1' face='Verdana'><a href='$fn'>$fn</a> ";
}

da du har *tre* elementer i dit $exclude array ;)
Avatar billede pidgeot Nybegynder
08. oktober 2005 - 22:58 #21
En mere holdbar løsning ville dog være at bruge en eller anden funktion der kontrollerer om et bestemt element findes i $exclude arrayet. Jeg mener der er en i PHP, men jeg kan ikke lige huske hvad den hedder.
Avatar billede blueeye97 Nybegynder
08. oktober 2005 - 23:13 #22
OK. Tak for hjælpen. Jeg venter lige med points indtil dmdisco har svaret også :o)
Avatar billede dmdisco Nybegynder
09. oktober 2005 - 16:19 #23
svar
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