At slette en fil fra serveren

Tags:    php mysql

Er der nogen som kan hjælpe mig med lidt kode til at slette en fil fra serveren?

Jeg har en database med en tabel "billeder". Heri er gemt oplysninger om billeder som er uploadet til en bestemt mappe på min server.

Jeg vil så gerne på en side hvor jeg udskriver alle billeder med et bestemt id lave et link "slet billede" som så skal slette det pågældende billede fra serveren samt fra databasen.

Henter billederne fra databasen:
Fold kodeboks ind/udPHP kode 






Indlæg senest redigeret d. 21.07.2013 17:54 af Bruger #17644
36 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
start med KISS, så du hr styr på dine mapper, løkker mv

hvis du indrykker din code, vil du se du mangler en }
indryk altid din code, det hjælper dig og andre med at læse din code, og får dig til at "tælle" start og slut tuborg

billeder2/ skal ikke stå i din file_exists / unlink, da du har stien liggende i dit IMGurl
hvis alle billederne ligger i billeder2 så skal stien ikke overføres i din IMGurl


du kan vælge at lave det som 1 eller 2 filer.

som 1 fil
Fold kodeboks ind/udKode 



som 2 filer
Fold kodeboks ind/udKode 


delete.php (navn vigtigt)
Fold kodeboks ind/udKode 


& er lavet om til & afh validering den gøres normalt med http://php.net/urlencode

ovenstående filer ligger her http://udvikleren.olsensweb.dk/40121.zip



Nu virker noget af det...
Jeg kan få den til at slette billedet fra serveren nu (med hjælp fra dit eksempel med to filer).
Men den sletter ikke fra databasen.

Har lagt en Connect ind i delete-filen og fjernet billeder2 fra exists og unlink.
Har ikke lige ændret på header endnu, men det skulle jo ikke betyde noget for funktionen med at slette fra databasen.

Fold kodeboks ind/udPHP kode 


UPDATE - nu lykkedes det alligevel at få den til at slette fra databasen også.
Tror måske det var serveren som var langsom til at registrere min fil-opdatering...

Update igen...
Hvis jeg nu gerne vil lave header om til at den sender tilbage til en bestemt side ud et id.
Ser sådan her ud nu:
Fold kodeboks ind/udPHP kode 


Hvis jeg så gerne vil lave det om til:
Fold kodeboks ind/udPHP kode 

og så skal der så være hestid efter =
Har prøvet bare at lægge
Fold kodeboks ind/udPHP kode 
ind, men det virker ikke. Hvordan skal jeg skrive det?

Endnu en update:
Når jeg nu vil bruge samme funktion med at slette fra serveren et andet sted, så virker det ikke helt og jeg kan ikke gennemskue hvad jeg har gjort anderledes:
Fold kodeboks ind/udPHP kode 


Her henter jeg et BannerIMG - som er et url til et billede der ligger i mappen "Banners".
Jeg bliver fint nok sendt videre til min forsideP.php - men den sletter bare ikke filen fra serveren.
Jeg kan ikke lige se jeg har gjort noget anderledes i forhold til det andet sted jeg bruger koden?
Og min url ser ud som jeg synes den skal. Skriver fint BannerIMG som Banners/minfil.jpg




Indlæg senest redigeret d. 23.07.2013 10:07 af Bruger #17644

<?php echo $row['hestid']?>

findes ikke når du har posted/get'et så du er nød til at tage den variabel du har sendt over, i dette tilfælde $_GET["id"], hvis det er hesteid, ellers skal du sende hesteid med over også

du mangler et & tegn igen
læs feks http://stackoverflow.com/questions/2376348/difference-between-and-in-php

prøv dette
Fold kodeboks ind/udKode 




Når jeg nu vil bruge samme funktion med at slette fra serveren et andet sted, så virker det ikke helt og jeg kan ikke gennemskue hvad jeg har gjort anderledes:

prøv at fjerne skråstregerne foran print_r
hvad får du over ??
kommer BannerIMG og id over ??
og udkommenter for en sikkerheds skyld header, (burde ikke virke, når der er sendt noget til skærmen)


en anden ting:
jeg vil anbefale dig at så debug info til under udvikling
læg dette ind i toppen af dine php filer

include_once('debug.php');

debug.php
Fold kodeboks ind/udKode 





prøv at fjerne skråstregerne foran print_r
hvad får du over ??
kommer BannerIMG og id over ??
og udkommenter for en sikkerheds skyld header, (burde ikke virke, når der er sendt noget til skærmen)


Kan ikke få den til noget, men min server er meget langsom lige nu, så venter lige og ser om det er noget andet om lidt.
Ellers videresender den mig bare selvom jeg bar udkommanderet header :S

update:
Så lykkedes det at få den til at vise den opdaterede fil.
Så skriver den dette ud:
"Array ( [BannerIMG] => Banners/flarabians-942.jpg ) "

Ser det ikke meget rigtigt ud ellers?




Indlæg senest redigeret d. 23.07.2013 11:56 af Bruger #17644

Så skriver den dette ud:
"Array ( [BannerIMG] => Banners/flarabians-942.jpg ) "

Ser det ikke meget rigtigt ud ellers?

nej du mangler en id
du tester med
if( isset($_GET["BannerIMG"]) && isset($_GET["id"]) ){
dvs både $_GET["BannerIMG"] og $_GET["id"] skal sendes over

prøv dette istedet
Fold kodeboks ind/udKode 

og vær opmærksom om stien til filen er korrekt i forhold til hvor ovenstående ligger



Men om jeg får id med burde da ikke betyde noget for om den sletter filen fra serveren?
id skal jeg vel først bruge når jeg skal slette filen fra databasen (hvilket ikke er så vigtigt i lige dette tilfælde)

Stien passer vel godt nok, når mappen "Banners" ligger der hvor min php side ligger?

Fold kodeboks ind/udPHP kode 


Jeg bliver fint sendt videre til forsideP.php - men den sletter ikke banneret



Indlæg senest redigeret d. 23.07.2013 14:47 af Bruger #17644
Så virker det!



Koden ovenfor er fuldkommen sindssygt usikker! Hvad hvis stien i $_GET variablen går op af path-træet? som fx:

$_GET["BannerIMG"] = '../../index.php'

Der røg din index side. Du skal *altid* tjekke variabler fra brugere, da de er potentielt farlige.



Der ligger ikke andet end billedfiler i den mappe, så kan ikke lige se hvordan den skulle kunne slette andet?



Fordi en relativ filsti også kan pege på filer i højereliggende mapper! '..' betyder "gå en mappe op" - ergo betyder: '../../' "gå to mapper op"



Indlæg senest redigeret d. 24.07.2013 00:27 af Bruger #11328
t