profiel upload script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Iwan noom

iwan noom

17/04/2016 23:16:54
Quote Anchor link
goeiedag ik heb uit een mafia source een upload script gehaald en geprobeert om te zetten naar de osbanditi source het lukt voor een gedeelte via de database kan ik handmatig een profiel foto instellen dat netjes word weergeven

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)
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
            <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>&nbsp;</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!
Gewijzigd op 17/04/2016 23:45:27 door - Ariën -
 
PHP hulp

PHP hulp

06/11/2024 04:07:20
 
- Ariën  -
Beheerder

- Ariën -

17/04/2016 23:49:11
Quote Anchor link
Om je op weg te helpen om je probleem op te lossen: Kijk eens naar $extensie. Wat bevat deze voor waarde?
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 -
 
Ivo P

Ivo P

18/04/2016 13:00:07
Quote Anchor link
wat voor php-versie moet je hebben om HTTP_POST_FILES nog te laten werken?

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.
 
Thomas van den Heuvel

Thomas van den Heuvel

18/04/2016 14:29:25
Quote Anchor link
- 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.
 



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.