Problem mit bildupload

ciberjoerg

Erfahrenes Mitglied
Mein problem es sollen nur bilder im jpg Format hochgeladen werden, aber es werden trotz dem alle Datentypen gespeichert.
Was is denn in meinen script nur falsch

PHP:
<?
if($_POST["action"]){ 
    $filename = ""; 
    if ($HTTP_POST_FILES['userfile']['tmp_name']<> 'none'){    
        $file = $HTTP_POST_FILES['userfile']['name']; 
        $temp = $HTTP_POST_FILES['userfile']['tmp_name'];
        $type = $HTTP_POST_FILES['userfile']['type']; 
        $path_parts = pathinfo($file); 
        $filename = "$u->nic." . $path_parts["extension"]; 
        if($type != "image/jpeg") { 
$err[] = "Es dürfen nur Bilder im .jpg Format hochgeladen werden."; 
}  
        if($HTTP_POST_FILES['userfile']['size'] <= $groessemax*1024){
            if(decoct(fileperms($img_path_up))==40777){
                if(@copy($temp, $img_path_up.$filename)){ 
                    echo '<div style="color:green;">Datei ist auf den Server!<br>'; 
                    echo 'Url der Datei: <br><img src="http://'.$_SERVER['HTTP_HOST'].$path.$u->nic.'.jpg"  width="100"><br><a href="'.$_SERVER['PHP_SELF'].'">Bild Ersetzen...</a><br></div>'; 
                } else {
                    echo '<div style="color:red;">Die Datei konnte nicht auf den Server geladen werden. <a href="'.$_SERVER['PHP_SELF'].'">Noch mal versuchen...</a><br><br></div>';
                }
            } else {
                echo '<div style="color:red;">Der Upload Ordner hat keine Schreibrechte! <a href="'.$_SERVER['PHP_SELF'].'">Noch mal versuchen...</a><br><br></div>';
            }
        } else {
            echo '<div style="color:red;">Die Datei ist zu groß! Die Datei darf nicht größer als '.$groessemax.' KB (KiloByte) sein. <a href="'.$_SERVER['PHP_SELF'].'">Noch mal versuchen...</a><br><br></div>';
        }
    } 
} else { 
?> 
<form method="post" enctype="multipart/form-data" action="<?php echo $_SERVER["../../nexus3/PHP_SELF"]; ?>">
    die Datei darf nicht gr&ouml;&szlig;er sein als <?php if((maximaledateiuploadgroesseermitteln()/1024)>$groessemax) echo $groessemax; else echo (maximaledateiuploadgroesseermitteln()/1024);?> KB (KiloByte).<br><br>
    <input name="userfile" type="file" size="40"><br><br>
    <input type="submit" name="action" value="Speichern">
</form> 
<? } ?>
<br><strong>File List</strong><br><br> 
<?
// Datein Löschen
if($_GET["loechen"]==1 AND $_GET["file"]!=''){
    if(file_exists($_GET["file"])==true){
        if(@unlink($_GET["file"])==true) echo '<div style="color:green;">Die Datei wurde erfolgreich gelöscht!<br><br></div>';
        else echo '<div style="color:red;">Die Datei konnte nicht gelöscht werden.<br><br></div>';
    } else {
        echo '<div style="color:red;">Die Datei gibt es nicht im Upload Verzeichnis!<br><br></div>';
    }
}
?>
 
Servus,

also was mir da mal so aufgefallen ist... diese if-Abfrage speichert einfach nur den Satz im Array... mehr nicht. Wird auch nicht mehr verwendet... drum wird jede Datei hochgeladen...
PHP:
 if($type != "image/jpeg") { 
$err[] = "Es dürfen nur Bilder im .jpg Format hochgeladen werden."; 
}

vg Clemens
 
Hi

Benutze die globale Variable $_FILE für den Dateiinhalt, dann würde ich dir empfehlen getimagesize()
für die Dateitypbestimmung. Dann fragst du einfach ab ob es ein jpg ist wenn das der Fall ist dann lädst du hoch, ansonsten gibst du ein Fehler oder ähnliches aus. (Fallunterscheidung) :)

mfg
 
Servus...

naja schau Dir doch mal an in welchem Kontext diese if - Anweisung steht...

Code:
if ( Formular abgeschickt ) {
	if ( Dateifeld nicht leer ) {
		if ( Bild kein jpg ) { 
			// Fehlermeldung in Array speichern
		}
        
		if ( Datei hat die richtige Grösse ) { 
			// Bild hochladen
		} 
		else {
			// Fehler Die Datei ist zu groß
		}
	}
}

vg Clemens
 
sorry bin wirklich anfänger in php also mit 3 wochen programmier erfahrung. bin froh das das script überhaupt was auf meinen server speichert.:) aber ich versteh echt grad nur noch bahnhof. also wo genau soll jetzt die abfrage rein :confused:
 
Hallo,

das Problem ist genau hier:

PHP:
if($type != "image/jpeg") { 
    $err[] = "Es dürfen nur Bilder im .jpg Format hochgeladen werden."; 
}
if($HTTP_POST_FILES['userfile']['size'] <= $groessemax*1024){

Wie Clemens schon gesagt hat, wird hier, außer dass ein String-Wert in ein Array gespeichert wird (das allerdings keine weitere Verwendung hat), nichts gemacht. PHP geht in die if-Anweisung und schreibt eben diesen Wert und dann gehts weiter. D.h. egal ob ein Fehler auftritt oder nicht, wird er das Bild speichern, weil
PHP:
if($HTTP_POST_FILES['userfile']['size'] <= $groessemax*1024){
und folgendes immer ausgeführt wird.

Und wie Online-Skater geschrieben hat, ist $_FILES seit PHP 4.1.0 $HTTP_POST_FILES vorzuziehen.

Viele Grüße,
flo
 
ok und wie soll das dann aussehen wenn es die abfrage erfüllt? also so das er die größe und die endung prüft und dann erst die datei auf meinen server läd?
 
Hi,

um etwaigen Verwirrungen zu entgehen noch ein kleiner Hinweis:

Die Dateien werden so oder so auf den Server geladen, aber Du willst ja nur die speichern, die gut sind. Also einen Upload verhindern kannst Du auf der Serverseite nicht, weils da ja schon zu spät ist.

Speichern tust Du die Datei ja erst mit der if-Anweisung, die die copy-Funktion aufruft.

Du willst aber ja auch die übergeordneten if-Anweisungen nur ausführen, wenn die Datei, die hochgeladen wurde, das richtige Format hat. Im Fehlerfall willst Du gleich eine Fehlermeldung ausgeben.

Gruß,
flo
 
Zurück