Tutorials von Thomas Frei-Herrmann
Formular - Anzeige von Text nach dem Senden der Mail auf der gleichen Seite unter dem “Senden” Button
Ich erhalte eine Mail und nach dem Senden wird auf diese Seite zurückgekehrt. Lasst “Kopie an Benutzer” angehakt um die gleiche Mail selbst zu erhalten. Ihr dürft gerne testen - ich werde allerdings nicht antworten. Bitte wartet jeweils 10 Sekunden zwischen den Tests.
Weiterhin wird geprüft, ob das Anreise-Datum kleiner als das Abreise-Datum ist, sonst wird das Formular nicht gesendet und eine Fehlermeldung erscheint. Ich habe die Dropdown-Liste der Länder händisch erstellt, damit bei einem Fehler alle Eingaben erhalten bleiben.
Ich beschreibe hier ausschließlich die zusätzliche Prüfung auf die beiden Datums-Felder und das Feld Land. Für den Rest meiner Beschreibungen guckt bitte auf dieser Seite hier. Das Skript unten ist also gleich mit dem dieser Seite, allerdings um die Prüfung dieser Datums-Felder erweitert. Alles was diese Datums-Überprüfung betrifft, habe ich im Skript gelb markiert, alles was das Feld “Land” betrift habe ich blau markiert.
Diese Seite mit dem Formular unter > “Bearbeiten” > “Benutzerdefinierte Namen” auf die Dateierweiterung .php stellen.
Das Mail-Skript (unten) mit Euren Daten ändern und in die Layout-HTML dieser gleichen Seite kopieren.
Hier haben meine Formular-Felder die Feldnamen: Name, Land, E-Mail, An- und Abreise und Nachricht und für die Checkbox als Feldname “UserSend”
Layout markieren > Fenster “Layout-Eigenschaften” > “Beginn der Seite” (keine Leerzeile oben lassen) einfügen
<?php
// SESSION auf dieser Seite öffnen - solange das auf der gleichen Seite stattfindet, könnte man auch eine einfache Variable nehmen.
@session_start();
$timenow=time();
if (isset($_POST['action']) && ($_POST['action']=='send')) {
// SESSION-Variablen für die zu erhaltende Anzeige mit Post-Variablen ersetzen
$_SESSION['Name']=htmlentities($_POST['Name'],ENT_QUOTES);
// Mit IF-Bedingungen feststellen welches Land bereits gewählt war und die SESSION-Variable ‘Auswahl’ für die Dropdown-Liste gründen
if ($_POST['Land']=="Deutschland") {
$_SESSION['Auswahl']="Deutschland";
}
if ($_POST['Land']=="Österreich") {
$_SESSION['Auswahl']="Österreich";
}
if ($_POST['Land']=="Schweiz") {
$_SESSION['Auswahl']="Schweiz";
}
$_SESSION['E-Mail']=htmlentities($_POST['E-Mail'],ENT_QUOTES);
$_SESSION['Anreise']=htmlentities($_POST['Anreise'],ENT_QUOTES);
$_SESSION['Abreise']=htmlentities($_POST['Abreise'],ENT_QUOTES);
$_SESSION['Nachricht']=htmlentities($_POST['Nachricht'],ENT_QUOTES);
// Spam-Kontrolle nur auf die Zeit, eventuell die Sekunden höher setzen
if (($timenow-$_POST['zeit'])<=10) { // 10, 20, .... - sind die Sekunden für eine einfache Spam-Kontrolle
// SESSION-Variable auch hier setzen, damit die Länder in Dropdown-Liste bei Spam-Angriff nicht mehrfach angezeigt werden
$_SESSION['Auswahl']="keine";
/* SPAM ANGRIFF - nichts wird gesendet und es wird auf diese Formular-Seite zurückgekehrt, falls keine 10 Sekunden gewartet */
} else {
// Beginn Überprüfung der beiden Datums-Felder, wobei das Abreise-Datum > Anreise-Datum sein soll, sonst Abbruch
// SESSION-Variable gründen zur Abfrage, ob die Datums-Eingabe korrekt war
$_SESSION['richtig']="JA";
// Rechen-Variable gründen aus dem Inhalt des 1. Datums-Feldes (Anreise)
$var1 = $_POST['Anreise'];
// Inhalt des 1. Datums-Feldes in Tag, Monat, Jahr zerlegen
$day1 = substr($var1,0,2);
$month1= substr($var1,3,2);
$year1 = substr($var1,6,4);
// Variable gründen, die den UNIX-Timestamp als Wert zurück gibt
$timestamp1 = mktime(0,0,0, $month1, $day1, $year1);
// Rechen-Variable gründen aus dem Inhalt des 2. Datum-Feldes (Abreise)
$var2 = $_POST['Abreise'];
// Inhalt des 2. Datums-Feldes in Tag, Monat, Jahr zerlegen
$day2 = substr($var2,0,2);
$month2= substr($var2,3,2);
$year2 = substr($var2,6,4);
// Variable gründen, die den UNIX-Timestamp als Wert zurück gibt
$timestamp2 = mktime(0,0,0, $month2, $day2, $year2);
// Wenn Abreise-Datum kleiner als Anreise-Datum abbrechen
if ($timestamp2 < $timestamp1) {
// Bei falscher Datums-Eingabe SESSION-Variabel umsetzen und zum Formular zurückkehren
$_SESSION['richtig']="NEIN";
// SESSION-Variablen für Fehler-Meldung als ALERT-Fenster gründen
$_SESSION['Startdatum']=$_POST['Anreise'];
$_SESSION['Enddatum']=$_POST['Abreise'];
// hier wird auf die Seite weitergeleitet, auf der dieses Formular eingebaut ist - bei mir also auf die gleiche Seite “index.php”
header ('location: ./index.php');
exit;
}
// Ende Überprüfung der Datums-Felder
// SESSION-Variable zur Anzeige, wenn das Formular gesendet wurde
$_SESSION['AnzeigeAufSeite']="JA";
$admin = 'Webmaster@DeineDoamin.de';
$useremail = $_POST['E-Mail'];
// diese Zeile unten mit Deiner Message beschreiben, die in der Betreff-Zeile der Mail erscheinen soll.
$Msg = "Mail von meiner Formular-Seite";
// diese Zeile unten mit Der Message für die Kopie an User beschreiben, die in der Betreff-Zeile der Mail erscheinen soll
$UserMsg = "Guten Tag, dies ist eine Kopie Deiner Nachricht an Tommy";
// Inhalt der Mail als Variable “UserData”, der Punkt verbindet die Zeilen zu einer Variable, die als Inhalt der Mail gesendet wird.
$UserData = "Name: " . $_POST["Name"] . "\r\n";
$UserData .= "Land: " . $_POST["Land"] . "\r\n";
$UserData .= "e-Mail: " . $_POST["E-Mail"] . "\r\n";
$UserData .= "Buchung vom: " . $_POST["Anreise"] . "\r\n";
$UserData .= "Buchung bis: " . $_POST["Abreise"] . "\r\n";
$UserData .= "Nachricht: " . $_POST["Nachricht"] . "\r\n\r\n";
$UserData .= "Vielen Dank für diese Nachricht, ich werde nicht antworten";
// Mail an Absender senden, wenn dieser das angehakt hatte (bei "From:" noch Deine korrekte Mail-Adresse als Absender eintragen)
if (isset($_POST['UserSend']) && ($_POST['UserSend']=='on'))
{
mail($useremail, $UserMsg, $UserData, "From:Webmaster@DeineDomain.de");
}
// Mail an Webmaster senden
mail($admin, $Msg, $UserData, "From:$useremail");
// SESSION-Variablen nach erfolgreichem Senden leer setzen
$_SESSION['Name']=htmlentities('',ENT_QUOTES);
$_SESSION['Ort']=htmlentities('',ENT_QUOTES);
$_SESSION['E-Mail']=htmlentities('',ENT_QUOTES);
$_SESSION['Anreise']=htmlentities('',ENT_QUOTES);
$_SESSION['Abreise']=htmlentities('',ENT_QUOTES);
$_SESSION['Nachricht']=htmlentities('',ENT_QUOTES);
$_SESSION['Auswahl']="keine";
// hier wird auf die Seite weitergeleitet, auf der dieses Formular eingebaut ist - bei mir also auf die gleiche Seite “index.php”
@header("location: ./index.php");
exit;
}
}
?>
Bitte stellt Eure Arbeitsfläche auf “Fortgeschritten”.
> Menü oben > Ansicht > Arbeitsfläche > Fortgeschritten
damit Ihr im Fenster “Eingabefeld-Eigenschaften <input>”, bei “value” (Wert), die PHP-ECHO Befehle eintragen könnt.
Ich habe hier in jedes dieser Eingabefelder, außer beim Feld “Land”, den dazugehörigen ECHO-Befehl eingetragen
(wie im Screenshot unten zu erkennen), also bei dem Feld “Anreise” dann z.B.:
<?php echo $_SESSION['Anreise'];?>
Ich setze also damit, die im Skript oben gegründeten SESSION-Variablen als Wert in diese Felder, sodass die Einträge bei einer Rückkehr ohne einen Mail-Versand, Abbruch im Skript wegen falscher Datums-Eingabe, nicht verloren gehen und erneut geschrieben werden müssten.
... unten noch ein Screenshot von den Eingabefeld-Eigenschaften des Datum-Feldes “Anreise”. Man könnte den PHP-Befehl auch gleich an dieser Stelle eintragen, nur manchmal (warum auch immer) übernimmt NOF dann diesen Inhalt nicht als “value” (Wert).
Um ein bereits gewähltes Land auch noch nach der Rückkehr, wegen falscher Datums-Eingabe, zu erhalten, musste ich diese
Dropdown-Liste händisch erstellen und die von NOF generierte SELECT-Anweisung auskommentieren mit <!-- auskommentiert -->
> Fenster “Auswahlfeld-Eigenschaften” > Button “HTML” > NOF-Skript auskommentieren > eigenes Skript “vor dem Tag” einfügen
<select id="Land" name="Land" style="height: 24px;">
<?php
// Diese Bedingung zunächst setzen, damit beim Aufruf der Seite auch schon die Auswahl angezeigt wird
if ($_SESSION['richtig'] <> "NEIN") {
echo '<option value="Deutschland">Deutschland</option>';
echo '<option value="Österreich">Österreich</option>';
echo '<option value="Schweiz">Schweiz</option>';
}
// Die unteren Bedingungen treten ein, wenn ohne senden auf das Formular zurückgekehrt wird
if($_SESSION["Auswahl"] == "Deutschland") {
echo '<option value="Deutschland">Deutschland</option>';
echo '<option value="Österreich">Österreich</option>';
echo '<option value="Schweiz">Schweiz</option>';
}
if($_SESSION["Auswahl"] == "Österreich") {
echo '<option value="Österreich">Österreich</option>';
echo '<option value="Deutschland">Deutschland</option>';
echo '<option value="Schweiz">Schweiz</option>';
}
if($_SESSION["Auswahl"] == "Schweiz") {
echo '<option value="Schweiz">Schweiz</option>';
echo '<option value="Deutschland">Deutschland</option>';
echo '<option value="Österreich">Österreich</option>';
}
?>
</select>
<!--
<select id="Land" name="Land" style="height: 24px;"
>
<option value="Deutschland" selected="selected">Deutschland</option>
<option value="Österreich">Österreich</option>
<option value="Schweiz">Schweiz</option>
</select>
-->
... unten noch ein Screenshot von der “Objekt-HTML” der Dropdown-Liste “Land”.
Ganz unten auf meiner Seite habe ich mir dann noch ein Textfeld aufgezogen in das ich das kleine Skript unten in den
HTML-Code-Editor dieses Textfeldes kopiert habe. Wenn also die SESSION-Variable ‘richtig’ im Skript oben auf “NEIN” gesetzt wurde, weil die Datums-Eingabe falsch war, dann wird durch dieses Skript ein Javascript “ALERT” Fenster aufgehen mit dem Hinweis auf die falsche Eingabe.
<?php
if ($_SESSION['richtig'] == "NEIN") {
echo '<script type="text/javascript">';
// ALERT Fenster anzeigen mit den SESSION-Variablen der Datums-Felder
echo 'alert("Das Abreise-Datum '. $_SESSION['Enddatum'].' ist früher als das Anreise-Datum '. $_SESSION['Startdatum'].'")';
echo '</script>';
// SESSION schließen
session_destroy();
}
?>
Für weitere Erklärungen, wie jene zum “ALERT” Befehl und/oder einer zusätzlichen Fehler-Anzeige, könnt Ihr in diesem Tutorial hier nachlesen. Nach Umstellung auf PHP 5.6 werden die Umlaute in der Mail falsch dargestellt.
Viel Erfolg !