Layout

Lektion 4 - E-mail Versand II

Nun haben wir zwei Seiten und auf beiden steht nur ein wenig drin. Außerdem wird noch immer nicht überprüft, ob alle Felder ausgefüllt sind. Dies alles soll sich nun ändern.

 

4.1 if-Anweisung

Mit der if-Anweisung kann man Werte vergleichen, dafür gibt es einige Operatoren:

==
!=
<
>
<=
>=
ist gleich
ist nicht gleich
ist kleiner als
ist größer als
ist kleiner gleich als
ist größer gleich als

Der Aufbau der if-Anweisung ist Folgender:

$Zahl1 = 2;
$Zahl2 = 5;

if ($Zahl1 < $Zahl2) {

    // mach was

}

Innerhalb der Klammer nach if kommen die Werte, die verglichen werden soll. Dann öffnet sich eine geschweifte Klammer, hinter der du dann schreibst, was gemacht werden soll, wenn der Vergleich zutrifft. Manchmal kommt es auch vor, dass es nicht zutrifft, dann möchte man vielleicht etwas anderes ausgeben.

$Zahl1 = 2;
$Zahl2 = 5;

if ($Zahl1 == $Zahl2) {

    // mach was

} else {

    // mach was anderes

}

 

4.2 Anpassen des E-mail Formulars

Wir wollen zunächst aus den zwei Seiten des Formulars eine machen. Wenn man auf die Seite des Formulars geht, soll zunächst aber nichts passieren, erst, wenn man den Button klickt. Deshalb kommt die Anweisung zum Formular versenden innerhalb einer if-Anweisung. Am einfachsten ist es nun, wenn eine Variable einen Wert annimmt, sobald das Formular abgeschickt wird, und das geht z. B. über die URL zur Antwortseite. Deshalb ändere die URL im Form-Tag innerhalb action nun wie folgt:

index.php?Seite=formular.php&action=senden

Aus der Seite email_senden.php machst du formular.php, die Seite, auf der selbst das Formular ist. An die URL hängst du irgendeine weitere Variable, hier action, und übergibst ihr irgendeinen Wert, hier senden. Ruft ein Besucher die Seite formular.php aus deinem Menü auf, ist $action kein Wert zugewiesen, also ist $action nicht gleich senden. Schreibe die if-Anweisung nun überhalb deines Formulares.

if ($_GET['action'] == "senden") {

    $Mitteilung = "Absender: ".$_POST['Name']."\n".
        "E-mail: ".$_POST['E-mail']."\n\n".
        $_POST['Nachricht'];

    mail ("ich@eMail.de", $_POST['Betreff'], $Mitteilung, "From:                     ".$_POST['Name']." <".$_POST['E-mail'].">");

    echo "<p align='center'>Deine E-mail wurde erfolgreich versandt!</p>";
    $Gesendet = 1;

}

Sobald nun die URL der Antwortseite aufgerufen wird, wird das Skript innerhalb der geschweiften Klammern ausgeführt. Das Formular bleibt aber noch unten zu sehen, das muss aber nicht sein, deshalb fügen wir eine weitere Hilfsvariable innerhalb der if-Anweisung ein. Wenn die E-mail verschickt wurde, ist Gesendet gleich 1. Nun musst du dein Formular also auch in eine if-Anweisung packen.

if ($_GET['action'] == "senden") {

    // Verschicke eMail
   $Gesendet = 1;

}

if ($Gesendet != 1) {

    // Zeige das Formular an
    echo "<form ...> ...... </form>";

}

Nun kannst du damit auch schon überprüfen lassen, ob dein Besucher die Felder des Formulars ausgefüllt hat, denn hat er dies nicht, ist der Wert der Variablen zB $_POST['Betreff'] leer.

if ($_POST['Name'] == "") {
      echo "Gib deinen Namen ein!";
}

Nun, das bringt dir noch nicht viel. Nun weiß der Besucher zwar, dass er seinen Namen vergessen hat, aber verschickt wird das Formular dennoch. Deshalb ist eine weitere Hilfsvariable angebracht.

