Foto uit DB en directory verwijderen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Patrick

Patrick

21/12/2007 17:01:00
Quote Anchor link
Foto verwijderen doe ik zo,
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
    if (isset($_POST['bevestiging'])) {
        $id = (int) $_POST['id'];
        
        /* STAP 1 = foto-bestand uit directory verwijderen */
        $aQuery = "SELECT photo_filename FROM foto WHERE id='" . $id . "'";
        $results = safe_query($aQuery, $db_connect);
            
        // de volledige bestandsnaam van de foto samenstellen
        // en vervolgens verwijderen

        $foto_src = "afbeeldingen/uploads/" . $results['photo_filename'];
        if (file_exists($foto_src)) {
            unlink ($foto_src);
            }

        
        /* STAP 2 = foto-gegevens uit database verwijderen */
        $bQuery = "DELETE FROM foto WHERE id='" . $id . "'";
        $resultaat = safe_query($bQuery, $db_connect);
        
        if ($resultaat) {
            echo "Bijdrage nummer <b>" . $id . "</b> is verwijderd.</br />";
            }
        }

?>


Uit de database wordt de foto verwijderd, maar niet uit de map.

Ik krijg,
Warning: unlink(afbeeldingen/uploads/) [function.unlink]: Permission denied in C:\wamp\www\lampen\foto_index.php on line 63
De foutmelding krijg ik op een localhost via WAMP, op een WinXP-pc

Zit er één of meerdere fouten in de code?
Hoe kan deze verbeteren?
 
PHP hulp

PHP hulp

12/01/2025 03:46:46
 
Frank -

Frank -

21/12/2007 17:02:00
Quote Anchor link
Tip: Voer de DELETE-query alleen uit wanneer unlink() is gelukt. Doe je dat niet, dan zit je straks met een enorme berg bestanden en geen records in de database om het verband te leggen.
 
Bart

Bart

21/12/2007 17:03:00
Quote Anchor link
Ik denk dat je je map moet gaan CMOD 777-en.
 
Frank -

Frank -

21/12/2007 17:04:00
Quote Anchor link
Bart schreef op 21.12.2007 17:03:
Ik denk dat je je map moet gaan CMOD 777-en.
CHMOD op een Windowsbak? Dat is nieuw.
 
Bart

Bart

21/12/2007 18:54:00
Quote Anchor link
Mhm
Als je upload in filezilla; rechtermuisknop op je bestandje, dan eigenschappen.
Staat daar CHOMD [input txt] en daaronder een aatal radios. vul je gewoon 777 in en je hebt het gknipt. Lokaal moet je gewoon het vinkje bij alleen-lezen wegdoen.
 
Frank -

Frank -

21/12/2007 19:07:00
Quote Anchor link
Bart schreef op 21.12.2007 18:54:
Mhm
Als je upload in filezilla; rechtermuisknop op je bestandje, dan eigenschappen.
Staat daar CHOMD [input txt] en daaronder een aatal radios. vul je gewoon 777 in en je hebt het gknipt. Lokaal moet je gewoon het vinkje bij alleen-lezen wegdoen.
In Windows bestaat geen CHMOD, ook niet als jij via Filezilla op een Linux-server (of andere *nix-variant) de CHMOD zit aan te passen. Dat zijn toch echt de instellingen van de Linux-server en niet van jouw Windows-bak.

In Windows kun je overigens vast wel ergens iets van rechten instellen, maar die details zijn mij ontschoten.
 
Patrick

Patrick

21/12/2007 19:55:00
Quote Anchor link
Ik heb het nu zo, zodat de DELETE-query alleen wordt uit gevoerd, wanneer unlink() is gelukt
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
    if (isset($_POST['bevestiging'])) {
        $id = (int) $_POST['id'];
        
        /* STAP 1 = foto-bestand uit directory verwijderen */
        $aQuery = "SELECT photo_filename FROM foto WHERE id='" . $id . "'";
        $results = safe_query($aQuery, $db_connect);
        
        // de volledige bestandsnaam van de foto samenstellen
        // en vervolgens verwijderen

        $foto_src = "afbeeldingen/uploads/" . $results['photo_filename'];
        if (file_exists($foto_src)) {
            $foto_verwijderen = unlink($foto_src);
            echo $foto_verwijderen;
            
            if ($foto_verwijderen) {
                /* STAP 2 = foto-gegevens uit database verwijderen */
                $bQuery = "DELETE FROM foto WHERE id='" . $id . "'";
                $resultaat = safe_query($bQuery, $db_connect);
                
                if ($resultaat) {
                    echo "Bijdrage nummer <b>" . $id . "</b> is verwijderd.</br />";
                    }
                }
            }
        }

?>


Het volgende,
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$foto_src = "./afbeeldingen/uploads/" . $results['photo_filename'];

geeft "Permission denied" foutmelding

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$foto_src = "/afbeeldingen/uploads/" . $results['photo_filename'];

geeft geen foutmelding, maar een blanco pagina. Foto bestaat nog in directory


Ik heb het volgende bovenaan staan,
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
?>


Bij deze echo,
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    echo $results['photo_filename'];
?>

krijg ik niets te zien. geen fout en geen naam.
In de database staat "Afbeelding1.jpg" bij "photo_filename".
(echo $id; geeft een 2, wat juist is)

vinkje bij "alleen lezen" uitzetten van directory "afbeeldingen" + alle onderliggende mappen + foto, geeft dezelfde foutmelding,
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Warning: unlink(afbeeldingen/uploads/) [function.unlink]: Permission denied in C:\wamp\www\lampen\foto_index.php on line 55


Doe ik dit,
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
    $upload_dir
= 'afbeeldingen/uploads/'; // directory opslag foto's
    echo substr(sprintf('%o', fileperms($upload_dir)), -4);
?>

dan krijg ik 0777 te zien

Ik heb nu alles geupload naar pcextreme en rechten naar 0777 van alle directory's
en krijg nu de melding bij verwijderen,
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Warning: unlink(afbeeldingen/uploads/) [function.unlink]: Is a directory in /home/site.nl/lampen/foto_index.php on line 55



EDIT

Als ik het zo doe,
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    unlink("afbeeldingen/uploads/afbeelding1.jpg");
?>

werkt het wel
fout moet dus hier zitten,
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
        $aQuery
= "SELECT id, photo_filename FROM foto WHERE id='" . $id . "'";
    $results = safe_query($aQuery, $db_connect);
?>
Gewijzigd op 01/01/1970 01:00:00 door Patrick
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.