Verouderde scripts werken niet meer: foto-upload faalt
In 2007 heb ik eens een foto upload script gemaakt, en nu is na lange tijd de server geupdate naar de meest actuele PHP en SQL versie. Diverse scripts werken niet meer.
Ik heb in alle formulieren "HTTP_POST_VARS" moeten zetten omdat dat kennelijk wél werkte. Maar het is vast niet de juiste oplossing.
Mijn foto-formulieren doen het nog niet. Wat is er verouderd? Ik kan het niet ontdekken.
- artikel_id = id van het nieuwsbericht waar de foto's bij horen BIJV. 45
- fotonummer = id van het nummer, gelinkt aan de bestandsnaam BIJV. 5 (wordt 45_5.jpg)
- bestandsnaam = bijv. 45_5.jpg
Alvast bedankt voor jullie supervisie!
Groet,
Ty
Fragment van het form:
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?
//UPLOAD NIEUWE FOTO
//Vraag artikel id op uit de url
$artikel_id = $_GET['id'];
$var = mysql_query("SELECT * FROM plaatjes WHERE artikel_id LIKE '$id' ORDER BY fotonummer DESC LIMIT 1") or die (mysql_error());
$current = mysql_fetch_object($var);
$max = $current->fotonummer;
$plus1 = 1;
$new = $plus1 + $max;
if ($new == 12)
{
echo "Je kan geen extra fotos meer toevoegen";
}
else
{
echo "<input type='hidden' name='MAX_FILE_SIZE' value='10000000' />";
echo "Selecteer afbeelding (.JPG): <br><input name='userfile' type='file'>";
echo "<input name='newname' value='". $artikel_id . "_". $new .".jpg' type='hidden'>";
echo "<input name='artikel_id' value='". $artikel_id ."' type='hidden'>";
echo "<input name='fotonummer' value='". $new ."' type='hidden'>";
echo "<input name='bestandsnaam' value='". $artikel_id . "_". $new .".jpg' type='hidden'>";
echo "<input type='submit' value='Afbeelding toevoegen' />";
}
?>
//UPLOAD NIEUWE FOTO
//Vraag artikel id op uit de url
$artikel_id = $_GET['id'];
$var = mysql_query("SELECT * FROM plaatjes WHERE artikel_id LIKE '$id' ORDER BY fotonummer DESC LIMIT 1") or die (mysql_error());
$current = mysql_fetch_object($var);
$max = $current->fotonummer;
$plus1 = 1;
$new = $plus1 + $max;
if ($new == 12)
{
echo "Je kan geen extra fotos meer toevoegen";
}
else
{
echo "<input type='hidden' name='MAX_FILE_SIZE' value='10000000' />";
echo "Selecteer afbeelding (.JPG): <br><input name='userfile' type='file'>";
echo "<input name='newname' value='". $artikel_id . "_". $new .".jpg' type='hidden'>";
echo "<input name='artikel_id' value='". $artikel_id ."' type='hidden'>";
echo "<input name='fotonummer' value='". $new ."' type='hidden'>";
echo "<input name='bestandsnaam' value='". $artikel_id . "_". $new .".jpg' type='hidden'>";
echo "<input type='submit' value='Afbeelding toevoegen' />";
}
?>
Submit script
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
<?
global $_FILES;
$filename = $_FILES['userfile']['name'];
$allow[0] = "jpg";
// $allow[3] = "exe"; enz.
if ($_POST["newname"])
$uploadname = $_POST['newname'];
else
$uploadname = $_FILES['userfile']['name'];
$extentie = substr($uploadname, -3);
for ($i = 0; $i < count($allow); $i++)
{
if ($extentie == $allow[$i])
{
$extentie_check = "ok";
$i = count($allow) + 5; // om loop te beindigen
}
}
if ($extentie_check)
{
if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
move_uploaded_file($_FILES['userfile']['tmp_name'], "../../nieuws/plaatjes/" . $uploadname);
chmod('../../nieuws/plaatjes/'.$uploadname.'', 0666);
echo "";
}
}
else
{
echo "Erg ging iets mis, mogelijk is je bestand te groot, of is het een verkeerd bestandstype (alleen .jpg is toegestaan). <br><br><p>";
echo "";
}
//maken en opslaan van thumnails
//site chmod 0777 /httpdocs/database/thumbnails/ in window, other, FTPlog
/**
* @param string $sImg The location of the image that needs to be resized to a thumbnail
* @param int $iMaxWidth The maximum width of the thumbnail
* @param int $iMaxHeight The maximum hight of the thumbnail
* @param string $sImg The location of the new image (including name of image)
* @return bool
*
*/
$sImg = '../../nieuws/plaatjes/'.$uploadname.'';
$sStore = '../../nieuws/plaatjes_miniaturen/'.$uploadname.'';
$iMaxHeight = 67;
$iMaxWidth = 100;
function createThumbnail($sImg, $iMaxWidth, $iMaxHeight, $sStore)
{
//Check if the image exists
if(!@file_exists($sImg))
{
return false;
}
//Retrieve information of the image
if(!@$aSize = getimagesize($sImg))
{
return false;
}
//Automatic calculation of maximum height or width
$dProportion = $aSize[1]/$aSize[0];
if($iMaxWidth>$aSize[0])
{
$iWidth = $iMaxHeight>$aSize[1] ? $aSize[0] : round($iMaxHeight/$dProportion);
$iHeight = $iMaxHeight>$aSize[1] ? $aSize[1] : $iMaxHeight;
}
else if($iMaxWidth<$aSize[0])
{
if($iMaxHeight>$aSize[1])
{
$iWidth = $iMaxWidth;
$iHeight = round($iMaxWidth*$dProportion);
}
else
{
if($dProportion>1)
{
$iNewWidth=round($iMaxHeight/$dProportion);
if($newWidth>$iMaxWidth)
{
$iWidth = $iMaxWidth;
$iHeight = round($iMaxWidth*$dProportion);
}
else
{
$iWidth = round($iMaxHeight/$dProportion);
$iHeight = $iMaxHeight;
}
}
else
{
$iNewHeight = round($iMaxWidth*$dProportion);
if($iNewHeight>$iMaxHeight)
{
$iWidth = round($iMaxHeight/$dProportion);
$iHeight = $iMaxHeight;
}
else
{
$iWidth = $iMaxWidth;
$iHeight = round($iMaxWidth*$dProportion);
}
}
}
}
//Create empty image resource for thumbnail
$rDest = imagecreatetruecolor($iWidth,$iHeight);
//Create image resource from the specified image depending on the format
switch($aSize[2])
{
case 1: $rSrc=imagecreatefromgif($sImg);break;
case 2: $rSrc=imagecreatefromjpeg($sImg);break;
case 3: $rSrc=imagecreatefrompng($sImg);break;
default: return false;
}
//Create the thumbnail resource
$bNoError = imagecopyresampled($rDest, $rSrc, 0, 0, 0, 0, $iWidth, $iHeight, $aSize[0], $aSize[1]);
//Save the thumbnail on the specified location
if($bNoError)
{
switch($aSize[2])
{
case 1: $bNoError=imagegif($rDest, $sStore);break;
case 2: $bNoError=imagejpeg($rDest, $sStore, 100);break;
case 3: $bNoError=imagepng($rDest, $sStore);break;
}
}
//Return true when the thumbnail is created, false otherwise
return $bNoError;
}
if(createThumbnail($sImg, $iMaxWidth, $iMaxHeight, $sStore))
{
echo "";
}
else
{
echo "<br><br>Error: Thumbnail niet geupload.";
}
?>
global $_FILES;
$filename = $_FILES['userfile']['name'];
$allow[0] = "jpg";
// $allow[3] = "exe"; enz.
if ($_POST["newname"])
$uploadname = $_POST['newname'];
else
$uploadname = $_FILES['userfile']['name'];
$extentie = substr($uploadname, -3);
for ($i = 0; $i < count($allow); $i++)
{
if ($extentie == $allow[$i])
{
$extentie_check = "ok";
$i = count($allow) + 5; // om loop te beindigen
}
}
if ($extentie_check)
{
if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
move_uploaded_file($_FILES['userfile']['tmp_name'], "../../nieuws/plaatjes/" . $uploadname);
chmod('../../nieuws/plaatjes/'.$uploadname.'', 0666);
echo "";
}
}
else
{
echo "Erg ging iets mis, mogelijk is je bestand te groot, of is het een verkeerd bestandstype (alleen .jpg is toegestaan). <br><br><p>";
echo "";
}
//maken en opslaan van thumnails
//site chmod 0777 /httpdocs/database/thumbnails/ in window, other, FTPlog
/**
* @param string $sImg The location of the image that needs to be resized to a thumbnail
* @param int $iMaxWidth The maximum width of the thumbnail
* @param int $iMaxHeight The maximum hight of the thumbnail
* @param string $sImg The location of the new image (including name of image)
* @return bool
*
*/
$sImg = '../../nieuws/plaatjes/'.$uploadname.'';
$sStore = '../../nieuws/plaatjes_miniaturen/'.$uploadname.'';
$iMaxHeight = 67;
$iMaxWidth = 100;
function createThumbnail($sImg, $iMaxWidth, $iMaxHeight, $sStore)
{
//Check if the image exists
if(!@file_exists($sImg))
{
return false;
}
//Retrieve information of the image
if(!@$aSize = getimagesize($sImg))
{
return false;
}
//Automatic calculation of maximum height or width
$dProportion = $aSize[1]/$aSize[0];
if($iMaxWidth>$aSize[0])
{
$iWidth = $iMaxHeight>$aSize[1] ? $aSize[0] : round($iMaxHeight/$dProportion);
$iHeight = $iMaxHeight>$aSize[1] ? $aSize[1] : $iMaxHeight;
}
else if($iMaxWidth<$aSize[0])
{
if($iMaxHeight>$aSize[1])
{
$iWidth = $iMaxWidth;
$iHeight = round($iMaxWidth*$dProportion);
}
else
{
if($dProportion>1)
{
$iNewWidth=round($iMaxHeight/$dProportion);
if($newWidth>$iMaxWidth)
{
$iWidth = $iMaxWidth;
$iHeight = round($iMaxWidth*$dProportion);
}
else
{
$iWidth = round($iMaxHeight/$dProportion);
$iHeight = $iMaxHeight;
}
}
else
{
$iNewHeight = round($iMaxWidth*$dProportion);
if($iNewHeight>$iMaxHeight)
{
$iWidth = round($iMaxHeight/$dProportion);
$iHeight = $iMaxHeight;
}
else
{
$iWidth = $iMaxWidth;
$iHeight = round($iMaxWidth*$dProportion);
}
}
}
}
//Create empty image resource for thumbnail
$rDest = imagecreatetruecolor($iWidth,$iHeight);
//Create image resource from the specified image depending on the format
switch($aSize[2])
{
case 1: $rSrc=imagecreatefromgif($sImg);break;
case 2: $rSrc=imagecreatefromjpeg($sImg);break;
case 3: $rSrc=imagecreatefrompng($sImg);break;
default: return false;
}
//Create the thumbnail resource
$bNoError = imagecopyresampled($rDest, $rSrc, 0, 0, 0, 0, $iWidth, $iHeight, $aSize[0], $aSize[1]);
//Save the thumbnail on the specified location
if($bNoError)
{
switch($aSize[2])
{
case 1: $bNoError=imagegif($rDest, $sStore);break;
case 2: $bNoError=imagejpeg($rDest, $sStore, 100);break;
case 3: $bNoError=imagepng($rDest, $sStore);break;
}
}
//Return true when the thumbnail is created, false otherwise
return $bNoError;
}
if(createThumbnail($sImg, $iMaxWidth, $iMaxHeight, $sStore))
{
echo "";
}
else
{
echo "<br><br>Error: Thumbnail niet geupload.";
}
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?
$id=$HTTP_POST_VARS['id'];
$artikel_id=$HTTP_POST_VARS['artikel_id'];
$fotonummer=$HTTP_POST_VARS['fotonummer'];
$bestandsnaam=$HTTP_POST_VARS['bestandsnaam'];
//Get soortinfo
$var = mysql_query("SELECT * FROM plaatjes WHERE artikel_id LIKE '$id' ORDER BY fotonummer DESC LIMIT 1") or die (mysql_error());
//alleen submitten als er een nieuwe foto wordt toegevoegd met beschrijving, dus niet in geval van foto vervangen. Alleen in het upload formulier wordt een soortinformatie gesubmit door het formulier zoals photonr. In het vervang script wordt alleen foto vervangen, en door het formulier geen info meegestuurd. Wellicht dit script later op een aparte pagina zetten.
if (isset($fotonummer)) {
//update foto informatie
$sql = "INSERT INTO plaatjes (artikel_id, fotonummer, bestandsnaam)
VALUES ('$artikel_id', '$fotonummer', '$bestandsnaam')";
mysql_query($sql) or die(mysql_error());
//geef aan dat gegevens in tabel zijn toegevoegd
echo "";
}
else
{
echo "";
}
?>
$id=$HTTP_POST_VARS['id'];
$artikel_id=$HTTP_POST_VARS['artikel_id'];
$fotonummer=$HTTP_POST_VARS['fotonummer'];
$bestandsnaam=$HTTP_POST_VARS['bestandsnaam'];
//Get soortinfo
$var = mysql_query("SELECT * FROM plaatjes WHERE artikel_id LIKE '$id' ORDER BY fotonummer DESC LIMIT 1") or die (mysql_error());
//alleen submitten als er een nieuwe foto wordt toegevoegd met beschrijving, dus niet in geval van foto vervangen. Alleen in het upload formulier wordt een soortinformatie gesubmit door het formulier zoals photonr. In het vervang script wordt alleen foto vervangen, en door het formulier geen info meegestuurd. Wellicht dit script later op een aparte pagina zetten.
if (isset($fotonummer)) {
//update foto informatie
$sql = "INSERT INTO plaatjes (artikel_id, fotonummer, bestandsnaam)
VALUES ('$artikel_id', '$fotonummer', '$bestandsnaam')";
mysql_query($sql) or die(mysql_error());
//geef aan dat gegevens in tabel zijn toegevoegd
echo "";
}
else
{
echo "";
}
?>
Gewijzigd op 01/05/2014 14:00:35 door Ty Muus
$HTTP_POST_VARS en de mysql_* functies zijn deprecated en zullen dus komen te vervallen.
Je script is zo lek als een mandje. Zoek eens op SQL Injection. Altijd gebruikersinvoer controleren i.p.v. alles maar in de database stoppen waaronder ook 'verkeerde' data.
Or die is ook geen mooie manier. Een mysql_error() presenteren in een live omgeving... Het is voor kwaadwillenden net een speeltuin :)
Je zou een groot gedeelte van je code moeten aanpassen/verbeteren wil je hier nog wat van maken.
Mogelijk kun je sneller iets nieuws schrijven of een andere, recenter, script zoeken.
http://www.php.net/manual/en/reserved.variables.post.php
Daar staat $HTTP_POST_VARS [deprecated], $HTTP_POST_VARS worden dus afgekeurd.
Ik ben niet de slimste op PHP gebied, maar probeer eens in plaats van
te gebruiken...
Alvast een aanrader voor het geval je je scripts later weer moet aanpassen: Mysql is verouderd, nog wel bruikbaar maar stap over op Mysqli of PDO.
Veel te weinig controles op de input.
mysql is antiek => mysqli of pdo.
HTTP_POST_VARS is antiek.
if ($_POST["newname"]) test eigenlijk op true/false dus best een vreemde controle.
Ik raad je aan het even geheel te herschrijven met meer controles, veiligheid en met de nieuwere manier van database functions.
Gewijzigd op 01/05/2014 14:14:01 door - SanThe -
Helaas ben ik zelf niet een fantastische PHP kenner dus de basis die ooit door iemand geschreven is gebruik ik maar, werk ik wat bij, enz. Ik moet er toch echt fanatiek aan gaan sleutelen merk ik wel.
Gelukkig staat het script wel in een admin, wat het al iets veiliger maakt.
Ik werk met MySQL 5.1. Helaas kan ik daar niks aan veranderen, omdat het webbedrijf hier over gaat. Ik weet niet beter.. :-(
Zo is mysql_*() straks verleden tijd. Een mooi moment om naar MySQLi te kijken of PDO. De laatste is erg krachtig als je ook met andere databases wilt werken, zoals MsSQL, SQLite , ProstGreSQL, Oracle, Firebird etc....
Zou dit script enigszins goed zijn, vanuit jullie optiek bekeken?
http://www.w3bees.com/2013/02/simple-file-upload-with-php.html
Wat wil je voorleggen? We geven jou tips. Dit staat los van je webhosting. Het is juist goed dat hun hebben ge-upgrade.
Mysql 5.1 is volgens mij ook al vrij oud, maar dat heeft hier inderdaad niks mee te maken.
Uiteraard neem ik jullie adviezen ter harte.
Al moet ik nu wel bekennen dat ik aardig met de handen in het haar zit, omdat ik iets moet fixen wat deel uitmaakt van een groter geheel, en ik niet weet hoe ik dat moet doen. De scripts moet ik zelf schrijven want ze staan niet op internet, en aangezien ik 2 linker handen heb wat PHP betreft... :-(
EDIT: Na wat zoekwerk over mysqli zou het dus kunnen dit gewoon samen werkt met hetgeen wat ik herken als MySQL? Dus mocht ik mysqli in de scripts verwerken, dan werkt dit gewoon met de huidige MySQL en MyAdmin?
Gewijzigd op 01/05/2014 15:51:24 door Ty Muus
Je hoeft infeite niks te overleggen met je hosting, want beiden zullen wel aangeboden worden door hen, tenzij die 6 jaar achter de feiten aan loopt. Maar daar gaan we maar niet van uit.
Ty Muus op 01/05/2014 15:47:21:
Dus mocht ik mysqli in de scripts verwerken, dan werkt dit gewoon met de huidige MySQL en MyAdmin?
Correct!
MyAdmin (PhpMyAdmin?) zal niets anders zijn dan een beheertool voor MySQL, dus die staat er los van, gewoon een data-invoer- en controlepaneel die in PHP gebouwd zal zijn.
Gewijzigd op 01/05/2014 15:55:36 door - Ariën -
Ik zal het doorvoeren :)