Update en oude afbeelding wissen
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)
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
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());
}
}
?>
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)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?
if( file_exists($uploadDir . $fileName ) )
{
unlink($uploadDir . $fileName );
}
?>
if( file_exists($uploadDir . $fileName ) )
{
unlink($uploadDir . $fileName );
}
?>
thnx voor de hulp
staat er in (niet de hele code geplaatst), naar geen error of iets., update werkt allemaal goed, alleen blijf het oude bestand nog staan..
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
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
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.
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: uitvoer..
Gewijzigd op 01/01/1970 01:00:00 door david david
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?
Dan is dat file exist ook overbodig eigenlijk lijkt me
Zou ik dan die unlink beter NA de move kunnen doen wellicht?
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.
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?
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...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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 >>
}
?>
{
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
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.
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