if ($_GET['action'] == "senden") {

      if ($_POST['Name'] == "") {
            echo "Gib deinen Namen ein!<br>";
           $Fehler = 1;
      }
      if ($_POST['E-mail'] == "") {
            echo "Gib deine E-mail Adresse an!<br>";
            $Fehler = 1;
      }
      if ($_POST['Betreff'] == "") {
            echo "Gib einen Betreff an!<br>";
            $Fehler = 1;
      }
      if ($_POST['Nachricht'] == "") {
            echo "Schreibe deine Nachricht!";
            $Fehler = 1;
      }

      if ($Fehler != 1) {

           $Mitteilung = "Absender: ".$_POST['Name']."\n".
                                "E-mail: ".$_POST['E-mail']."\n\n".
                                 $_POST['Nachricht'];

            mail ("ich@eMail.de", $_POST['Betreff'], $Mitteilung,
                    "From:"
.$_POST['Name']." <".$_POST['E-mail'].">");

            echo "<p align='center'>Deine E-mail wurde erfolgreich versandt!</p>";
            $Gesendet = 1;
      }

}

 

4.3 AND und OR

Es geht aber einfacher! Du kannst if-Anweisungen auch verbinden, und zwar mit AND oder OR. Das kann manchmal ganz schön verschachtelt enden, von dem Klammerchaos ganz zu schweigen. Aber praktisch ist es dennoch.

$Zahl1 = 2;
$Zahl2 = 5;

if (($Zahl1 < 5) OR ($Zahl1 == $Zahl2)) {

    // Es wird was gemacht, weil 2 < 5

}

if (($Zahl1 < $Zahl2) AND ($Zahl1 == $Zahl2)) {

    // Es wird nichts gemacht, da eine Zahl nicht sowohl       kleiner als eine andere und auch die selbe sein kann.

}

Jeder Vergleich ist in seinen eigenen Klammern und alles zusammen ist noch einmal in den Klammern der if-Anweisung. Wenn du nun auf die Überprüfung der Formulardaten guckst, sehn diese sich doch sehr ähnlich. Schreibe den Code nun um.

if (($_POST['Name'] == "") OR ($_POST['E-mail'] == "") OR        ($_POST['Betreff'] == "") OR ($_POST['Nachricht'] == "")) {

    echo "Fülle alle Felder aus!";
    $Fehler = 1;

}

Nun ist so eine unformatiert kleine Ausgabe am linken Rand unschön, deshalb neige ich eher zu Javascript Meldungen, wenn etwas nicht stimmt. Ersetze die Textausgabe durch den Befehl echo "<script language='JavaScript'>alert('Fülle alle Felder aus!');</script>\n"; Wenn nun etwas falsch ist erscheint die Meldung und das Formular bleibt weiter zu sehen.

 

4.4 Erneute Ausgabe im Formular

Was ist nun, wenn dein Besucher dir eine seitenlange E-mail geschrieben hat, ihm aber kein Betreff eingefallen ist und er nicht wusste, dass es ohne nicht geht? Genau, die schöne E-mail ist futsch. Deshalb solltest du die Werte der Variablen dem Formular übergeben. Da diese am Anfang leer sind, wird zunächst erst nichts ausgegeben.

echo "<b>Name: </b>
<input type='text' name='Name' size='30' value='".$_POST['Name']."'><br>
<b>E-mail: </b>
<input type='text' name='E-mail' size='30' value='".$_POST['E-mail']."'><br>
<b>Betreff: </b>
<input type='text' name='Betreff' size='50' value='".$_POST['Betreff']."'><br>
<textarea name='Nachricht' cols='45' rows='15'>".$_POST['Nachricht']."</textarea>
<br><br>
<input type='submit' name='Abschicken' value='Abschicken'>
";

 

4.5 Trennung von HTML und PHP

Vielleicht hast du eine Webseite mit vielen Formularen und möchtest dich endlich vom kostenlosen Formularanbieter loslösen und alles selbst in die Hand nehmen. Und da du die erneute Ausgabe in den Formularen praktisch findest und das Formular nicht einfacherweise auf eine andere Seite weitergeleitet werden soll (wie in der vorherigen Lektion gezeigt), solltest du deinen PHP Code vom HTML Code trennen, damit du nicht alle Anführungszeichen, die dort nun drin sein werden, escapen musst. Das ist auch nicht sehr schwer. Der PHP Code ist in <?php ... ?> gebettet, und das kannst du auf deiner Seite so oft öffnen und schließen, wie du willst.

<html>
    <head>
        <title>Meine Webseite</title>
    </head>
    <body><p>Schreibe mir doch eine E-mail!</p>

<?php

  if ($action == "senden") {

      if ($_POST['Name'] == "") {
            echo "Gib deinen Namen ein!<br>";
           $Fehler = 1;
      }
      // Restliche Anweisungen

      if ($Fehler != 1) {
            // E-mail Versand
            echo "<p align='center'>Deine E-mail wurde erfolgreich verschickt</p>";
            $Gesendet = 1;
      }

  }

// Hier startet die Abfrage, ob die E-Mail schon versendet wurde

    if ($Gesendet != 1) {

?>

        <p>Fülle bitte alle Felder aus</p>

<?php

       echo "<form action='index.php?Seite=email_senden.php' method='POST'>

       <b>Name: </b>
       <input type='text' name='Name' size='30' value='".$_POST['Name']."'><br>
       <b>E-mail: </b>
        <input type='text' name='E-mail' size='30' value='".$_POST['E-mail']."'><br>
        <b>Betreff: </b>
        <input type='text' name='Betreff' size='50' value='".$_POST['Betreff']."'><br>
       <textarea name='Nachricht' cols='45' rows='15'>
       ".$_POST['Nachricht']."</textarea>
       <br><br>
        <input type='submit' name='Abschicken' value='Abschicken'>

       </form>";

?>

       <p>Ich werde dann auch ganz bestimmt antworten!</p>

    ...

<?php

    } // Hier endet die Abfrage, ob die E-Mail schon versendet wurde

?>

    </body>
</html>

Da diese Seite PHP Code enthält, musst du sie auch im *.php Format speichern.


hr

4.6 Übungen

4.6.1 Formuliere folgende if-Anweisung ohne Variablen:
Wenn 5 größer als 3 ist und 3 kleiner gleich 8, gib Die if-Anweisung trifft zu aus, ansonsten gib Die if-Anweisung trifft nicht zu aus.

4.6.2 * Als du alle Formularfelder auf ihren Inhalt einzeln überprüft hast, wurde der Variablen Fehler der Wert 1 zugeweisen, wenn ein Feld nicht ausgefüllt war. Traf dies nicht zu, wurde die E-mail verschickt. Warum ist die Hilfvariable $Fehler bei der Aneinanderreihung aller if-Abfragen mittels OR unnötig geworden? Schreibe den Quelltext um, dass er auch ohne diese Variable funktioniert.

4.6.3 * Wie müsste diese Anweisung innerhalb if ($_GET['action'] == "senden") { ... } aussehen, wenn du nicht überprüfen wolltest, ob etwas in den Formularfeldern drin steht, sondern ob sie alle nicht leer sind. Wenn sie alle nicht leer sind, soll die E-mail verschickt werden, ansonsten soll eine Fehlermeldung ausgegeben werden.

4.6.4 Erweiter das Formular um die Texteingabe Webseite und lasse den Inhalt in die E-Mail einfügen.

4.6.5 Schreibe das komplette Formular und füge es auf deiner Webseite ein.

4.6.6 Mit Hilfe der if-Anweisung bekommst du die Eingangsfehlermeldung auf der Startseite weg. Versuche das zu realisieren. Bedenke, dass der Variablen $_GET['Seite'] zu Beginn noch kein Wert zugewiesen wurde und der Inhalt ein leerer String ist.

* Solltest du mit diesen Aufgaben nicht klar kommen, kannst du mich nach einem Tipp fragen, doch versuche es zunächst selbst zu lösen.
« zurück Inhalt | Fragen       Kurs weiter »
Layout