• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Mail-Formular optimieren. Fallunterscheidungen, File-Upload

aJunkie

Mitglied
Hallo,

ich habe ein Formular, welches zwar funktioniert, aber nicht funktioniert, wenn es nicht funktioniert. :P

Also Pflichtfelder werden überpüft, wenn alles okay, Email senden.

Das Ding ist, wenn ich alle Pflichtfelder leer lasse, aber eine Datei zum Uploaden auswählen, submit -> es lädt so lange, bis die Datei auf dem Server ist. Das ist doch Schwachsinn, weil die Pflichtfelder sowieso leer sind.
Sobald der fertig ist mit dem Laden, kommen erst die Fehlermeldungen ("Bitte ausfüllen, etc.")... und neben dem "Datei auswählen" Button wird dann das temporäre Verzeichnis ausgegeben. -.- Nicht gut.

Script:
PHP:
<?php
    if (isset($_POST['submit'])) {    // wenn Formuluar abgeschickt. name="submit"
        $ausgabe = '';                // Ausgabe standardmäßig leer.
        $fehler = '';                // Keine Fehlermeldung vorhanden beim Erstaufruf.

// Fallunterscheidungen für die einzelnen Felder hier.

if(isset($_POST['pname']) && !is_array($_POST['pname']) && $_POST['pname'] != '') {        // Name, Vorname
            $ausgabe .= '<b>Name:</b> ' . htmlspecialchars($_POST['pname']) . '<br>';
        } else {
            $fehler .= 'Bitte Namen eingeben!<br>';                                                // Fehlermeldung, hier also ein Pflichtfeld. Fehlermeldung anhängen.
        }
// wenn also hier Name nicht eingegeben, soll es gar nicht zum Fileupload kommen.
// break? oder was muss ich machen?



        if(isset($_FILES['datei'])) {                                                                // wenn Datei ($datei) vorhanden
        $ausgabe .= '<b>Dateiname:</b> ' . htmlspecialchars($_FILES['datei']['name']);                // Dateiname
        move_uploaded_file($_FILES['datei']['tmp_name'],                                            // vom Temp Ordner in angegebenes Verzeichnis verschieben.
        'domain/verzeichnis/' . basename($_FILES['datei']['name']));
        $ausgabe .= ' <a href="http://domain.de/verzeichnis' . htmlspecialchars($_FILES['datei']['name']) . '" target="_blank">Datei öffnen</a><br>';
        
        }

        if ($fehler == '') {            // Wenn keine Fehler vorhanden, also $fehler ist leer, dann...
                    $extra = "From: $pname <$pemail>\n";
                     $extra .= "Content-Type: text/html\n";
            mail('$admin','Subject', $ausgabe, $extra);
            mail($besucher, 'Subjekt', $pantwort, "From: domain.de <$admin>");
            include("footer.php");
            exit();
        }
    }
 
Das Script erscheint mir logisch. Die Datei wird auch hochgeladen, wenn Name nicht gesetzt ist.

Versuche doch mal den Teil für den Upload mit in die IF-Abfrage zur Prüfung des Namens zu schliessen.
Beispiel:
PHP:
<?php
if(!isset($_POST['pname']) .......){
    $ausgabe... // definieren
   
    // und hier zusätzlich noch der Upload-Teil
}else{ ... }
?>
 
Das bringt es gerade irgendwie nicht. Ich habe 10 Felder, die überprüft werden sollen.

Edit: Wenn ich es so mache wie oben, wird es trotzdem hochgeladen.
Das größere Problem ist, dass der Nutzer dann das temp.Verzeichnis sieht.
 
Dann wäre das File ja im Temp-Ordner.

Habe jetzt aber noch eine andere Idee.
Wie wäre es, wenn du die IF-Abfrage für den File-Upload noch mit einem && $fehler == '' versiehst.
PHP:
if(isset($_FILES['datei']) && $fehler == '')...
 
Habe ich gleich am Anfang versucht.
Es lädt trotzdem erst die Datei hoch und dann kommen die Fehlermeldungen + Temp_Verzeichnis
 
Zurück
Oben