mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Do 25.04.2024 10:36 Benutzername: Passwort: Auto-Login

Thema: [PHP] Fehlermeldung in Mailformular ausgeben vom 01.04.2005


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> [PHP] Fehlermeldung in Mailformular ausgeben
Autor Nachricht
herrgarnele
Threadersteller

Dabei seit: 24.03.2005
Ort: München
Alter: -
Geschlecht: -
Verfasst Fr 01.04.2005 14:04
Titel

[PHP] Fehlermeldung in Mailformular ausgeben

Antworten mit Zitat Zum Seitenanfang

Moin zusamm!

Ich habe ein Problem mit meinem Mailform-Skript. Das Ding funktioniert eigentlich, mein Problem ist die Ausgabe von Fehlermeldungen. Wenn z.B. ein 'required'-Feld leer gelassen wurde, eine 'Bitte alle *-Felder ausfüllen'-Info ausgeben.

Bisher öffnet sich dafür eine neue Seite. Liegt wohl an dem echo-Befehl.
Ich hätte aber gerne die Fehlermeldung direkt auf der Formular-Site in einem dafür definierten Bereich.

Leider reichen dafür meine eher mageren PHP-Kentnisse nicht aus.

Ich poste jetzt einfach mal den Code, bin für alle Vorschläge dankbar!


Die PHP-Datei:
Code:

<html>
<head>
<title>Kontaktformular</title>
</head>
<body>

<?php
$emailTo = "DaniMann <dani@2klang.net>";
$emailFromName = $_POST['Name'];
$emailFrom = $_POST['Email'];
$emailFirma = $_POST['Firma'];
$emailTelefon = $_POST['Telefon'];
$emailAdresse = $_POST['Adresse'];
$emailSubject = "Kontaktformular";
$emailMessage = $_POST['Message'];

$emailList[1] = 'Email';
$emailList[2] = 'Telefon';
$emailList[3] = 'Post';


// Vorbereiten des Body (Email an DaniMann)
$Body .= "Nachricht per Email-Formular:\n\n";
$Body .= "Name: $emailFromName\n";
$Body .= "Firma: $emailFirma\n";
$Body .= "Telefon: $emailTelefon\n";
$Body .= "Adresse: $emailAdresse\n";
$Body .= "Gewünschte Art der Kontaktaufnahme: " . $emailList[$_POST['Kontaktart']] . "\n";
$Body .= "\n\nNachricht:\n\n$emailMessage";


if (empty($emailFromName)) {
   echo 'Bitte geben Sie Ihren Name an';
} elseif (!preg_match('/^([A-Z0-9\.\-_]+)@([A-Z0-9\.\-_]+)?([\.]{1})([A-Z]{2,6})$/i', $emailFrom) || empty($emailFrom)) {
    echo 'Die angegebene Email-Adresse ist ung&uuml;ltig.';
} elseif (empty($emailMessage)) {
    echo 'Bitte geben Sie eine Nachricht ein.';
} elseif (($_POST['Kontaktart'] < 1) || ($_POST['Kontaktart'] > 3)) {
    echo 'Sie haben eine ungültige Form der Kontaktaufnahme gewaehlt.';
} elseif (($_POST['Kontaktart'] == 2) & (empty($emailTelefon))) {
   echo 'Um per Telefon kontaktiert zu werden, geben Sie bitte Ihre Telefonnummer an.';
} elseif (($_POST['Kontaktart'] == 3) & (empty($emailAdresse))) {
   echo 'Um per Post kontaktiert zu werden, geben Sie bitte Ihre Adresse an.';
}

else {
       
    if (!empty($emailFrom)) {
        $emailHeaders = 'From: "' . $emailName . '" <' . $emailFrom . '>';
    } else {
        $emailHeaders = 'From: "Webmaster" <webmaster@bla.com>';
    }
   
    /* Email senden */
    if (mail($emailTo, $emailSubject, $Body, $emailHeaders)) {
        echo 'VIelen Dank für Ihr Interesse. Die Nachricht wurde gesendet!';
    } else {
        echo 'Beim Senden Ihrer Nachricht trat ein Fehler auf.<br>';
        echo 'Bitte versuchen Sie es später noch einmal.';   
    }
}
?>
</body>



Und so schaut die html aus:
Code:

<form name="contact" method="post" action="contact.php">
<tr>
<td width="100" height="25" align="left" valign="bottom">Name:</td>
<td height="25" align="left" valign="bottom"><input name="Name" type="text" size="30"></td>
</tr>
<tr>
<td width="100" height="25" align="left" valign="bottom">Email-Adresse:</td>
<td height="25" align="left" valign="bottom"><input name="Email" type="text" size="30"></td>
</tr>
<tr>
<td width="100" height="25" align="left" valign="bottom">Firma:</td>
<td height="25" align="left" valign="bottom"><input name="Firma" type="text" size="30"></td>
</tr>
<tr>
<td width="100" height="25" align="left" valign="bottom">Telefon:</td>
<td height="25" align="left" valign="bottom"><input name="Telefon" type="text" size="30"></td>
</tr>
<tr>
<td width="100" height="25" align="left" valign="bottom">Adresse:</td>
<td height="25" align="left" valign="bottom"><input name="Adresse" type="text" value="" size="30"></td>
</tr>
<tr>
<td colspan="2"><br>
<br>
Gew&uuml;nschte Art der Kontaktaufnahme: &nbsp;
<select name="Kontaktart">
<option value="1">Email</option>
<option value="2">Telefon</option>
<option value="3">Post</option>
</select>
<br><br>
Ihre Nachricht:<br>
<textarea name="Message" cols="40" rows="12"></textarea>
<br> <br>
<input type="submit" name="submit" value="Abschicken">                                     
HIER H&Auml;TTE ICH GERNE DIE FEHLERMELDUNG STEHEN <br><br>
</form>
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
fyll

Dabei seit: 20.09.2003
Ort: Augsburg
Alter: 39
Geschlecht: Männlich
Verfasst Fr 01.04.2005 14:10
Titel

Antworten mit Zitat Zum Seitenanfang

Ein fester Bereich auf der Seite..
Mhh blend doch einfach ne Ebene ein (vorher auf visibility:hidden, dann auf visibility:visible), in die du halt auch noch mit innerHTML="Bitte "+blabla+" ausfüllen" oder so reinsetzt...
Halt DHTML unso - nix PHP
  View user's profile Private Nachricht senden
Anzeige
Anzeige
herrgarnele
Threadersteller

Dabei seit: 24.03.2005
Ort: München
Alter: -
Geschlecht: -
Verfasst Fr 01.04.2005 14:35
Titel

Antworten mit Zitat Zum Seitenanfang

Augsburg, yes!

Wenn ich Dich richtig verstehe: Fehlende/fehlerhafte Angabe - Ebene einblenden.

Ich glaub so könnte des gehen, aber:
a. brauch ich 6 verschiedene Fehlermeldungen. Kann ich, glaub ich, dynamisch reinladen.
b. ich hab leider wie gesagt net so den Plan, wiess daher a net, wie ich der Ebene sagen kann: 'wenn dies und jenes Feld falsch ausgefüllt ist, dann erscheine!' (was ja im PHP-script geprüft wird).

Ideen?
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
fyll

Dabei seit: 20.09.2003
Ort: Augsburg
Alter: 39
Geschlecht: Männlich
Verfasst Fr 01.04.2005 14:49
Titel

Antworten mit Zitat Zum Seitenanfang

Kannst ja deine PHP-Abfragen behalten und mit echo dann ein JavaScript aufrufen.
Das macht zB
document.getElementById('blubb').innerHTML="Bitte Namen eingeben.";
(also setzt nen Neuen Inhalt in das einzublendende, noch unsichtbare Feld)
und
document.getElementById('blubb').style.visibility="visible";
(damits auch sichtbar wird)

Der Bereich muss halt die id="blubb" haben...

etc
  View user's profile Private Nachricht senden
herrgarnele
Threadersteller

Dabei seit: 24.03.2005
Ort: München
Alter: -
Geschlecht: -
Verfasst Fr 01.04.2005 14:57
Titel

Antworten mit Zitat Zum Seitenanfang

Ok, habs versucht und passt!

Danke für die Hilfe!
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Backware

Dabei seit: 09.12.2004
Ort: bei Köln
Alter: 38
Geschlecht: Männlich
Verfasst So 03.04.2005 06:12
Titel

Antworten mit Zitat Zum Seitenanfang

ARG

bitte änder das nochma XD du kannst doch schon längst vor dem abschicken mittels javascript überprüfen ob das formular so passt.. und dann nochmal mittels php die eingaben überprüfen, falls javascript ausgeschaltet ist Lächel

so sparst du dem user einen seitenreload....

einfach:

Code:
<form method="post" onsubmit="return form_check ( );">


und
Code:
<script type="text/javascript">
   function checkForm ( )
   {
      if ( document.getElementById('fieldName').value == "" )
      {
         document.getElementById('errorPrint').innerHTML = "Bitte geben Sie Ihren Namen ein.";
         document.getElementById('errorPrint').visibility = "visible";
         return false;
      }
      else if ( document.getElementById('fieldPhone').value == "" )
      {
         document.getElementById('errorPrint').innerHTML = "Bitte geben Sie Ihre Telefonnummer ein.";
         document.getElementById('errorPrint').visibility = "visible";
         return false;
      }
      else if ( document.getElementById('fieldFoobar').value == "" )
      {
         document.getElementById('errorPrint').innerHTML = "Fehler FOO im Bereich BAR aufgetreten.";
         document.getElementById('errorPrint').visibility = "visible";
         return false;
      }
      else
      {
         return true;
      }
   }
</script>


Zuletzt bearbeitet von Backware am So 03.04.2005 06:12, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
rob

Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht: Männlich
Verfasst So 03.04.2005 07:04
Titel

Antworten mit Zitat Zum Seitenanfang

Zitat:
dann nochmal mittels php die eingaben überprüfen, falls javascript ausgeschaltet ist

Also die serverseitige Überprüfung ist in jedem Fall absolut notwendig und darf in keinem Fall ausgelassen werden. Das ist die Hauptptüfung.
Eine clientseitige Überprüfung mittels JavaScript ist sozussagen nur eine userfreundliche Sache, aber man darf sich niemals alleine darauf verlassen.

Das Verschicken der Mail mit PHP sieht recht gruselig aus. In jedem Fall sollten noch mehr Header angegeben werden. Die verwendete Zeichensatzcodierung sollte angegeben werden und auch wie die Mail verschickt wird (text/plain oder text/html). Und dann müssen die Header in jedem Fall alle mit \r\n abgetrennt werden. So sieht es der SMTP-Standard, sprich das entsprechende RFC (RFC-Nummer weiß ich jetzt nicht aus dem Kopf) vor.

Desweiteren werden alle Formulareingaben unbereinigt weiterverarbeitet. Das darf in keinem Fall sein. Dabei handelt es sich um fahrlässige Programmierung. Solche Mailscripte könnten u.a. recht leicht zum Spammen mißbraucht werden.
Es sollte immer geprüft werden, was übergeben wird. Eventuelle abgesandte Sonderzeichen, Codesequenzen, etc.. sollten rausgefiltert werden.

Und dann ist der HTML-Code noch unschön. Es fehlt eine DTD-Angabe. Es fehlt die Angabe des verwendeten Zeichensatzes. Die verwendete Sprache würde ich ebenfalls noch mit angeben.
Das Tabellendesign würde ich durch CSS ersetzen. Das Formular würde ich mit Fieldset und Legend basteln. Den Formularfeldern würde ich tabindexes mitgeben, usw. usf..
  View user's profile Private Nachricht senden
 
Ähnliche Themen E-Mailformular
Mailformular fehlerhaft!
Flash MX Mailformular
Mailformular Umlaute
PHP Mailformular umlaute
E-Mailformular mit dynamischer Abfrage
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.