Foto's verwijderen
Ik heb het volgende probleem.
Op mijn site heb ik een uploadscriptje gemaakt. Werkt goed. Een php script kijkt in een dir en geeft alle foto's die erin staan weer. Perfect
Nu wil ik dat gebruikers niet alleen na een inlogsessie foto's kunnen uploaden, maar ook dat ze foto's kunnen verwijderen.
Het mooist zou zijn dat een script kijkt in de directory, alle foto's weergeeft met daaronder een link "verwijder". Als je daarop drukt een vraag om bevestiging krijft en vervolgens de foto wordt verwijderd.
Nu is mijn vraag, hoe krijg ik dit in godsnaam voor elkaar. Heb het een en ander geprobeerd met unlink(), maar lukt me niet.
Iemand die me kan helpen?
http://www.phphulp.nl/php/scripts/5/106
Gewoon, het grootste deel over nemen: de directory uitlezen..
In delete.php kan je met unlink() de meegegeven file verwijderen. NB: voor het verwijderen van files moet je ALTIJD absolute paths gebruiken, dus geen URL.
Ook is het aan te bevelen om te controleren of $_GET['file'] in delete.php alleen letters of punten bevat (evt op jpg, gif of png eindigt). Anders kan iemand straks willekeurige files gaan deleten, dat is niet het grootste feest.
Goede nacht,
Adje
Gewoon, het grootste deel over nemen: de directory uitlezen..
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$dir = '/home/plaats/naar/willekeurige/plaatjes';
# Absolute pad naar de plaatjes directory.
$url = 'http://www.willekeurigesite.nl/willekeurige/plaatjes';
# Geen laatste '/'!
$handle = opendir($dir);
while (false !== ($file = readdir($handle))) {
if (!is_dir($file)) {
# dit voorkomt dat directories of '.' en '..' in de array komen
$files[] = $file;
}
}
foreach ($files as $file) {
print "$file: <a href="delete.php?file=$file">Delete</a>\n";
}
?>
$dir = '/home/plaats/naar/willekeurige/plaatjes';
# Absolute pad naar de plaatjes directory.
$url = 'http://www.willekeurigesite.nl/willekeurige/plaatjes';
# Geen laatste '/'!
$handle = opendir($dir);
while (false !== ($file = readdir($handle))) {
if (!is_dir($file)) {
# dit voorkomt dat directories of '.' en '..' in de array komen
$files[] = $file;
}
}
foreach ($files as $file) {
print "$file: <a href="delete.php?file=$file">Delete</a>\n";
}
?>
In delete.php kan je met unlink() de meegegeven file verwijderen. NB: voor het verwijderen van files moet je ALTIJD absolute paths gebruiken, dus geen URL.
Ook is het aan te bevelen om te controleren of $_GET['file'] in delete.php alleen letters of punten bevat (evt op jpg, gif of png eindigt). Anders kan iemand straks willekeurige files gaan deleten, dat is niet het grootste feest.
Goede nacht,
Adje
Het script werkt op zich. Ik zit nu nog met twee puntjes.
Ik zie nu nog alle bestandsnamen met daarachter een link om te verwijderen. Hoe krijg ik alle plaatjes zelf te zien? Ik heb ook even gekeken naar jou script, maar die laat een willekeurige zien. Ben nog niet zo'n php ster.
Het tweede puntje. Hoe gebruik ik die unlink() in delete.php precies? Zoals ik al zei...ben niet zo'n php ster. Ik probeer van alles, maar lukt me steeds net niet :-)
Alvast bedankt!
mijn script, zet alle files in de array $files. Daarna zoekt hij een random item uit uit de array.
Maar het gedeelte wat je nodig hebt is het gedeelte waar die files in de array gezet worden. De plaatjes zelf krijg je te zien door bij het doorlopen <img src="http://weg/naar/plaatjes/$file"> te echo'en. Niet te ingewikkeld dus.
kan je eens je error geven? Want waarschijnlijk kan je geen files deleten die je niet via php geupload hebt. Maar geef de foutmelding eens?
De volgende foutmelding volgt:
Warning: unlink(foto.gif): No such file or directory in delete.php on line 4
delete.php staat het volgende in:
[linebreak]Code (php) 123 <?phpunlink($_REQUEST[file]);?> [linebreak]
Wat moet ik hierin zetten?
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in delete.php on line 4
Dit is nu mijn script. De bestanden staan in de map uploads. delete.php staat in dezelfde dir als uploads.
[linebreak]Code (php) 1234 <?php $path= uploads/; unlink("$path $_GET[file]"); ?> [linebreak]
er moet geen spatie tussen.
Als ik de " wijzig in ' of weghaal krijg ik de foutmelding:
Parse error: parse error, unexpected T_STRING in delete.php on line 4
Het script ziet er nu als volgt uit:
[linebreak]Code (php) 1234 <?php $path=uploads/; unlink("$path$_GET[file]"); ?> [linebreak][linebreak]Wat zie ik nou over het hoofd?
Zonder die ' en ' werkt ut bij mij meestal wel als er een T_STRING of T_VARIABLE melding is :D
[linebreak]Code (php) 1234 <?php $path=uploads/;unlink($path/$_GET[file]); ?> [linebreak]
Dan krijg ik de volgende melding:
Warning: Division by zero in D:\Websites\www\familie\foto_pers\annika\del_een.php on line 3
Warning: unlink(): Permission denied in delete.php on line 3
Dit is zonder ' '
Met ' ', dus zo :
[linebreak]Code (php) 1234 <?php $path=uploads/;unlink($path/$_GET[file]); ?> [linebreak]krijg ik dit[linebreak][linebreak][linebreak]Parse error: parse error, unexpected T_STRING in delete.php on line 3
Ik maak gebruik van W2K Prof en op de dir staan de NTFS rechten goed ingesteld.
er staat dit:
maar nu krijg je dus uploads//$_GET['file'] en dat hoort niet...
hoe ik het zou doen:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?
$getfile = $_GET['file'];
$delbestand = 'uploads/$getfile';
unlink('$delbestand');
?>
$getfile = $_GET['file'];
$delbestand = 'uploads/$getfile';
unlink('$delbestand');
?>
misschien een beetje omsl8tich, maar je weet wel (bijna) cker dat je geen fouten krijgt...
succes!!
Die foutmelding is weg, maar heeft plaats gemaakt voor een andere nadat ik jou script Johan heb overgenomen.
Warning: unlink($delbestand): No such file or directory in delete.php on line 7
php script als volgt:
[linebreak]Code (php) 12345 <?php $getfile = $_GET[file]; $delbestand = uploads/$getfile; unlink($delbestand); ?> [linebreak]
moet met dubbele aanhalingstekens, anders wordt het bestand /uploads/$getfile (letterlijk!) opgezocht.
Dus $delbestand = "uploads/$getfile";
Mensen ontzettend bedankt voor jullie hulp!!!! Te gek!!