Update en oude afbeelding wissen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

David david

david david

07/06/2009 13:09:00
Quote Anchor link
Ola,

Ik krijg het maar niet voormekaar dat een plaatje daadwerkelijk uit een mao wordt verwijdert als deze geupdate wordt.
BIj het aanmaken wordt een random naam aangemaakt, dit zorgt gelijk voor wat verwarring denk ik bij het verwijderen ervan (?).

(lange code, voor het complete beeld..)



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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<?

if (!isset($_GET['id']))  
{
  
    echo "Id niet gedefineerd";  
    exit;  
}
  

else if(isset($_POST['upload']))  
{


$fileName = $_FILES['userfile']['name'];
$tmpName  = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];
$label  = $_POST['label'];    
$tekst  = $_POST['tekst'];


$ext= substr(strrchr($fileName, "."), 1); // extentie eruit halen
$naam = substr($fileName, 0, strrpos($fileName, '.'));  //  naam voor .extentie
$randName = $naam. '-' .substr(md5(rand() * time()), 0, 6); // random naam genereren
$newName  = $randName . '.' . $ext; // nieuwe naam + extentie
$filePath = $uploadDir . $newName; // path + nieuwe naam (+ extentie)





//start the query

$query = "UPDATE news SET label = '$label', tekst='$tekst', datum =  CURDATE()";
    
  

    if ($_FILES['userfile']['tmp_name'])
        {

            //// STAAT ER AL EEN BESTAND? --> VERWIJDEREN/////
            
                if( file_exists($uploadDir . $fileName ) )
            {
    
            unlink($uploadDir . $fileName );

            }

            
            //// EXTENTIE CHECK/////
            if(!in_array($ext,$allowed_filetypes))
            {

            echo '<font color="red" face=Verdana size=2>! Geen (goed) bestand geselecteerd. Upload een jpg, gif of png.</font></p>';
            $errors=1;
            }

            
            else
                {
                //// GROOTTE CHECK/////
                if ($fileSize > $max_filesize)
                {

                echo '<font color="red" face=Verdana size=2>! Bestand is te groot. Gebruik een bestand van max 800 KB.</font><p/>';
                $errors=1;
                }

                
                else {    
                    // Check Height & Width
                    list($width, $height, $type, $w) = getimagesize($_FILES['userfile']['tmp_name']);
                    if($width != $max_width || $height != $max_height)
                    {

                    echo '<font color="red" face=Verdana size=2>! Afbeelding moet 450 x 300 pixels zijn</font><p/>';
                    $errors=1;
                    }

                
                    else
                        {
                        //// BESTAND VERPLAATSEN NAAR MAP/////
                        $result = move_uploaded_file($tmpName, $filePath);
                        if (!$result)
                        {

                        echo '<font color="red" face=Verdana size=2>Error uploading file</font><p/>';
                        $errors=1;
                        }

                        
                        else
                            {    
                            //ALS ER AL EEN BESTAND, DAN INFO AAN QUERY TOEVOEGEN////
                            $query .= ", name = '$newName', path = '$filePath',size = '$fileSize', type = '$fileType' ";
                            
                            }
  /* INSERT IF AFLSUITEN*/
                        } /* VERPAASTEN IF AFLSUITEN*/
                    } /* AFMETING PIXEL CHECK AFSLUITEN*/

                } /* GROOTTE IF AFLSUITEN*/
        }
    else
        {
        $newName = ""; //zit hier de fout?...
        }
        //finish off the qyery.

$query .= "WHERE id = '{$_GET['id']}'";
$sql=mysql_query($query);
if(!$sql)
{

$errors=1;
trigger_error('Error, query fout:' . mysql_error());
}
            

}





?>




Moet ik in dit gedeelte eerst nog een query uitvoeren ofzo? :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?
        if( file_exists($uploadDir . $fileName ) )
            {
    
            unlink($uploadDir . $fileName );

            }

?>



thnx voor de hulp
 
PHP hulp

PHP hulp

27/11/2024 07:16:53
 
- SanThe -

- SanThe -

07/06/2009 13:16:00
Quote Anchor link
Zet dit bovenin je script.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);

// rest
?>
 
David david

david david

07/06/2009 13:18:00
Quote Anchor link
staat er in (niet de hele code geplaatst), naar geen error of iets., update werkt allemaal goed, alleen blijf het oude bestand nog staan..
 
Joren de Wit

Joren de Wit

07/06/2009 13:20:00
Quote Anchor link
Een aantal opmerkingen:

1. Je script is gevoelig voor SQL injectie. Zet nooit POST en GET variabelen ongecontroleerd in je queries!

2. Je controleert nergens of het verwijderen van het bestand wel gelukt is? De functie unlink() geeft FALSE terug als het verwijderen niet gelukt is. Controleer dat dus.

ps. Verder controleer je of een bestand met de opgegeven bestandsnaam bestaat terwijl je dat bestand onder een random naam opgeslagen hebt. Zo zul je het dus nooit terug vinden en zal het oude bestand inderdaad nooit verwijderd worden. Je kijkt immers niet naar de random naam die dat bestand gekregen heeft.

