k-senden1.php
k-senden1.php
Die Variablen müssen je nach Verwendungszweck zum Teil unterschiedlich verarbeitet werden.
Für die Anzeige in HTML auf dem Bildschirm müssen zum Beispiel die Umlaute in den HTML Code umgewandelt werden, was beim Senden per E-Mail aber Fehler erzeugen würde.
Auch die Weiterleitung der Variablen an die Datei
k-senden2.php
erfordert eine spezielle Umwandlung.
Die Befehle zur Ausführung der Verarbeitung werden mit PHP gegeben.
Wenn die E-Mail Adresse des Absenders nicht angegeben wurde, kann der Anwender zwischen "Zurück" zum Eingabeformular oder "Senden" wählen.
Zum Senden werden die Variablen mit einem, für den Anwender nicht
sichtbaren Formular, an die Datei k-senden2.php
weitergeleitet.
<?php ... ?>
Prinzip
Wenn beim Formular <form ... method="post">
angegeben wurde,
werden die Variablen als "POST"-Variablen gesendet.
Wenn beim Formular <form ... method="get">
angegeben wurde,
werden die Variablen als "GET"-Variablen gesendet.
Da wir im Dokument "normale" Variablen verwenden möchten, müssen diese gesendeten Variablen in "normale" Variablen umgewandelt werden.
Code: $... = $_POST ['...'];
Befehl: $k_name = $_POST ['k_name'];
Wandelt die "Post"-Variablen in "normale" Variablen um.
$_POST ['k_name']
Die mit der Post-Methode an diese Datei
gesendeten Variablen sind Post-Variablen.
$k_name
Dies ist eine (umgewandelte) "normale" Variable.
// Variablen umwandeln $k_name = $_POST ['k_name']; $k_email = $_POST ['k_email']; $k_betreff = $_POST ['k_betreff']; $k_mitteilung = $_POST ['k_mitteilung'];
Code: trim
Befehl: $k_name = trim($k_name);
Wenn diese Leerzeichen nicht entfernt werden, wird ein Feld mit Leerzeichen nicht als leer erkannt, da als Inhalt diese Leerzeichen sind.
In einem Formular soll auch eine Fehlermeldung kommen, wenn als Inhalt nur Leerzeichen sind.
// Leerzeichen entfernen $k_name = trim($k_name); $k_email = trim($k_email); $k_betreff = trim($k_betreff); $k_mitteilung = trim($k_mitteilung);
Grundlagen und Workshops
Code: stripslashes("Zeichenkette")
Befehl: $k_name = stripslashes($k_name);
// Backslash entfernen $k_name = stripslashes($k_name); $k_email = stripslashes($k_email); $k_betreff = stripslashes($k_betreff); $k_mitteilung = stripslashes($k_mitteilung);
Grundlagen und Workshops
Zweck
// Alle Variablen zum Senden "s" $sk_name = $k_name; $sk_email = $k_email; $sk_betreff = $k_betreff; $sk_mitteilung = $k_mitteilung;
Zweck
Für die Sendung per E-Mail sind nur 3 Varablen zulässig.
Die Daten sind aber in 4 Variablen.
In der Variablen "Absender" werden daher die beiden Variablen "Name" und "E-Mail" zusammengefasst.
// Neue Variable zum senden von Absender $sk_absender = "$sk_name $sk_email";
Zweck
// Alle Variablem für Anzeige "a" $ak_name = $k_name; $ak_email = $k_email; $ak_betreff = $k_betreff; $ak_mitteilung = $k_mitteilung;
Code: htmlentities("Zeichenkette")
Diese Funktion wandelt alle in einer Zeichenkette enthaltenen Sonderzeichen inkl. Umlaute in die entsprechende HTML-Codes um.
Oder anders ausgedrückt: Wandelt alle alle Zeichen, die eine HTML-Code-Entsprechung haben, in diese Entsprechung um.
Konstanten:
ENT_COMPAT
Konvertiert nur doppelte Anführungszeichen
und lässt einfache Anführungszeichen unverändert.
ENT_QUOTES
Konvertiert sowohl doppelte als auch einfache
Anführungszeichen.
ENT_NOQUOTES
Lässt doppelte und einfache
Anführungszeichen unverändert.
Befehl: $ak_name = htmlentities($ak_name,ENT_QUOTES);
Wandelt alle Sonderzeichen, die als Steuercode missverstanden werden könnten, in den HTM-Code dieser Zeichen um.
Der Befehl erstellt eine neue Variable mit dem gleichen Namen der alten Variablen.
In den neuen Variablen sind alle Sonderzeichen in deren HTML-Code umgewandelt. Dieser HTML-Code zeigt das Sonderzeichen in einem HTML-Dokument korrekt an, kann aber als Steurezeichen keine Funktion mehr ausführen.
// Sonderzeichen umwandeln $ak_name = htmlentities($ak_name,ENT_QUOTES); $ak_email = htmlentities($ak_email,ENT_QUOTES); $ak_betreff = htmlentities($ak_betreff,ENT_QUOTES); $ak_mitteilung = htmlentities($ak_mitteilung,ENT_QUOTES);
Grundlagen und Workshops
Code: nl2br("Zeichenkette")
Befehl: $ak_mitteilung = nl2br($ak_mitteilung);
Zeilenumbrüche richtig anzeigen.
Durch diesen Code wird eine modifizierte Zeichenkette zurückgegeben,
in der Zeilenumbrüche durch den entsprechenden HTML-Tag
<br>
ersetzt sind.
Anders ausgedrückt: Dieser Code fügt bei allen
Zeilenumbrüchen den HTML-Tag <br>
ein,
damit der Zeilenumbruch auch ausgeführt wird.
// Zeilenumbrüche richtig anzeigen $ak_mitteilung = nl2br($ak_mitteilung);
Grundlagen und Workshops
Zweck
// Alle Variablen zur Weiterleitung "w" $wk_name = $k_name; $wk_email = $k_email; $wk_betreff = $k_betreff; $wk_mitteilung = $k_mitteilung;
Code: htmlentities("Zeichenkette")
Diese Funktion wandelt alle in einer Zeichenkette enthaltenen Sonderzeichen inkl. Umlaute in die entsprechende HTML-Codes um.
Oder anders ausgedrückt: Wandelt alle alle Zeichen, die eine HTML-Code-Entsprechung haben, in diese Entsprechung um.
Konstanten:
ENT_COMPAT
Konvertiert nur doppelte Anführungszeichen
und lässt einfache Anführungszeichen unverändert.
ENT_QUOTES
Konvertiert sowohl doppelte als auch einfache
Anführungszeichen.
ENT_NOQUOTES
Lässt doppelte und einfache
Anführungszeichen unverändert.
Befehl: $wk_name = htmlentities($wk_name,ENT_QUOTES);
Wandelt alle Sonderzeichen, die als Steuercode missverstanden werden könnten, in den HTM-Code dieser Zeichen um.
Der Befehl erstellt eine neue Variable mit dem gleichen Namen der alten Variablen.
In den neuen Variablen sind alle Sonderzeichen in deren HTML-Code umgewandelt. Dieser HTML-Code zeigt das Sonderzeichen in einem HTML-Dokument korrekt an, kann aber als Steurezeichen keine Funktion mehr ausführen.
// Sonderzeichen umwandeln $wk_name = htmlentities($wk_name,ENT_QUOTES); $wk_email = htmlentities($wk_email,ENT_QUOTES); $wk_betreff = htmlentities($wk_betreff,ENT_QUOTES); $wk_mitteilung = htmlentities($wk_mitteilung,ENT_QUOTES);
Grundlagen und Workshops
// Kontrolle ob Name angegeben if ($k_name != "" ) { $xk_name = true;} else {$xk_name = false;} // Meldung bei fehlendem Namen if ( !$xk_name) { echo '<h4 style="margin-top:3em"> Ihr Name fehlt</h4> <p> <span class="sprache"> please indicate your name / donnez votre nom s.v.p. </span></p> <p>→ Drücken Sie bitte "Zurück" und geben Sie im Eingabeformuar Ihren Namen an.</p>'; echo '<input type="button" value="Zurück / back / retour" onClick="history.back()">'; }
// Kontrolle ob E-Mail falsch ist $leng = strlen($k_email ); $posa = strrpos($k_email, "@"); $posp = strrpos($k_email, "."); if ( $posp > 4 && $posa > 0 && substr_count($k_email,"@")==1 && $leng-$posp < 6 && $leng-$posp > 2 && $posp-$posa > 2 ) { $xk_email = true;} else { if ( $leng == 0 || $Email=='optional') { $xk_email = true;} else { $xk_email = false; } } // Meldung bei fehlerhafter E-Mail Adresse // aber mit Checkwort if ( !$xk_email) { echo ' <h4 style="margin-top:3em"> Fehler in der E-Mail Adresse</h4> <p> <span class="sprache"> error in your e-mail address / erreur dans votre adresse mél</span></p> <p>→ Drücken Sie bitte "Zurück" und kontrollieren Sie im Eingabeformular Ihre E-Mail Adresse.</p>'; echo '<input type="button" value="Zurück / back / retour" onClick="history.back()">'; }
Wenn kein Eintrag im diesem Feld gemacht wurde erscheint eine Meldung und ein "Zurück"-Knopf, damit dies im Eingabeformular nachgeholt werden kann.
Bei einem Feld mit Eintrag ist der Wert "true".
Bei leerem Feld ist der Wert "false".
// Kontrolle ob der Betreff angegeben wurde if ($k_betreff != "" ) { $xk_betreff = true;} else {$xk_betreff = false;} // Meldung bei fehlendem Betreff if ( !$xk_betreff) { echo '<h4 style="margin-top:3em"> Der Betreff fehlt</h4> <p> <span class="sprache"> the reference is missing / la référence manque</span></p> <p>→ Drücken Sie bitte "Zurück" und ergänzen Sie das Eingabeformular.</p>'; echo '<input type="button" value="Zurück / back / retour" onClick="history.back()">'; }
Wenn kein Eintrag im diesem Feld gemacht wurde erscheint eine Meldung und ein "Zurück"-Knopf, damit dies im Eingabeformular nachgeholt werden kann.
Bei einem Feld mit Eintrag ist der Wert "true".
Bei leerem Feld ist der Wert "false".
// Kontrolle ob eine Mitteilung gemacht wurde if ($k_mitteilung != "") { $xk_mitteilung = true;} else {$xk_mitteilung = false;} // Meldung bei fehlender Mitteilung if ( !$xk_mitteilung) { echo '<h4 style="margin-top:3em"> Die Mitteilung fehlt</h4> <p> <span class="sprache">there is no message / il n′y a pas de message</span></p> <p>→ Drücken Sie bitte "Zurück" und ergänzen Sie das Eingabeformular.</p>'; echo '<input type="button" value="Zurück / back / retour" onClick="history.back()">'; }
Wenn dieses Feld leer ist, erscheint eine Meldung und ein "Zurück"-Knopf, damit dies im Eingabeformular wenn gewünscht nachgeholt werden kann.
Es wird aber angegeben, dass die Angabe der E-Mail Adresse nicht unbedingt erforderlich ist und das Mail trotzdem gesendet werden kann.
Bei einem Feld mit Eintrag ist der Wert "true".
Bei leerem Feld ist der Wert "false".
// Kontrolle ob im E-Mail Feld etwas steht if ($k_email != "") { $yk_email = true;} else {$yk_email = false;} // Meldung bei leerem E-Mail Feld if (!$yk_email) { echo ' <h4 style="margin-top:3em"> Ihre E-Mail Adresse ist nicht angegeben (fakultativ)</h4> <p>Ihr Eintrag kann aber auch aufgenommen werden, wenn Ihre E-Mail Adresse nicht angeben ist.</p> <p> <span class="sprache"> your e-mail address is not indicated (optional) / votre adresse mél n′est pas indiquée (en option)</span></p> '; echo ' <input type="button" value="Zurück zum Eingabeformular / back to the form / retour au formulaire" onClick="history.back()"> '; }
Alle Kontrollen sind positiv verlaufen.
Es ist eine Absender E-Mail Adresse angegeben, die den Plausibilitätstest bestanden hat.
if ( $xk_name && $xk_email && $yk_email && $xk_betreff && $xk_mitteilung ){
Das Mail wird an die E-Mail Adresse des Autors geschickt.
Es können maximal 3 Variable geschickt werden; je eine für "Betreff", "Mitteilung" und "Absender".
// Mail senden mail("alfred@brandenberger.eu", "$sk_betreff", "$sk_mitteilung", "$sk_absender");
Nach dem Senden des E-Mails wird der Text der gesendeten Mitteilung und eine Sende-Bestätigung auf dem Bildschirm des Anwenders angezeigt.
Dieser Text wird auf dem Server nicht gespeichert.
// Mitteilung anzeigen echo " <h3 style='margin-top:3em'> Sie haben dem Autor folgendes Mail geschickt:</h3> <table border='1px' cellspacing='1' cellpadding='3'> <tr> <th>Absender</th> <td width='350'>$ak_name</td> </tr> <tr> <th>Ihre E-Mail Adresse</th> <td>$ak_email</td> </tr> <tr> <th>Betreff</th> <td>$ak_betreff</td> </tr> <tr> <th>Mitteilung</th> <td>$zak_mitteilung</td> </tr> </table> <h4> - Besten Dank! - </h4> "; } ?>
Zweck
Manuelle und nicht automatische Zustellung:
Dies könnte automatisch erfolgen, hat aber den grossen Nachteil, dass Anwender eine fremde Mail Adresse angeben kann und somit Mails über dieses System veschicken könnte, ohne dass der Absender klar erkennbar ist.
Wenn im Eingabeformular dieses Feld markiert wird, wird dem Empfänger eine Mitteilung zugefügt, damit die Zustellung der Kopie manuell gemacht wird.
<!-- Kopie senden --> <?php if ( $xk_name && $xk_email && $yk_email && $xk_betreff && $xk_mitteilung && $k_kopie ){ // Mail senden mail("alfred@brandenberger.eu", "Kopie senden an $sk_name betreffend $sk_betreff", "$sk_mitteilung", "$sk_absender"); // Mitteilung anzeigen echo " <h4 style='margin-top:3em'> Sie werden eine Kopie dieses Mails an Ihre E-Mail Adresse erhalten.</h4> <p>(Die Weiterleitung erfolgt manuell, da mit dieser Vorrichtung sonst Spam verschickt werden könnte. Die Kopie wird also nicht umgehend zugestellt.) "; } ?>
Zuerst werden die Variablen in ein verstecktes Formular eingelesen.
Mit diesem Formular können anschliessend die Variablen an ein
Dokument k-senden2.php
zum Senden weitergeleitet werden.
Beginn des Formulars mit den eingebetteten PHP-Befehlen:
<!-- Variablen in verstecktes Formular einlesen --> <form action="../kontakt/k-senden2.php" method="post"> <input type="hidden" name="wk_name" value="<? echo $wk_name ?>"> <input type="hidden" name="wk_email" value="<? echo $wk_email ?>"> <input type="hidden" name="wk_betreff" value="<? echo $wk_betreff ?>"> <input type="hidden" name="wk_mitteilung" value="<? echo $wk_mitteilung ?>">
Alle Kontrollen sind positiv verlaufen.
Das Feld "E-Mail" ist leer (Wert="false").
<?php if ( $xk_name && $xk_email && !$yk_email && $xk_betreff && $xk_mitteilung ){ ...
Eine Senden-Taste wird angezeigt.
Wenn diese Taste gedrückt wird, werden die Angaben mit der
"Post"-Methode an die Datei k_senden2.php
weitergeleitet.
.... echo ' <h2> Zum Senden</h2> <h3> Drücken Sie "Senden":</h3> <p> <span class="sprache">push the submit button / appuyez sur la touche envoyer</span></p> <input type="submit" value="Senden / submit / envoyer">'; }
Ende des Formulars mit den eigebetteten PHP-Befehlen:
?> </form>
k-senden1.php
Pfad: /kontakt/k-senden1.php
Der Quelltext ist im Stammverzeichnis dieser Website abgelegt.
<?php /* Allgemeine Variablen Verarbeiten */ // Variablen umwandeln $k_name = $_POST ['k_name']; $k_email = $_POST ['k_email']; $k_betreff = $_POST ['k_betreff']; $k_mitteilung = $_POST ['k_mitteilung']; $k_kopie = $_POST ['k_kopie']; // Leerzeichen entfernen $k_name = trim($k_name); $k_email = trim($k_email); $k_betreff = trim($k_betreff); $k_mitteilung = trim($k_mitteilung); // Backslash entfernen $k_name = stripslashes($k_name); $k_email = stripslashes($k_email); $k_betreff = stripslashes($k_betreff); $k_mitteilung = stripslashes($k_mitteilung); /* Variablen Zum Senden */ // Alle Variablen zum Senden "s" $sk_name = $k_name; $sk_email = $k_email; $sk_betreff = $k_betreff; $sk_mitteilung = $k_mitteilung; // Neue Variable zum senden von Absender $sk_absender = "$sk_name $sk_email"; /* Variablen für Anzeige */ // Alle Variablen für Anzeige $ak_name = $k_name; $ak_email = $k_email; $ak_betreff = $k_betreff; $ak_mitteilung = $k_mitteilung; // Sonderzeichen umwandeln $ak_name = htmlentities($ak_name,ENT_QUOTES); $ak_email = htmlentities($ak_email,ENT_QUOTES); $ak_betreff = htmlentities($ak_betreff,ENT_QUOTES); $ak_mitteilung = htmlentities($ak_mitteilung,ENT_QUOTES); // Zeilenumbrüche richtig anzeigen $ak_mitteilung = nl2br($ak_mitteilung); /* Variablen zum Weiterleiten */ // Alle Variablen zur Weiterleitung "w" $wk_name = $k_name; $wk_email = $k_email; $wk_betreff = $k_betreff; $wk_mitteilung = $k_mitteilung; // Sonderzeichen umwandeln $wk_name = htmlentities($wk_name,ENT_QUOTES); $wk_email = htmlentities($wk_email,ENT_QUOTES); $wk_betreff = htmlentities($wk_betreff,ENT_QUOTES); $wk_mitteilung = htmlentities($wk_mitteilung,ENT_QUOTES); /* Kontrollen und Meldungen */ // Kontrolle ob Name angegeben if ($k_name != "" ) { $xk_name = true;} else {$xk_name = false;} // Meldung bei fehlendem Namen if ( !$xk_name) { echo '<h4 style="margin-top:3em"> Ihr Name fehlt</h4> <p> <span class="sprache"> please indicate your name / donnez votre nom s.v.p. </span></p> <p>→ Drücken Sie bitte "Zurück" und geben Sie im Eingabeformuar Ihren Namen an.</p>'; echo '<input type="button" value="Zurück / back / retour" onClick="history.back()">'; } // Kontrolle ob E-Mail falsch ist $leng = strlen($k_email ); $posa = strrpos($k_email, "@"); $posp = strrpos($k_email, "."); if ( $posp > 4 && $posa > 0 && substr_count($k_email,"@")==1 && $leng-$posp < 6 && $leng-$posp > 2 && $posp-$posa > 2 ) { $xk_email = true;} else { if ( $leng == 0 || $Email=='optional') { $xk_email = true;} else { $xk_email = false; } } // Meldung bei fehlerhafter E-Mail Adresse // aber mit Checkwort if ( !$xk_email) { echo ' <h4 style="margin-top:3em"> Fehler in der E-Mail Adresse</h4> <p> <span class="sprache"> error in your e-mail address / erreur dans votre adresse mél</span></p> <p>→ Drücken Sie bitte "Zurück" und kontrollieren Sie im Eingabeformular Ihre E-Mail Adresse.</p>'; echo '<input type="button" value="Zurück / back / retour" onClick="history.back()">'; } // Kontrolle ob der Betreff angegeben wurde if ($k_betreff != "" ) { $xk_betreff = true;} else {$xk_betreff = false;} // Meldung bei fehlendem Betreff if ( !$xk_betreff) { echo '<h4 style="margin-top:3em"> Der Betreff fehlt</h4> <p> <span class="sprache"> the reference is missing / la référence manque</span></p> <p>→ Drücken Sie bitte "Zurück" und ergänzen Sie das Eingabeformular.</p>'; echo '<input type="button" value="Zurück / back / retour" onClick="history.back()">'; } // Kontrolle ob eine Mitteilung gemacht wurde if ($k_mitteilung != "") { $xk_mitteilung = true;} else {$xk_mitteilung = false;} // Meldung bei fehlender Mitteilung if ( !$xk_mitteilung) { echo '<h4 style="margin-top:3em"> Die Mitteilung fehlt</h4> <p> <span class="sprache">there is no message / il n′y a pas de message</span></p> <p>→ Drücken Sie bitte "Zurück" und ergänzen Sie das Eingabeformular.</p>'; echo '<input type="button" value="Zurück / back / retour" onClick="history.back()">'; } // Kontrolle ob im E-Mail Feld etwas steht = true if ($k_email != "") { $yk_email = true;} else {$yk_email = false;} // Meldung bei leerem E-Mail Feld = false if (!$yk_email) { echo ' <h4 style="margin-top:3em"> Ihre E-Mail Adresse ist nicht angegeben (fakultativ)</h4> <p>Das Mail kann aber auch gesendet werden, wenn Ihre E-Mail Adresse nicht angeben ist.</p> <p> <span class="sprache"> your e-mail address is not indicated (optional) / votre adresse mél n′est pas indiquée (en option)</span></p> '; echo ' <input type="button" value="Zurück zum Eingabeformular / back to the form / retour au formulaire" onClick="history.back()"> '; } /* Senden und anzeigen, wenn E-Mail angegeben ist */ //Bedingung if ( $xk_name && $xk_email && $yk_email && $xk_betreff && $xk_mitteilung ){ // Mail senden mail("alfred@brandenberger.eu", "$sk_betreff", "$sk_mitteilung", "$sk_absender"); // Mitteilung anzeigen echo " <h3 style='margin-top:3em'> Sie haben dem Autor folgendes Mail geschickt:</h3> <table border='1px' cellspacing='1' cellpadding='3'> <tr> <th>Absender</th> <td width='350'>$ak_name</td> </tr> <tr> <th>Ihre E-Mail Adresse</th> <td>$ak_email</td> </tr> <tr> <th>Betreff</th> <td>$ak_betreff</td> </tr> <tr> <th>Mitteilung</th> <td>$ak_mitteilung</td> </tr> </table> <h4> - Besten Dank! - </h4> "; } /* Kopie senden */ if ( $xk_name && $xk_email && $yk_email && $xk_betreff && $xk_mitteilung && $k_kopie ){ // Mail senden mail("alfred@brandenberger.eu", "Kopie senden an $sk_name betreffend $sk_betreff", "$sk_mitteilung", "$sk_absender"); // Mitteilung anzeigen echo " <h4 style='margin-top:3em'> Sie werden eine Kopie dieses Mails an Ihre E-Mail Adresse erhalten.</h4> <p>(Die Weiterleitung erfolgt manuell, da mit dieser Vorrichtung sonst Spam verschickt werden könnte. Die Kopie wird also nicht umgehend zugestellt.) "; } ?> <!-- Weiterleiten, wenn das E-Mail Feld leer ist --> <!-- Variablen in verstecktes Formular einlesen --> <form action="../kontakt/k-senden2.php" method="post"> <input type="hidden" name="wk_name" value="<? echo $wk_name ?>"> <input type="hidden" name="wk_email" value="<? echo $wk_email ?>"> <input type="hidden" name="wk_betreff" value="<? echo $wk_betreff ?>"> <input type="hidden" name="wk_mitteilung" value="<? echo $wk_mitteilung ?>"> <!-- Wenn alles richtig ist: zum speichern senden --> <?php if ( $xk_name && $xk_email && !$yk_email && $xk_betreff && $xk_mitteilung ){ echo ' <h2> Zum Senden</h2> <h3> Drücken Sie "Senden":</h3> <p> <span class="sprache">push the submit button / appuyez sur la touche envoyer</span></p> <input type="submit" value="Senden / submit / envoyer">'; } ?> </form>↑