Upload Bilddatei funktioniert nicht

helaukoenig

Erfahrenes Mitglied
Also, eigentlich ganz einfach: Ich möchte mittels Formular Bild hochladen, dazu anbei der entscheidende Teil des Formulars:
HTML:
<tr>
                    <td align='right' valign='top'>Datei:&nbsp;</td>
                    <td colspan='4'>
                    <input type='file' name='bild'>
                    </td>
                    </tr>
                    <td align='right' valign='top'>
                    Mannschaftsfoto&nbsp;&nbsp;<input type='radio' name='foto' value='1'>
                    </td>
                    <td valign='top'>
                    Spielerbild&nbsp;&nbsp;<input type='radio' name='foto' value='2' checked>
                    </td>
                    <td align='right' valign='top' colspan='3'>&nbsp;</td>
                    <tr>
                    <td>
                    <input type='hidden' name='foto' value='$foto'>
                    <input type='hidden' name='rechte' value='$rechte'></td>
                    <td><input type='hidden' name='aktion' value='$aktion'></td>
                    <td><input type='hidden' name='mannschaft' value='$mannschaft'></td>
                    <td><input type='hidden' name='benutzer' value='$benutzer'></td>
                    <td><input type='hidden' name='passwort' value='$passwort'></td>
                    </tr>
                    <tr>
                    <td colspan=5 align='right' valign='middle'>
                    <input type='submit' value='hochladen' name='submitedit'/>&nbsp;&nbsp;
                    <input type='reset' value='löschen' name='resetedit'/>
                    </td>
                    </tr>

und mittels php soll die Datei dann in den entsprechenden Ordner verschoben werden:

PHP:
$tempname = $_FILES['file']['tmp_name'];
            $name = $_FILES['file']['name'];
            $type = $_FILES['file']['type'];
            $size = $_FILES['file']['size'];
            if($type != "image/gif" && $type != "image/jpeg")
            {
            $err[] = "Es dürfen nur gif und jpeg Dateien hochgeladen werden.";
            }
            if($size > "150000") {
                $err[] = "Die Datei, die du hochladen willst, ist zu groß!<br>Maximale Dateigröße beträgt 150 KB!";
            }
        if(empty($err)) {
            if($foto=="2"){
            copy($tempname,"../mannschaften/bilder/spieler/"); // hier muss der absolute pfad hin
            }
        else {
            copy($tempname,"../mannschaften/bilder/mannfotos/");
        }
            echo "Die Datei $name wurde erfolgreich hochgeladen!";
            }
        else {
            foreach($err as $error)
            echo "$error<br>";
            }

Aber alles was ich bekomme, ist die erste Fehlermeldung, nämlich dass die Bilddaten nicht vom Typ jpg oder gif seien, was sie aber definitiv sind. Kommentiere ich diese Fehlermeldung raus, bekomme ich die abschließende Erfolgsmeldung, die Dateien befinden sich aber nicht dort, wo sie hinsollen.

Bestimmt liegt es wieder an einer entscheidenden Kleinigkeit. Was habe ich also Wichtiges übersehen oder vergessen?

Danke schön.
 
Probiere mal statt
PHP:
copy($tempname,"../mannschaften/bilder/spieler/");
das hier:
PHP:
copy($tempname,"../mannschaften/bilder/spieler/".$name = $_FILES['file']['name'].".jpg"); // .jpg wennd as bild ein jpg ist

damit möchte ich dir sagen das du den absoluten pfad angeben sollst also nicht nur den pfad wo du es ablegen sollst sondern auch den namen und typ mitrein! So war das bei mir auch, ich kann aber nicht garantieren.
 
Schon mal die Mühe gemacht und im PHP-Handbuch nach copy() oder move_uploaded_file() gesucht ?
Da stehen sogar Beispiel, wie eine Datei richtig kopiert wird.
 
@hot_wax: vielen Dank, aber der Grund war viel banaler. Ich habe das Formularfeld falsch benannt.

@CIX88: Du kannst mir sicherlich die ISBN des einzig wahren PHP-Handbuchs verraten. In der Fachliteratur, die mir zur Verfügung steht, ist zu den geforderten Themen nur sehr wenig zu finden.
Aber dank deiner Anregung habe ich noch ein wenig über die Sinnhaftigkeit von Foren sinniert.
 
Hallo!

Kleine Anmerkung:
Nicht jedes JPEG ist vom Typ image/jpeg, einige geben sich auch als image/pjpeg zu erkennen.
Die solltest Du also auch in die Überprüfung des Typs mit einbeziehen.

Gruss Dr Dau
 
Im übrigen lässt sich der Type des Bildes mit dem Browser senden - was der Sicherheit beim Upload eher wenig hilft. Benutze lieber getimagesize($bild), in dem resultierenden Array ist der 3. Wert ($array[2]) der Dateitype, der dort nur gif,png,jpeg oder swf sein kann. wenn keines der Typen vorhanden ist, kannst Du das Bild verwerfen.

Grund:
Im Header kann ich Daten senden, die vorgaukeln, es sei ein jpeg, tatsache ist es aber ein MPEG mit Shrek 3 ;)

LG
Andy
 
Zurück