Als je dat wel wilt, zul je in je database een link moeten leggen tussen bestandsnaam en verkregen random naam. En bij controleren of het bestand bestaat, zul je dus eerst de bijbehorende random name uit de database moeten halen en eventueel dat betreffende bestand verwijderen.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
David david

david david

07/06/2009 13:29:00
Quote Anchor link
pff.. soory hoor, maar ik heb echt geen idee hoe ik dat moet gaan doen..

EDIT: in priciepe halt hij het oude bestand (huidig) wel binnen, dus zal ik die moeten verwerken in een query voor de unlink ofzo?

thnx
Gewijzigd op 01/01/1970 01:00:00 door david david
 
Joren de Wit

Joren de Wit

07/06/2009 13:32:00
Quote Anchor link
Als jij een nieuw bestand upload, zul je de bestandsnaam in je database op moeten slaan samen met de verkregen random naam. Op die manier kun jij later op basis van een bestandsnaam altijd de bijbehorende random naam terugvinden.

SQL Beginnershandleiding

Lees ook deze handleiding eens. Daar wordt de basis van het werken met een SQL database uitgelegd. Daarmee moet je vast wel een eind verder komen.
 
David david

david david

07/06/2009 13:38:00
Quote Anchor link
die random naam wordt ook opgeslagen bij het invoeren. Staan netjes in de database vermeld onder de value "name".
Dus de random naam is gewoon bekend.


Of maak ik nou een denkfout, er betsaat natuurlijk nooit een zelfde bestand (is tenslotte random).. ik wil eigenlijk gewoon de huidige verwijderen.. (indien nieuwe geplaatst uiteraard).
De huidge zie ik trouwens ook als ik bijv:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo '<img class=scale src="../newsimage/' . $row['name'] . '" />' ; ?>
uitvoer..
Gewijzigd op 01/01/1970 01:00:00 door david david
 
Joren de Wit

Joren de Wit

07/06/2009 13:43:00
Quote Anchor link
Als je de huidige afbeelding wilt verwijderen is het toch een kwestie van de random name ophalen uit de database en deze waarde in unlink() gebruiken?
 
David david

david david

07/06/2009 14:00:00
Quote Anchor link
ja zo simpel is het misschien wel ja... (argh)..
Dan is dat file exist ook overbodig eigenlijk lijkt me

Zou ik dan die unlink beter NA de move kunnen doen wellicht?
 
Joren de Wit

Joren de Wit

07/06/2009 14:02:00
Quote Anchor link
Die file_exists() lijkt me niet overbodig, want een unlink() op een bestand dat niet bestaat zal zeker een foutmelding opleveren.

Verder zou ik inderdaad het oude bestand ook pas verwijderen zodra het nieuwe succesvol geupload is. Zorg wel dat je eerst de oude bestandsnaam uit de database selecteert voordat je het betreffende record update.
 
David david

david david

07/06/2009 14:07:00
Quote Anchor link
Quote:
Die file_exists() lijkt me niet overbodig, want een unlink() op een bestand dat niet bestaat zal zeker een foutmelding opleveren.


dat bestand bestaat bestaat toch niet, omdat het random is?
 
Joren de Wit

Joren de Wit

07/06/2009 14:10:00
Quote Anchor link
Ik bedoel een file_exists() op de random name. Je wilt wel zeker weten dat het bestand met de random name bestaat voordat je daar een unlink() op uitvoert...
 
David david

david david

07/06/2009 14:27:00
Quote Anchor link
die query moet er dan nog voor dus, ongeveer 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
<?
{
if ($_FILES['userfile']['tmp_name'])
        {


$sql = "SELECT *  FROM news WHERE id = '{$_GET['id']}'";
$result = mysql_query($sql) or die('Error, get info gefaald. ' . mysql_error());
$row = mysql_fetch_assoc($result);

if( file_exists( '../newsimage/' . $row['name']) )
 {

   unlink( '../newsimage/' . $row['name']);
 }


/// MOVE >>

}
?>
Gewijzigd op 01/01/1970 01:00:00 door david david
 
Joren de Wit

Joren de Wit

07/06/2009 14:30:00
Quote Anchor link
Ja, maar die unlink zou ik pas doen als je een nieuw bestand succesvol geupload hebt. Anders zou je zomaar ineens zonder afbeelding kunnen komen te zitten.

Verder moet je ook nog even goed kijken naar je queries. Je gebruikt een GET variabele nu direct in je query, hetgeen de mogelijkheid tot sql injectie veroorzaakt. Een serieus veiligheidslek. Haal verder variabelen ook altijd buiten quotes.

Zie de handleiding die ik al eerder aanhaalde voor informatie over het opstellen van veilige queries en toepassen van correcte foutafhandeling.
 
David david

david david

07/06/2009 17:38:00
Quote Anchor link
probleem is trouwens dat als ik al een bestand sccesvol geupdate hebt, en ik DAARNA ga wissen..
Hij het nieuwe bestand gelijk wist..

EDIT: nu het wissen ervoor gezet (overigens andere code, waarin de hele update query al al eerder gedraait wordt, dus vandaar de unlink ervoor..)
Gewijzigd op 01/01/1970 01:00:00 door david david
 



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.