Serai: Kontaktformular mit automatischer email versandt?!

guten morgen,

ich hab mich nochmal versucht ein Kontaktformular mit php zu programmieren. Das ganze html und css war schön und gut. Doch jetzt wollt ich das ganze mit php aufpuschen damit das formular wenn man auf senden drückt automatsich an die emailadresse des empfängers geschickt wird. Doch irgendwie klappt es nicht, wenn ich auf "senden" drücke erscheint eine neue seite mit den angegebenen daten aber es wird nicht an die emailadresse weiter geleitet! Und das nächste problem ist auch "plz". Alle daten werden zwar auf die nächste seite angezeigt die man eingegeben hat nur nicht plz. Woran kann das nur liegen?
Schon mal Danke im vorraus für die hilfe;)

lg Serai

Hier mal das Script: Und da der Link "Klick mich an!" dazu.

<?php  
 $rahmenfarbe = "#000000";  
  $rahmenart = "outset";  
  $rahmenpx = "2";  
 ?>  
  
  
  
<html>  
<head>  
<title>Kontaktformular</title>  
  
<style type="text/css"><!--  
body {  
         font-family:TUM Neue Helvetica 55 Regular;  
         font-size:14px;  
         color:#469be6;  
         background-color:#EEF2F5;  
         text-align:center;  
        }  
  
.abstand {  
 margin-left:65px;  
}  
  
a:link, a:visited, a:active a:hover {  
        text-decoration:none;  
        font-weight:bold;  
        color:#000000;  
        font-size:10px;  
}  
  
form {  
        margin:0px auto;  
        width:450px;  
        border:<?php echo $rahmenpx."px ".$rahmenart." ".$rahmenfarbe; ?>;  
        text-align:center;  
}  
  
b {  
        float:left;  
        text-align:right;  
        width:9em;  
        line-height:22px;  
}  
  
input {  
        margin-top:5px;  
        background-color:#DBE2E9;  
}  
  
.textarea {  
        margin:30px 60px;  
        clear:both;  
}  
  
h1 {  
        font-size:24px;  
        margin-top:30px;  
}  
  
  
  
  
  
  
//--></style>  
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />  
</head>  
<body>  
<?php  
  
function entferneSlashesArray($a) {  
if (is_array($a)) {  
return array_map("entferneSlashesArray", $a);  
} else {  
return stripslashes($a);  
}  
}  
  
  
  
  $Anrede = (isset($_POST["Anrede"]) && is_string($_POST["Anrede"])) ?  
                      $_POST["Anrede"] : "";  
  $Name = (isset($_POST["Name"]) && is_string($_POST["Name"])) ?  
                      $_POST["Name"] : "";  
  $Vorname = (isset($_POST["Vorname"]) && is_string($_POST["Vorname"])) ?  
                      $_POST["Vorname"] : "";  
  $Email = (isset($_POST["Email"]) && is_string($_POST["Email"])) ?  
                      $_POST["Email"] : "";  
  $Straße = (isset($_POST["Straße"]) && is_string($_POST["Straße"])) ?  
                      $_POST["Straße"] : "";  
  $PLZ = (isset($_POST["plz"]) && is_string($_Post["plz"])) ?  
                      $_POST["plz"] : "";  
  $Telefon = (isset($_POST["Telefon"]) && is_string($_POST["Telefon"])) ?  
                      $_POST["Telefon"] : "";  
  $Nachricht = (isset($_POST["Nachricht"]) && is_string($_POST["Nachricht"])) ?  
                      $_POST["Nachricht"] : "";  
  
  
