Antworten auf deine Fragen:
Neues Thema erstellen

Formularverarbeitung mit php - Skriptproblem

P

Pixelverwender

Guest

Ich habe gerade spaßeshalber mal das Formularskript aus Pascal Bajorats Videotutorial getestet und stolpere über folgendes Problem:

Sind alle Pflichtfelder ausgefüllt, wird die Email klaglos abgeschickt, kommt auch an und es erfolgt eine entsprechende Meldung im Browser.
Ist dies jedoch nicht der Fall (Formularfelder ohne Inhalt), erfolgt keine entsprechende Ausgabe per "echo". Und ich frage mich gerade, ob ich zu blöd bin, den Bug zu erkennen.
Auf dem Server des Webhosters läuft php 5.4, hier der Code:
Code:
<?php

$name = $_POST['name'];
$email = $_POST['email'];
$ort = $_POST['ort'];
$telefon = $_POST['telefon'];

if(
    !empty($name) && strlen($name) >= 2 &&
    !empty($email) && filter_var($email, FILTER_VALIDATE_EMAIL) &&
    !empty($ort) && strlen($ort) >= 4 &&
    !empty($telefon) && strlen($telefon) >= 4
){
    
    $an = 'name@domain.de';
    $betreff = 'Nachricht aus dem Kontaktformular der Website';
    
    $mailText = "Name:  $name \n\r";
    $mailText .= "Email:  $email \n\r";
    $mailText .= "Ort:  $ort \n\r";
    $mailText .= "Telefon:  $telefon \n\r";
    
    $mailFunktion = mail($an, $betreff, $mailText);    


    if( $mailFunktion ){
        echo 'Ihre Nachricht wurde versendet';
    }else{
        echo 'Es gab ein Problem bei der Übermittlung.';
    }
}
?>
 
Zuletzt bearbeitet von einem Moderator:

Duddle

Posting-Frequenz: 14µHz

AW: Formularverarbeitung mit php - Skriptproblem

Ich vereinfache es mal für dich, indem ich die Code-Abschnitte grob beschreibe, aber den Kontrollfluß beibehalte:
Code:
Variablen aus dem Formular holen

if(Variablen sind okay) {
    Mail zusammenbauen
    Mail verschicken
    if(die Mail wurde verschickt) {
        Erfolgsmeldung
    } ansonsten {
        Mail wurde nicht verschickt
    }
}
Jetzt ist deine Frage
Ist dies jedoch nicht der Fall (Formularfelder ohne Inhalt), erfolgt keine entsprechende Ausgabe
Siehst du jetzt die Ursache?


Duddle
 
P

Pixelverwender

Guest

AW: Formularverarbeitung mit php - Skriptproblem

:kopfpatsch: Danke, Duddle!
Falsche Klammersetzung für if/else.
Die schließende geschweifte Klammer muss schon nach der Zeile
Code:
    $mailFunktion = mail($an, $betreff, $mailText);
gesetzt werden.
Somit ist das Tutorial allerdings auch fehlerbehaftet (von anderen kleinen Fehlern abgesehen, die mir auffielen).
 

Duddle

Posting-Frequenz: 14µHz

AW: Formularverarbeitung mit php - Skriptproblem

Die schließende geschweifte Klammer muss schon nach der Zeile
Ne, das wäre noch schlechter. Die Logik ist ja korrekt, sie hat nur kein Verhalten für den Fall, dass ein Feld falsch ausgefüllt ist.
Das Abfragen von $mailFunktion passt so, weil an diesem Punkt ja nur noch geprüft werden muss ob die Mail tatsächlich geschickt wurde, das hat nichts mehr mit den Formularfeldern zu tun.


Duddle
 
P

Pixelverwender

Guest

AW: Formularverarbeitung mit php - Skriptproblem

Die Mail wird aber nur verschickt, wenn die Bedingungen für die Felder erfüllt sind, ansonsten liefert $mailFunktion "false" zurück, richtig? Also muss auch eine entsprechende Meldung ausgegeben werden.

Der Code sieht jetzt so aus und funzt wunderbar:

Code:
<?php  $name = $_POST['name'];
$email = $_POST['email'];
$ort = $_POST['ort'];
$telefon = $_POST['telefon'];
 if(!empty($name) && strlen($name) >= 2 &&
!empty($email) && filter_var($email, FILTER_VALIDATE_EMAIL) &&     !empty($ort) && strlen($ort) >= 4 &&
!empty($telefon) && strlen($telefon) >= 4 )
{ $an = 'name@domain.de'; $betreff = 'Nachricht aus dem Kontaktformular der Website';
$mailText = "Name:  $name \n\r"; 
$mailText .= "Email:  $email \n\r";
$mailText .= "Ort:  $ort \n\r";
$mailText .= "Telefon:  $telefon \n\r";
$mailFunktion = mail($an, $betreff, $mailText);}
 if( $mailFunktion ){echo 'Ihre Nachricht wurde versendet'; 
}
else{echo 'Es gab ein Problem bei der Übermittlung.';}
?>
 
Zuletzt bearbeitet von einem Moderator:

Duddle

Posting-Frequenz: 14µHz

AW: Formularverarbeitung mit php - Skriptproblem

Nein, du solltest zwei Fehlerquellen abfangen:
a) das Formular muss korrekt ausgefüllt sein, wenn nicht sollte dem Nutzer eine Rückmeldung und Bitte um Korrektur gegeben werden
b) die Mail muss korrekt verschickt werden, wenn nicht sollte dem Nutzer eine allgemeine Fehlermeldung (und zusätzlich dem Administrator eine Nachricht) gegeben werden

Für a) okay und b) nicht okay hast du keine Fehlerbehandlung. Für a) nicht okay hast du eine allgemeine Fehlermeldung, die dem Nutzer keine hilfreichen Informationen gibt.

Edit:
Die Mail wird aber nur verschickt, wenn die Bedingungen für die Felder erfüllt sind, ansonsten liefert $mailFunktion "false" zurück, richtig
mail() gibt false zurück, wenn die Mail nicht verschickt wurde. Die Parameter an mail() werden zwar nur erzeugt wenn die Formularfelder korrekt sind, das heißt aber nicht dass die Formularfelder unmittelbar für den Erfolg des eigentlichen Versandes zuständig sind. Setze einfach im ersten if-Block alle Formular-Variablen auf einen leeren String, die Mail wird trotzdem verschickt.


Duddle
 
Zuletzt bearbeitet:
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben