Formular mit File Upload Feld

Turtle78

Mitglied
Hallo zusammen,

Bei folgenden Code meckert die Klasse herum, die das JPEG Bilder verkleinern soll, wenn keine Datei übergeben wird. Wenn eine Datei hochgeladen wird läuft das Script bestens. Ich vermute der Fehler liegt bei der Kontrolle, ob das Upload Feld leer ist oder nicht, ich finde aber keine Andere Lösung. Weiß jemand Rat?


Hier mal der Code, ich hoffe dann wird es deutlich.

Code:
    // Konfigurationsdatei laden //
    include ("include/config.php");
    // Verbindung zur Datenbank //
    include ("include/connect.php");
    
    if (!empty($_FILES['file']))
    {
    // Einbunden der Thumbnail Erstellung //
    include ("include/imageresize.inc.php");
    
    $tempname = $_FILES['file']['tmp_name'];
    $name = $_FILES['file']['name'];
    
    $type = $_FILES['file']['type'];
    $size = $_FILES['file']['size'];
    
    $name1 = "buecher_".$_POST['nummer'].".jpg";
    
    $thumb1 = new thumb();
    $thumb1->create($tempname, 250, 0, 0);
    $thumb1->savetofile("buecherfotos/$name1", 100); // Bild speichern
    $thumb1->clear();
    
    $fotoeintrag = "$name1";
    
    
    // SQL Befehle für den Eintrag in die Tabelle mit Foto
    $sql = "INSERT INTO
    			   `apache_intern_buecher`
    		VALUES
 			 ('', '$_POST[nummer]', '$_POST[autor]', '$_POST[titel]', '$_POST[sparte]', '$_POST[typ]', '$_POST[katrin]', '$_POST[helge]', '$fotoeintrag')";
    mysql_query($sql);
    }
    
    
    else
    {
    // SQL Befehle für den Eintrag in die Tabelle ohne Foto
    $sql = "INSERT INTO
    			   `apache_intern_buecher`
    		VALUES
 			 ('', '$_POST[nummer]', '$_POST[autor]', '$_POST[titel]', '$_POST[sparte]', '$_POST[typ]', '$_POST[katrin]', '$_POST[helge]')";
    mysql_query($sql);
    }
    
    
    if (mysql_affected_rows ($res_id) > 0)
    {
    header ("Location: buecher.php");
    }
    else
    {
    header ("Location: buecher.php?eintragfehler");
    }

Vielen Dank Helge
 
Was heisst "Bei folgenden Code meckert die Klasse herum, die das JPEG Bilder verkleinern soll"? Wo meckert sie, was meckert sie, wann meckert sie? Alles wichtige Informationen, die vielen Leuten überhaupt erst Ansatzpunkte geben, wo sie denn in deinem Code nachschauen können. Das Forum ist schließlich kein Traum-Debugger, wo du fehlerhaften Code reinsteckst und die Lösung rauskommt ;).
 
Das Problem ist, das die if Schleife durchlaufen wird, wenn ich mit dem Formular eine Datei übergebe. Wenn ich im Formular keine Datei übergebe, wird aber nicht die else Schleife durchlaufen und die Klasse imageresize.inc.php mosert dann, daß sie keine JPG Datei zum verabreiten hat. Das ist ja der Grund, warum ich überhaupt eine if / else Abfrage mache. Ansonsten trägt ein leer gelassenes Formularfeld einfach nicht in der mysql Datenbank ein und alles ist in Ordnung. Sieht das bei einem File Upload Feld anders aus? Wird da immer ein Wert übergeben, auch wenn keine Datei angegeben ist? Dann würde die if / else Schleife ja richtig laufen.

Ich hoffe nun ist es etwas deutlicher geworden.

Gruß Helge
 
Also erstmal sorry, beim genauen Durchlesen :-) hat die erste Angabe durchaus gereicht, da deine Vermutung ja schon ein guter Hinweis ist. Ich muss vieeel ruhiger werden und nicht gleich bei "Die Klasse mosert rum" anspringen. ;)

Gib doch mal vor der if-Abfrage ein print_r($_FILES); aus. Ich kann mir durchaus vorstellen (mehr auch nicht), dass bei einem leeren Feld das Array durchaus gefüllt wird, nur halt mit leeren Werten - wobei empty() dann trotzdem ein Array erkennen würde.
 
Also die Ausgabe gibt mir folgendes
Code:
 Array ( [file] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) )

sieht für mich jetzt so aus, als wenn trotz leeren Formularfeld etwas übergeben wird.
Also kann ich scheinbar mit empty da nichts anfangen.
Jetzt bräuchte ich nur einen Denkanstoß, wie ich das Problem anders lösen kann.

Lieben Dank Helge
 
Die Ausgabe gibt dir auf die Schnelle schon mal fünf Möglichkeiten. ;)

Nachtrag: Ein Blick in die Doku könnte dir vielleicht die Auswahl der sinnvollsten Möglichkeit davon erleichtern.
 
Super, das hat mir schon mal geholfen.

Wenn ich jetzt aber sage

Code:
  if ($_FILES['file']['error'] != 4)

schreibt er vernünftig in die Datenbank, wenn er eine Datei bekommt. Geht aber ohne Datei nicht in die else Schleife rein.
Der Fehler 4 ist "Keine Datei hochgeladen".

Oder war das der Falsche ansatz?
 
Sorry, hab vergessen zu erwähnen, daß er jetzt in die letzte else Schleife geht und mir die Fehlermeldung ausgibt, das keine Daten eingetragen wurden.
 
Ich würde if ($_FILES['file']['error'] == 0) schreiben, weil der Eintrag mit Bild ja nur geschehen soll, wenn absolut kein Fehler aufgetaucht ist. Und um meinen Denkfehler zu berichtigen: Dann noch elseif ($_FILES['file']['error'] == 4) für den Eintrag ohne Bild und ein abschließendes else für die Ausgabe einer Fehlermeldung.
 
Zuletzt bearbeitet:
Ich hab den Fehler gefunden. Der sql Eintrag ohne das Foto war falsch.
Die Bedingung für das if / else mit der Fehlerausgabe war also der richtige Tip.
Also vielen Dank für die Hilfestellung, ich hab wieder was gelernt.

Gruß Helge
 
Zurück