$ok = false;  
$fehlerfelder = array();  
if (isset($_POST["submit"])) {  
  $ok = true;  
  if (!isset($_POST["Anrede"]) ||  
      !is_string($_POST["Anrede"]) ||  
      $_POST["Anrede"] == "0") {  
    $ok = false;  
    $fehlerfelder[] = "Anrede";  
  }  
  if (!isset($_POST["Name"]) ||  
      !is_string($_POST["Name"]) ||  
      trim($_POST["Name"]) == "") {  
    $ok = false;  
    $fehlerfelder[] = "Name";  
  }  
  if (!isset($_POST["Vorname"]) ||  
      !is_string($_POST["Vorname"]) ||  
      trim($_POST["Vorname"]) == "") {  
    $ok = false;  
    $fehlerfelder[] = "Vorname";  
  }  
  if (!isset($_POST["Email"]) ||  
      !is_string($_POST["Email"]) ||  
      trim($_POST["Email"]) == "") {  
    $ok = false;  
    $fehlerfelder[] = "Email";  
  }  
  if (!isset($_POST["Straße"]) ||  
      !is_string($_POST["Straße"]) ||  
      trim($_POST["Straße"]) == "") {  
    $ok = false;  
    $fehlerfelder[] = "Straße";  
  }  
  if (!isset($_POST["plz"]) ||  
      !is_string($_POST["plz"]) ||  
      trim($_POST["plz"]) == "") {  
    $ok = false;  
    $fehlerfelder[] = "plz";  
  }  
  if (!isset($_POST["Telefon"]) ||  
      !is_string($_POST["Telefon"]) ||  
      trim($_POST["Telefon"]) == "") {  
    $ok = false;  
    $fehlerfelder[] = "Telefon";  
  }  
  if ($ok) {  
  
?>  
  
  
<?php  
  
  /*Kontaktformularfelder*/  
  
$Anrede = htmlspecialchars($Anrede);  
$Name = htmlspecialchars($Name);  
$Vorname = htmlspecialchars($Vorname);  
$Email = htmlspecialchars($Email);  
$Straße = htmlspecialchars($Straße);  
$plz = htmlspecialchars($plz);  
$Telefon = htmlspecialchars($Telefon);  
$Nachricht = nl2br($Nachricht);  
  
  
         echo "Anrede: $Anrede<br />";  
         echo "Name: $Name<br />";  
         echo "Vorname: $Vorname<br />";  
         echo "E-Mail: $Email<br />";  
         echo "Straße: $Straße<br />";  
         echo "PLZ: $plz<br />";  
         echo "Telefon: $Telefon<br />";  
         echo "Nachricht: $Nachricht<br />";  
  
?>  
  
<?php  
         } else {  
           echo "<dl><dt>";  
           echo implode("</dt><dt>", $fehlerfelder);  
           echo "</dt></dl>";  
      }  
    }  
    if (!$ok) {  
?>  
  
<?php  
$info = "";  
if (isset($_POST["submit"]) && !empty($_POST["To"])) {  
if (get_magic_quotes_gpc()) {  
$_POST = entferneSlashesArray($_POST);  
}  
  
/*email daten*/  
$empfaenger = 'miau@gmail.fr';  
$betreff = 'Kontaktformular';  
$from = 'info@ihre-domain.com';  
  
$empfaenger = isset($_POST["To"]) ? $_POST["To"] : "";  
$betreff = isset($_POST["Kontaktformular"]) ? $_POST[$betreff] : "";  
$nachricht = isset($_POST["body"]) ? $_POST["body"] : "";  
$header = "X-Powered-By: PHP/" . phpversion();  
  
if (!empty($_POST["Cc"]))   {  
         $header .="\r\nCc:" . $_POST["Cc"];  
   }  
if (!empty($_POST["Bcc"])) {  
         $header .="\r\nBcc:" . $_POST["Bcc"];  
}  
  
$ergebnis = mail($empfaenger, $betreff, $nachricht, $header);  
$info = $ergebnis ? "Mail erfolgreich verschickt" :  
                    "Fehler beim Versand";  
}  
  
/*emaildaten ende*/  
?>  
  
<h1>Kontaktformular<br>StudiTUM<br/></h1>  
  
<form class="formular" method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>">  
         <dl>  
         <br><b>Anrede </b><select class="abstand" name="Anrede"><option value="0">Bitte w&auml;hlen</option></dt>  
                                         <option value="Herr"<?php if ($Anrede == "Herr") {  
                                                                   echo " selected=\"selected\"";  
                                                                                          }  
                                                                                 ?>>Herr</option>  
                                         <option value="Herr"<?php if ($Anrede == "Frau") {  
                                                                   echo " selected=\"selected\"";  
                                                                                          }  
                                                                                  ?>>Frau</option></select><br><br/>  
  
<dt><b>Name </b><input class="abstand" type="text" name="Name"  
value="<?php echo htmlspecialchars($Name); ?>" /><br /></dt>  
  
<dt><b>Vorname </b> <input class="abstand" type"text" name="Vorname"  
value="<?php echo htmlspecialchars($Vorname); ?>"/><br /></dt>  
  
<dt><b>E-Mail </b><input class="abstand" type="text" name="Email"  
value="<?php echo htmlspecialchars($Email); ?>" /><br /></dt>  
  
<dt><b>Stra&szlig;e</b><input class="abstand" type="text" name="Straße"  
value="<?php echo htmlspecialchars($Straße); ?>" /><br /></dt>  
  
<dt><b>PLZ </b><input class="abstand" type="text" name="plz"  
value="<?php echo htmlspecialchars($plz); ?>" /><br /></dt>  
  
<dt><b>Telefon </b><input class="abstand" type="text" name="Telefon"  
value="<?php echo htmlspecialchars($Telefon); ?>"/><br /></dt>  
  
<br><dt>Ihre Nachricht <textarea class="abstand" rows="7" cols="37" name="Nachricht">  
<?php echo htmlspecialchars($Nachricht); ?></textarea><br /></dt>  
  
</dl>  
                 <a><input type="submit" name="submit" value="Senden" />  
                 <input type="reset" name="reset" value="Zurücksetzen" /></a><br><br/>  
  
  
</form>  
<?php  
echo($info);  
 ?>  
<?php  
         }  
?>  
</body>  
</html>
  1. Hi,

    auf Anhieb kann ich dir das nicht beantworten. Was fürn Riesenscript für so ne kleine Aktion.

    $Straße  -> Was stimmt daran nicht?

    Was sagen deine Fehlermeldungen error_reporting()?

    Du könntest das ganze Script erheblich verkleinern, wenn du die notwendigen Werte in Arrays abhandelst. Also Array1 was du benötigst, array2 = $_POST

    Abgleichen -> schleife -> Fehler finden oder OK - > Rückgabe

    Ich schau aber mal ob ich noch einen fehler entdecken kann.

    Oliver

    1. Hi danke schon mal für deine schnelle hilfe ^^

      na an der Straße ist nichts falsch nur wenn du das Kontaktformular mal anschaust und bei PLZ was einfügst und auf absenden gehst wird dann eine nächste seite aufgerufen wo alle daten die du eingegeben hast angezeigt. Nur bei PLZ ist das feld immer leer.

      Fehler zeigts ja keine an. Ich will nur das das ganze versendet wird und nicht wenn man auf senden drückt das da ne neue seite aufgerufen wird mit den eingegebenen daten.
      Hier nochmal der Link zum Kontaktformular Klick mich ^^

      LG
      Serai ;)

    2. echo $begrüßung;

      » » $Straße = htmlspecialchars($Straße);
      $Straße  -> Was stimmt daran nicht?

      Damit ist alles in Ordnung. Die Syntax-Hervorhebung dieses Forums ist diesbezüglich fehlerhaft. Ansonsten sind auch alle Werte von 7F bis FF als Variablennamenbestandteil erlaubt. In Regexp-Syntax ausgedrückt: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*

      echo "$verabschiedung $name";

  2. echo $begrüßung;

    [... Probleme ...] Woran kann das nur liegen?

    Was hast du an grundlegenden Debuggingversuchen bereits unternommen? An welcher Stelle stimmen Wunsch und Wirklichkeit nicht mehr überein? Kontrollausgaben mit echo oder besser mit var_dump() und ein auf E_ALL gestelltes error_reporting (und display_errors auf on) sind Grundlagen zur Fehlersuche unter PHP. Da du diese Grundlagen immer wieder brauchst, nehme ich dir auch nicht die Möglichkeit, jetzt Erfahrung damit zu sammeln. Allerdings habe ich ein paar allgemeine Anmerkungen.

    function entferneSlashesArray($a) {

    Nimm lieber die Funktion aus dem Handbuch-Kapitel Disabling Magic Quotes. Die arbeitet nur, wenn es wirklich erforderlich ist. Außerdem wendest du deine Funktion zu spät an, nachdem du bereits einige Verarbeitungsschritte ausgeführt hast und unbehandelte Werte anderswo gelandet sind.

    $Anrede = (isset($_POST["Anrede"]) && is_string($_POST["Anrede"])) ?
                          $_POST["Anrede"] : "";

    Die Inhalte im POST-Array sind immer vom Typ String. Die is_string()-Prüfung ist überflüssig. Den Fall, dass Werte nicht gesetzt sind, fängst du ja mit isset() ab.

    $ok = false;
    $fehlerfelder = array();
    if (isset($_POST["submit"])) {
      $ok = true;
      if (!isset($_POST["Anrede"]) ||
          !is_string($_POST["Anrede"]) ||
          $_POST["Anrede"] == "0") {
        $ok = false;
        $fehlerfelder[] = "Anrede";
      }

    Noch eine Prüfung? Du kannst beide kombinieren.

    $betreff = isset($_POST["Kontaktformular"]) ? $_POST[$betreff] : "";
    $nachricht = isset($_POST["body"]) ? $_POST["body"] : "";

    if (!empty($_POST["Cc"]))   {
             $header .="\r\nCc:" . $_POST["Cc"];
       }
    if (!empty($_POST["Bcc"])) {
             $header .="\r\nBcc:" . $_POST["Bcc"];
    }

    Hier fehlen Prüfungen. Wenn in den Werten, die in Headerzeilen landen sollen (Empfänger, Betreff und Header), Zeilenumbrüche enthalten sind, kannst du die Verarbeitung grußlos beenden, denn dann handelt es sich mit Sicherheit um einen Bot, der über dein derzeit für Mail-Header-Injection anfälliges Formular Spam versenden möchte.

    echo "$verabschiedung $name";

    1. morgen dedlfix

      »» Was hast du an grundlegenden Debuggingversuchen bereits unternommen?

      ich bin kein pro in php ich hab seit 1 woche erst angefangen. Ich hab mir das buch php 5.1 besorgt und da stehen die meisten beispielcodes drin unter anderem auch wie ich ein Formular programmiere. Doch das Buch erklärt nicht wie ich das kontaktformular an eine email adresse automatisch verschicken kann. So hab ich das selbst versucht zu programmieren. Ich habe auch einige Bsp. im internet angeschaut doch die meisten sind unter copyright rechte oder funktionieren einfach nicht wenn ich sie  bei mir einfüge.

      LG Serai

      1. echo $begrüßung;

        » Was hast du an grundlegenden Debuggingversuchen bereits unternommen?
        ich bin kein pro in php ich hab seit 1 woche erst angefangen.

        Ja und? Du musst mir keine Ausrede oder deine Leidensgeschichte erzählen. Das Thema Debugging ist eins der wichtigsten beim Programmieren. Leider legen Bücher und Tutorials wenig Wert darauf. Beim Programmieren ergeben sich fast immer Fehler im ersten Wurf. Diese aufspüren zu können, ist eine notwendige Fähigkeit eines Programmierers. Also tu bitte in erster Linie dir einen Gefallen und übe damit. Fehlersuchen kann mitunter mühselig sein, weshalb du im Allgemeinen damit rechnen kannst, dass die Lust an freiwilliger Unterstützung mit zunehmender Codegröße abnimmt. Außerdem hat ein Anderer ein anderes Umfeld und nicht alle Fehler treten auch anderswo auf. Grenze also mit Kontrollausgaben den Fehler soweit ein, dass er sich mit wenigen Codezeilen beschreiben lässt, wenn du ihn dann nicht schon selbst gefunden hast.

        echo "$verabschiedung $name";

        1. ok da geb ich dir auch schon recht dabei das es wichtig ist und dazu zählt für ein programmierer. Aber wo anfangen mit fehler suche wenn man keinen schimmer hat ob man ein fehler gemacht hat?

          lg serai

          1. Mahlzeit Serai,

            ok da geb ich dir auch schon recht dabei das es wichtig ist und dazu zählt für ein programmierer. Aber wo anfangen mit fehler suche wenn man keinen schimmer hat ob man ein fehler gemacht hat?

            Z.B. bei den von dedlfix angesprochenen Einstellungen zu error_reporting() und display_errors(). Diese Arbeit kann und wird Dir keiner abnehmen.

            Des weiteren möchte ich zu dedlfix' Ausführungen noch ergänzend hinzufügen, dass das Lesen und Verstehen von Handbüchern und Dokumentationen (und damit meine ich ausdrücklich NICHT Lehrbücher!) absolute Grundlage ist.

            Wenn Du also auf bestimmte Funktionen und/oder Einstellungsmöglichkeiten hingewiesen wirst, dann informiere Dich dazu. Wenn Du konkrete Verständnisprobleme hast, äußere diese. Wenn Du die o.g. Funktionen dann nutzen kannst, tu das, um Dir selbst beim Debugging zu helfen.

            MfG,
            EKKi

            --
            sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
            1. Danke erstmal für die zahlreichen ratschläge! ;)
              Ich werde euren Rat erstmal befolgen ^^

              lg Serai;)

          2. echo $begrüßung;

            Aber wo anfangen mit fehler suche wenn man keinen schimmer hat ob man ein fehler gemacht hat?

            Du kannst vorwärts oder rückwärts suchen. Vorwärts: Dein Script fängt irgendwo an, Werte zu verarbeiten. Kontrolliere mit einer Ausgabe, ob die ankommenden Werte dem Erwarteten entsprechen und mit einer weiteren Ausgabe, ob das Ergebnis des Verarbeitungsschritts auch passt. So kannst du dich "nach unten" hin durcharbeiten, bis irgendwo etwas nicht mehr stimmt. Rückwärts: Du kennst eine Stelle, an der garantiert irgendetwas nicht mehr stimmt. Mach die Kontrollausgaben dort und beweg dich rückwärts zu der Stelle, an der die Abweichung auftritt.

            Wichtige Hinweise gab ich dir schon in meiner ersten Antwort:
            Stell zum Entwickeln immer das error_reporting auf E_ALL. PHP unterdrückt sonst Notice-Meldungen, die dir Zugriffe auf nicht existente Variablen anzeigen. Das passiert beispielsweise bei Tippfehlern. In der Produktivumgebung sollten die Fehlermeldungen ausgeschaltet sein, denn die gehen niemanden außer dem Entwickler etwas an.
            Kontrollausgaben gehen am einfachsten mit echo. Deutlich genauer ist die Ausgabe mit var_dump(). Übe mit beiden, auch mit Werten wie NULL, einer Integer-0, true und false oder einem Leerstring.

            echo "$verabschiedung $name";

            1. Hi,

              variabeln mit ß hätte ich nicht gedacht, wahrscheinlich weil mir nie im Sinn käme so einen Namen zu verpassen, dank für die Info.

              Wichtige Hinweise gab ich dir schon in meiner ersten Antwort:
              Stell zum Entwickeln immer das error_reporting auf E_ALL. PHP unterdrückt sonst Notice-Meldungen, die dir Zugriffe auf nicht existente Variablen anzeigen. Das passiert beispielsweise bei Tippfehlern. In der Produktivumgebung sollten die Fehlermeldungen ausgeschaltet sein, denn die gehen niemanden außer dem Entwickler etwas an.
              Kontrollausgaben gehen am einfachsten mit echo. Deutlich genauer ist die Ausgabe mit var_dump(). Übe mit beiden, auch mit Werten wie NULL, einer Integer-0, true und false oder einem Leerstring.

              Ich versetze mich gerade mal anno 1999, seit einer Woche beschäftige ich mich mit PHP, nun lese ich deine Abschnitt hier, ähhm neee is klar, bin  dann mal lieber ein Bier trinken;-)

              Oliver

      2. Hi,

        ich bin kein pro in php ich hab seit 1 woche erst angefangen....Ich habe auch einige Bsp. im internet angeschaut doch die meisten .....

        kennst du das auch schon?

        Es gibt leider nicht viele gute Bücher bei denen sich die Autoren noch in einen Anfänger hinein versetzen können. Da ich das jetzt so verstehe, dass du nur abtippst was im Buch steht ohne wirklich zu verstehen was du machst, würde ich ganz langsam Schritt für Schritt vorhgehen, also

        Erst mal eine Mail mit PHP  versenden mail(.....);

        Dann ein kleines Formular ohne grossartigen Pruefungen.
        formular: -> $name, $email -> versenden

        Ganz oben im Script reinschreiben: error_reporting(E_ALL);

        Mal sehen ob das dann soweit klappt und dann immer weiter....

        Oliver

  3. [latex]Mae  govannen![/latex]

    /*email daten*/
    $empfaenger = 'miau@gmail.fr';

    Hier setzt du einen festen Wert für $empfänger...

    $empfaenger = isset($_POST["To"]) ? $_POST["To"] : "";

    ...den du hier wieder überschreibst, allerdings wird der *ursprüngliche* Wert nie benutzt...

    $ergebnis = mail($empfaenger, $betreff, $nachricht, $header);

    ...und hier hast du somit eine wunderbare Massen-Spamschleuder für jeden gebaut, der ddem Script eine beliebige E-Mail-Adresse in $_POST["To"] übergibt.

    Losche die Zeile $empfaenger = isset($_POST["To"]) ? $_POST["To"] : ""; am Besten komplett und arbeite ausschließlich mit vorgegebenen Werten für $empfänger.

    Cü,

    Kai

    --
    „It's 106 miles to Chicago, we got a full tank of gas, half a pack of cigarettes, it's dark, and we're wearing sunglasses“.
    „Hit it!“
    Selfzeugs
    SelfCode: sh:( fo:| ch:? rl:( br:< n4:( ie:{ mo:| va:) js:| de:> zu:) fl:( ss:| ls:?