profiel upload script
alleen bij het uploaden krijg ik de een melding dat het plaatje dat ik upload geen geldige excentisie is wie o wie kan me helpen dit script werkend te krijgen.
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
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
<h2>
<img src="images/icons/profiel.png" class="icon"alt="" />
<b>Persoonlijk Plaatje</b>
</h2>
<div class="info">
<form method="post" name="avatar" enctype="multipart/form-data">
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<tr>
<td width="190" valign="top"><strong>Huidige Avatar:</strong></td>
<td width="396"><img src="<?php echo$data->avatar; ?>" width="100" height="100" /></td>
</tr>
<tr>
<td width="190" valign="top"><strong>Nieuwe Avatar:</strong></td>
<td width="396"><input type="file" name="bestand"></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" value="Upload" name="avatar"></td>
</tr>
</table>
</form>
<?php if(isset($_FILES['bestand']) and(!empty($_FILES['bestand']['name']))) {
//if(empty($_FILES['bestand']['name'])){
//echo "Je hebt geen plaatje/foto geselecteerd voor te gebruiken als je avatar !";
//}else{
$grootte = getimagesize( $_FILES['bestand']['tmp_name'] );
$filename = $HTTP_POST_FILES['bestand']['name'];
//als het bestand groter is dan 102400 bytes(100kb) word hij niet toegelaten
if($grootte[0] > 100 OR $grootte[1] > 100){
echo "<b>Het plaatje is te groot.<br>De grootte mag maximaal 1024 * 768 px. zijn!</b><br>";
}else{
//kijken of het bestand wel een gif, png of jpg is
if(strtoupper($extensie) == "GIF" OR strtoupper($extensie) == "JPG" OR strtoupper($extensie) == "PNG" OR strtoupper($extensie) == "BMP") {
//kijken of er een nieuwe naam aan het bestand is gegeven
// if(empty($_POST['naam'])) {
// $naam = $_FILES['bestand']['name'];
// } else {
//strip de extensie om die achter de nieuwe bestandsnaam te plakken
$x = strrchr($_FILES['bestand']['name'], ".");
$naam = "".$login."".$x."";
// }
//het bestand uploaden met de nieuwe of oude naam
move_uploaded_file($_FILES['bestand']['tmp_name'], "avatermap/" . $users);
mysql_query("Update `users` Set `avatar`='avatermap/".$users."' Where login='".$login."'");
echo "<b>Het plaatje is succesvol geupload en is nu uw avatar.</b><br>";
} else {
echo "<b>De extentie van het plaatje moet eindigen met .gif, .png, .jpg, .jpeg of .bmp !</b><br>";
}
}
}
?>
<br style="clear: both" />
</div>
<img src="images/icons/profiel.png" class="icon"alt="" />
<b>Persoonlijk Plaatje</b>
</h2>
<div class="info">
<form method="post" name="avatar" enctype="multipart/form-data">
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<tr>
<td width="190" valign="top"><strong>Huidige Avatar:</strong></td>
<td width="396"><img src="<?php echo$data->avatar; ?>" width="100" height="100" /></td>
</tr>
<tr>
<td width="190" valign="top"><strong>Nieuwe Avatar:</strong></td>
<td width="396"><input type="file" name="bestand"></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" value="Upload" name="avatar"></td>
</tr>
</table>
</form>
<?php if(isset($_FILES['bestand']) and(!empty($_FILES['bestand']['name']))) {
//if(empty($_FILES['bestand']['name'])){
//echo "Je hebt geen plaatje/foto geselecteerd voor te gebruiken als je avatar !";
//}else{
$grootte = getimagesize( $_FILES['bestand']['tmp_name'] );
$filename = $HTTP_POST_FILES['bestand']['name'];
//als het bestand groter is dan 102400 bytes(100kb) word hij niet toegelaten
if($grootte[0] > 100 OR $grootte[1] > 100){
echo "<b>Het plaatje is te groot.<br>De grootte mag maximaal 1024 * 768 px. zijn!</b><br>";
}else{
//kijken of het bestand wel een gif, png of jpg is
if(strtoupper($extensie) == "GIF" OR strtoupper($extensie) == "JPG" OR strtoupper($extensie) == "PNG" OR strtoupper($extensie) == "BMP") {
//kijken of er een nieuwe naam aan het bestand is gegeven
// if(empty($_POST['naam'])) {
// $naam = $_FILES['bestand']['name'];
// } else {
//strip de extensie om die achter de nieuwe bestandsnaam te plakken
$x = strrchr($_FILES['bestand']['name'], ".");
$naam = "".$login."".$x."";
// }
//het bestand uploaden met de nieuwe of oude naam
move_uploaded_file($_FILES['bestand']['tmp_name'], "avatermap/" . $users);
mysql_query("Update `users` Set `avatar`='avatermap/".$users."' Where login='".$login."'");
echo "<b>Het plaatje is succesvol geupload en is nu uw avatar.</b><br>";
} else {
echo "<b>De extentie van het plaatje moet eindigen met .gif, .png, .jpg, .jpeg of .bmp !</b><br>";
}
}
}
?>
<br style="clear: both" />
</div>
- Ariën -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 17/04/2016 23:45:27 door - Ariën -
Kijk eens met var_dump of een simpele echo.
Verder zie ik zie toch een hoop onveiligheid in je script. Zo controleer je niet op mime-types.
De beste beveiliging is door te kijken naar getimagesize(). Deze kan aangeven of iets wel of geen afbeelding is. Als dit geen afbeelding is, dan kan je een foutmelding tonen aan de gebruiker. Verder is het zinloos om te controleren op drie letters. Er zijn ook extensies met vier tekens, zoals jpeg.
Om je script toekomstbestendiger te maken raad ik aan om zo snel mogelijk over te stappen op MySQLi of PDO, en minimaal foutafhandeling in je queries te bouwen. Want als de error_reporting 'live' uit staat, en er gaat wat fout, dan lijkt alles goed te gaan terwijl dat niet zo is.
Verder zijn tabellen ook uit de tijd. Ik weet niet hoe oud dit script is? Maar ik vermoed best wel een tijdje.
Gewijzigd op 17/04/2016 23:51:45 door - Ariën -
Dat is toch al heeeel lang geleden vervangen door $_FILES
Toevoeging op 18/04/2016 13:01:57:
ah
http://php.net/manual/en/reserved.variables.files.php
zegt dat met de komst van PHP 4.1 het $_FILES werd.
Toevoeging op 18/04/2016 13:05:23:
http://www.php.net/manual/en/ini.core.php#ini.register-long-arrays
in PHP 5.3 kun je de oude, lange variant nog activeren via PHP.ini, maar sinds PHP 5.4 dus niet meer.
- Ariën - op 17/04/2016 23:49:11:
Zo controleer je niet op mime-types.
Bij mijn weten is een MIME-type van een bestand simpelweg gebaseerd op de extensie die een bestand heeft. Je browser "mapt" deze vervolgens maar een bijbehorend MIME-type, maar dit hoeft niet representatief te zijn voor de data in het bestand. Wanneer ik een textbestand hernoem naar blaat.jpg en deze upload, zal het MIME-type "image/jpeg" zijn.
Als je echt een aan zekerheid grenzende waarschijnlijkheid wilt hebben was daar vroeger een extensie genaamd ImageMagick (oid) die echt ging speuren naar "byte patronen" in een bestand.
- Ariën - op 17/04/2016 23:49:11:
De beste beveiliging is door te kijken naar getimagesize().
Die check is wellicht nog het makkelijkste om te bepalen of je met een afbeelding te maken hebt inderdaad.