Formmailer - Rückgabe der Fehler in einem Formular
Lukas Schaufler
- php
Hallöchen!
Ich habe mir dank diesen Forums und ein bischen Spielerei einen Formmailer mit PHP zusammengebastelt.
Nun geht es darum, dass manche Felder ausgefüllt sein müssen und bei leerlassen des Feldes eine Fehlermeldung vor dem Formular ausgegeben wird.
Funktioniert alles soweit gut, jedoch habe ich eine Frage zwecks ausgabe der Fehler.
Derzeit werden alle Fehler in die Variable $fehler geschrieben, wobei immer nur ein Fehler ausgegeben wird und nicht alle.
Wie kann ich das berichtigen, ohne für jeden Fehler eine eigene Variable und deren Ausgabe beschreiben zu müssen?!?
für eine online Besichtigung habe ich das Dokument auch unter folgenden Adresse online gestellt:
http://www.schaufler.cc/test/Buchen.php
anbei der Quellcode (gekürzt) des betreffenden Dokuments:
<?php
$strEmpfaenger = 'cinemaster@XX.net';
$strFrom = '"C4Y Homepage" homepage@XX.com';
$strSubject = 'Anmeldung';
$strReturnhtml = 'http://www.schaufler.cc/test/AnmeldungFeedback.htm';
$strDelimiter = ":\t";
$allesok = "";
$fehler = "";
$Nachname = isset($_POST['nachname']) ? $_POST['nachname'] : '';
$Vorname = isset($_POST['vorname']) ? $_POST['vorname'] : '';
$Adresse = isset($_POST['adresse']) ? $_POST['adresse'] : '';
$PLZ = isset($_POST['plz']) ? $_POST['plz'] : '';
$Ort = isset($_POST['ort']) ? $_POST['ort'] : '';
$Telefon = isset($_POST['tel']) ? $_POST['tel'] : '';
$Email = isset($_POST['email']) ? $_POST['email'] : '';
$Geburtsdatum = isset($_POST['geburtsdatum']) ? $_POST['geburtsdatum'] : '';
$Eltern = isset($_POST['eltern']) ? $_POST['eltern'] : '';
$Abreiseort = isset($_POST['abreiseort']) ? $_POST['abreiseort'] : '';
$Kurs = isset($_POST['kurs']) ? $_POST['kurs'] : '';
// weitere Formularfelder
// Abfrage ob ein Senden gedrückt wurde
if($_POST)
{
$allesok = 1;
// Button wurde gedrückt
if (empty($Vorname)) {$allesok=0;$fehler="Vorname fehlt! \n";}
elseif (empty($Nachname)) {$allesok=0;$fehler="Nachname fehlt! \n";}
elseif (empty($Adresse)) {$allesok=0;$fehler="Adresse fehlt! \n";}
elseif (empty($PLZ)) {$allesok=0;$fehler="Postleitzahl fehlt! \n";}
elseif (empty($Ort)) {$allesok=0;$fehler="Telefonnummer fehlt! \n";}
elseif (empty($Telefon)) {$allesok=0;$fehler="Ort fehlt! \n";}
elseif (empty($Email)) {$allesok=0;$fehler="E-Mail fehlt! \n";}
elseif (empty($Geburtsdatum)) {$allesok=0;$fehler="Geburtsdatum fehlt! \n";}
elseif (empty($Eltern)) {$allesok=0;$fehler="Erziehungsberechtigter fehlt! \n";}
elseif (empty($Abreiseort)) {$allesok=0;$fehler="Abreiseort fehlt! \n";}
elseif (empty($Kurs)) {$allesok=0;$fehler="Kurs fehlt! \n";}
}
// wenn Überprüfung ok und Eingaben vorhanden dann
if($allesok){
$strMailtext = "Buchungsformular \n \n \n";
while(list($strName,$value) = each($_POST))
{
if(is_array($value)) {
foreach($value as $value_array)
{
$strMailtext .= $strName.$strDelimiter.$value_array."\n \n";
}
} else {
$strMailtext .= $strName.$strDelimiter.$value."\n \n";
}
}
if(get_magic_quotes_gpc()) {
$strMailtext = stripslashes($strMailtext);
}
mail($strEmpfaenger, $strSubject, $strMailtext, "Absender: ".$strFrom)
or die("Die Mail konnte nicht versendet werden.");
header("Location: $strReturnhtml");
exit;
} else {
// ansonsten Anzeigen des Formulars
?>
....
<h2>Anmeldeformular!</h2>
<p>Bitte fülle alle Felder im Anmeldeformular aus und klicke auf "Abschicken". Wir senden dir innerhalb einer Woche eine Buchungsbestätigung und einen Zahlschein für die Anzahlung. Mit dem Absenden des Formulars gelten die<a href="ElternAGB.htm" style="text-decoration:none; color:#ED171F"> AGBs</a> als aktzeptiert. </p>
<p style="font-weight:bold; color:#ED171F; text-decoration:underline;"><?php print $fehler;?></p>
<p style="font-weight:bold; color:#ED171F;">Schülerdaten</p>
<form action="<?php print $_SERVER['PHP_SELF']; ?>" method="post">
<label style="float:left; text-align:right; width:130px; margin-right:5px;">Vorname:</label><input type="text" name="vorname" value="<? echo $Vorname ?>" style="background-color:#B4D1E9; width:150px;"/>
<label style="text-align:right; width:130px; margin-right:5px;">Nachname:</label><input type="text" name="nachname" value="<? echo $Nachname ?>" style="background-color:#B4D1E9; width:150px;"/>
<p></p>
<label style="float:left; text-align:right; width:130px; margin-right:5px;">Adresse:</label><input type="text" value="<? echo $Adresse ?>" name="adresse"style="background-color:#B4D1E9; width:376px;"/>
<p></p>
<label style="float:left; text-align:right; width:130px; margin-right:5px;">PLZ:</label><input type="text" name="plz" value="<? echo $PLZ ?>" style="background-color:#B4D1E9; width:150px;"/>
<label style="text-align:right; width:130px; margin-right:5px; margin-left:45px;">Ort:</label><input type="text" name="ort" value="<? echo $Ort ?>" style="background-color:#B4D1E9;width:150px;"/>
<p></p>
<label style="float:left; text-align:right; width:130px; margin-right:5px;">Tel:</label><input type="text" name="tel" value="<? echo $Telefon ?>" style="background-color:#B4D1E9; width:150px;"/>
<label style="text-align:right; width:130px; margin-right:5px; margin-left:27px;">E-Mail:</label><input type="text" name="email" value="<? echo $Email ?>" style="background-color:#B4D1E9;width:150px;"/>
<p></p>
<label style="float:left; text-align:right; width:130px; margin-right:5px;">Geboren am:</label><input type="text" name="geburtsdatum" value="<? echo $Geburtsdatum ?>" style="background-color:#B4D1E9;width:150px;"/>
<label style="text-align:right; width:130px; margin-right:5px;">Geschlecht:</label><input type="radio" id="geschlecht" name="geschlecht" value="Männlich" />Männlich<input type="radio" name="sexus" value="Weiblich" />Weiblich
<p></p>
<label style="float:left; text-align:right; width:130px; margin-right:5px;">Besonderes:</label><input type="text" name="besonderes"style="background-color:#B4D1E9; margin-left:3px; width:376px;"/>
<br/>(z.B: Allergien, Krankheiten, Essstörungen, usw.)
<p></p>
<label style="float:left; text-align:right; width:130px; margin-right:5px;">Ermäßigung für Geschwister:</label><input type="text" name="geschwister"style="background-color:#B4D1E9; margin-left:3px; width:376px;"/>
<br/>(bitte gib die Namen deiner teilnehmenden Geschwister an)
<p></p>
<label style="float:left; text-align:right; width:130px; margin-right:5px;">Bring-a-friend Bonus:</label><input type="text" name="freunde"style="background-color:#B4D1E9; margin-left:3px; width:376px;"/>
<br/>(bitte gib die Namen deiner teilnehmenden Freunde/innen an)
<p style="font-weight:bold; color:#ED171F;">Elterndaten</p>
<label style="float:left; text-align:right; width:130px; margin-right:5px;">Erziehungsberechtigter:</label><input type="text" name="eltern" value="<? echo $Eltern ?>" style="background-color:#B4D1E9; width:150px;"/>
<label style="text-align:right; width:130px; margin-right:5px;margin-left:15px;">Tel. Büro:</label>
<input type="text" name="bueronummer" style="background-color:#B4D1E9; width:150px;"/>
<p style="font-weight:bold; color:#ED171F;">Kursdaten</p>
<label style="float:left; text-align:right; width:90px; margin-right:5px;">Abreiseort:</label>
<select name="abreiseort" size="1" style="background-color:#B4D1E9; width:515px;">
...
</form>
...
<?
// Schließen der Abfrage
} ?>
Danke & Lg.
Moin,
Derzeit werden alle Fehler in die Variable $fehler geschrieben, wobei immer nur ein Fehler ausgegeben wird und nicht alle.
Wie kann ich das berichtigen, ohne für jeden Fehler eine eigene Variable und deren Ausgabe beschreiben zu müssen?!?
wenn ich dich richtig verstehe, willst du alle Fehler auf einmal ausgeben, richtig?
Wenn das so ist, dann solltest du in diesem Teil nicht $fehler jedesmal überschreiben, sondern könntest den nächsten Fehler einfach mittels $fehler .= "<br>Nachname fehlt!" an die Fehler-Variable anhängen.
MfG,
Juan
Tag Lukas.
Nun geht es darum, dass manche Felder ausgefüllt sein müssen und bei leerlassen des Feldes eine Fehlermeldung vor dem Formular ausgegeben wird. [...] Derzeit werden alle Fehler in die Variable $fehler geschrieben, wobei immer nur ein Fehler ausgegeben wird und nicht alle.
Schau dir mal dein if..elsif-Konstrukt an, dabei insbesondere die Wertzuweisung zum String $fehler.
Wie kann ich das berichtigen, ohne für jeden Fehler eine eigene Variable und deren Ausgabe beschreiben zu müssen?!?
Verwende einen geeigneten Zeichenkettenoperator.
Siechfred
Hallo,
schön, dass Du Dich um Trennung von Parameterübernahme, Kontrollen, Berechnungen und Ausgabe bemühst :-)
$fehler = '';
// Button wurde gedrückt
if (empty($Vorname)) {$allesok=0; $fehler .= "Vorname fehlt! \n";}
if (empty($Nachname)) {$allesok=0; $fehler .= "Nachname fehlt! \n";}
if (empty($Adresse)) {$allesok=0;$fehler .= "Adresse fehlt! \n";}
#...
Nun hast Du eine Variable $fehler, die alle Fehlermeldungen cder Reihe nach enthält.
Vor der Ausgabe musst Du nur noch die RAW-Zeilenumbrüche mit <br /> ergänzen. das machtg die Funktion nl2br().
LG
Chris
Danke für die vielen und äußerst schnellen Tipps!
Ich habe den Code folgendermaßen verändert:
if (empty($Vorname)) {$allesok=0;$fehler .="Vorname fehlt! \n";}
elseif (empty($Nachname)) {$allesok=0;$fehler .="Nachname fehlt! \n";}
elseif (empty($Adresse)) {$allesok=0;$fehler .="Adresse fehlt! \n";}
elseif (empty($PLZ)) {$allesok=0;$fehler .="Postleitzahl fehlt! \n";}
elseif (empty($Ort)) {$allesok=0;$fehler .="Telefonnummer fehlt! \n";}
elseif (empty($Telefon)) {$allesok=0;$fehler .="Ort fehlt! \n";}
elseif (empty($Email)) {$allesok=0;$fehler .="E-Mail fehlt! \n";}
elseif (empty($Geburtsdatum)) {$allesok=0;$fehler .="Geburtsdatum fehlt! \n";}
elseif (empty($Eltern)) {$allesok=0;$fehler .="Erziehungsberechtigter fehlt! \n";}
elseif (empty($Abreiseort)) {$allesok=0;$fehler .="Abreiseort fehlt! \n";}
elseif (empty($Kurs)) {$allesok=0;$fehler .="Kurs fehlt! \n";}
}
und die Ausgabe erfolgt so:
<?php print nl2br($fehler);?>
Ich hoffe, dass ich die Funktionsreferenz so richtig gedeutet habe?!?
Wenn ja, gibt das Script leider immer noch nur einen Fehler aus...
Hallo,
if (empty($Vorname)) {$allesok=0;$fehler .="Vorname fehlt! \n";}
elseif (empty($Nachname)) {$allesok=0;$fehler .="Nachname fehlt! \n";}
elseif (empty($Adresse)) {$allesok=0;$fehler .="Adresse fehlt! \n";}
elseif (empty($PLZ)) {$allesok=0;$fehler .="Postleitzahl fehlt! \n";}
elseif (empty($Ort)) {$allesok=0;$fehler .="Telefonnummer fehlt! \n";}
elseif (empty($Telefon)) {$allesok=0;$fehler .="Ort fehlt! \n";}
elseif (empty($Email)) {$allesok=0;$fehler .="E-Mail fehlt! \n";}
elseif (empty($Geburtsdatum)) {$allesok=0;$fehler .="Geburtsdatum fehlt! \n";}
elseif (empty($Eltern)) {$allesok=0;$fehler .="Erziehungsberechtigter fehlt! \n";}
elseif (empty($Abreiseort)) {$allesok=0;$fehler .="Abreiseort fehlt! \n";}
elseif (empty($Kurs)) {$allesok=0;$fehler .="Kurs fehlt! \n";}
}und die Ausgabe erfolgt so:
<?php print nl2br($fehler);?>Ich hoffe, dass ich die Funktionsreferenz so richtig gedeutet habe?!?
mach aus den elseif wieder ein if, damit er nicht gleich beim ersten gefundenen Fehler aufhört zu checken, dann solltest du auch mehrere Fehler sehen.
MfG,
Juan
DANKESCHÖN!
Nun funktioniert alles ganz so wie es sollte!
Und ich muss es immer wieder sagen....EIN TOLLES FORUM!!!
Hallo,
Danke für die vielen und äußerst schnellen Tipps!
bitte :-)
[...] gibt das Script leider immer noch nur einen Fehler aus...
Dann lies Dir die Vorschläge nochmal richtig durch. Da wurde explizit und implizit auf eine Wechsel von 'ifelse()' auf 'if()' hingewiwsen.
Es handelt sich um angereihte, gleichzeitig mögliche (optionale) Bedingungen. IfElse() benutzt man nur für wechselweise (alternative) Bedingungen.
LG
Chris
echo $begrüßung;
Derzeit werden alle Fehler in die Variable $fehler geschrieben, wobei immer nur ein Fehler ausgegeben wird und nicht alle.
Wie kann ich das berichtigen, ohne für jeden Fehler eine eigene Variable und deren Ausgabe beschreiben zu müssen?!?
Die Fehlermeldungen bereits beim Erzeugen in einer bereits ausgabeformatierten Variable zusammenzufassen halte ich nicht für die beste Idee. Besser finde ich, die Fehlermeldungen in einem Array zu sammeln, das man dann am Ende für die Ausgabe vorbereitet oder ins Logfile schreibt oder ...
$errors = array();
if (fehler)
$error[] = 'meldung';
...
Für das Zusammenfügen/Ausgeben eigen sich implode(), foreach, ...
echo "$verabschiedung $name";