NAVIGATION
Eine Formulareingabe soll an eine auswählbare E-Mail-Adresse versendet werden, der Benutzer kann wählen ob er eine Kopie dieser E-Mail erhalten möchte.
Die E-Mail-Zieladresse soll über Optionsschalter bestimmt werden, nicht über das E-Mail-Ausklappmenü, was natürlich problemlos möglich wäre (In diesem Fall entfällt diese Anleitung).
Weshalb das ganz? Für den Benutzer ist die Auswahl der Ziel E-Mail-Adr. über Optionsschalter etwas einfacher zu handhaben als mit einem Pull-Down Menü.
Ganz speziell wird hier gezeigt, wie die Werte in $_POST verwendet werden können.
Siehe auch die Beispiele in: PHP-Script- u. Funktion
Docu: –
Forum: –
Autor: K.Heermann (flip-flop) (08.02.12)
CMS-Version: >= V1.5.x r435
Version: V1.0 30.01.12
Bedingung: → /config/phpwcms/conf.inc.php
<note>
Wird eine Version < V1.5.x r435 verwendet, kann die neue Funktion “E-Mail Kopie an/aus” durch einfügen der dazu notwendigen Dateien einer neueren Version genutzt werden.
Siehe Update CP Formular nach V1.5 r435
</note>
Voraussetzung im BE im CP Formular ist: [X] Datensatz speichern um die Daten später auswerten zu können.
Das einfache Formular mit einer Kopie an den Benutzer
Ergebnis:
Das einfache Formular ohne eine Kopie an den Benutzer
Ergebnis:
Für die Darstellung der Ergebnisse wird ein spezielles Script verwendet (noch nicht veröffentlicht).
Im Backend –> CP Formular über den Button Download abrufbar:
(Die Positionen 2 und 3 wurden mit dem oben gezeigten Frontend-Beispielen erzeugt).
Das einfache Formular im Backend.
Variante 01: Optionsschalter
Die PHP Funktion “my_form_on_success”_to bitte nicht eintragen. Dieses Script dient zur Ausgabe der Daten nach dem Absenden und ist nicht Bestandteil dieser Anleitung.
Variante 02: Optionsschalter
Standard:
[BR]Bitte füllen Sie das Formular aus und betätigen Sie den Knopf "Datei senden". Entscheiden sie vor dem Absenden im Feld "Kopie der E-Mail an mich senden", ob eine Kopie Ihrer Eingaben an Ihre E-Mailadresse gesendet werden soll.[BR][BR]
bei Erfolg:
[BR]Hallo {title} {name}, das Formular wurde erfolgreich versendet. [BR] [EMAIL_COPY][i](Sie erhalten eine Kopie dieser E-Mail an die Adresse: {email})[/i][/EMAIL_COPY]
Fehler:
[B]Ein FEHLER ist aufgetreten![/B]
Optionsschalter:
- Variante 01:
Müller [BR] -|- mail01 checked Meier [BR] -|- mail02 Schmidt[BR] -|- mail03
- Variante 02:
Müller [BR] -|- test01*lokal:arpa checked Meier [BR] -|- test02*lokal:arpa Schmidt[BR] -|- test03*lokal:arpa
Checkbox Kopie an/aus
-|-copy checked
Hallo {title} {name}, E-Mail: {email} Kommentar: ------------------------------ {comment} ------------------------------ Die E-Mail wurde gesendet an {email_send_to}. Das war alles - Danke.
<div style="width:500px; margin: 0; padding:10px; border:1px solid #bbb; background: #d6ffcf;"> [B]{LABEL:title}[/B] *[BR]{title}[BR][BR] [IF_ERROR]<span class="formError">{ERROR:name}</span>[/IF_ERROR][B]{LABEL:name}[/B] *[BR]{name}[BR][BR] [IF_ERROR]<span class="formError">{ERROR:email}</span>[/IF_ERROR][B]{LABEL:email}[/B] *[BR]{email}[BR][BR] <div style="display:none;">{ERROR:email_send_to}{email_send_to}</div> [IF_ERROR]<span class="formError">{ERROR:email_option}</span>[/IF_ERROR][B]{LABEL:email_option}[/B] *[BR]{email_option}[BR] [B]{LABEL:comment}[/B][BR]{comment}[BR][BR] {copy_me} [B]{LABEL:copy_me}[/B][BR][BR][BR] [IF_ERROR]<span class="formError">{ERROR:nospam}</span>[/IF_ERROR][B]{LABEL:nospam}[/B] *[BR]{nospam}[BR][BR] {submIt} </div>
input,textarea,select { font-family: "Courier New", "Trebuchet MS", Arial, Verdana, Helvetica; font-size: 10pt; color : #444444; border : 1px solid #c8c8c8; background-color : #f7f7f7; } .mathspam { /* Text */ font-size: 10pt; font-weight: normal; vertical-align: middle; padding: 0 0 4px 4px; } .mathspam .calc { font-weight: bold; }
Datei: template/inc_script/frontend_init/cp_form_post_send01.php
if ($aktion['0'] == 2) { // ID der Kategorie pruefen in dem sich der Formular-CP befindet
// ----------------------------------------------------------------------- $email = array( 'mail01' => 'test01@lokal.arpa', 'mail02' => 'test02@lokal.arpa', 'mail03' => 'test03@lokal.arpa' ); // -----------------------------------------------------------------------
Die Variante 01 hat gegenüber der Variante 02 den Vorteil, dass keine Manipulation der Empfänger E-Mail-Adr. möglich ist.
Der Nachteil: Die E-Mail-Adressen müssen im Script eingegeben werden.
<?php // ------------------------------------------------------------------------------------------- // obligate check for phpwcms constants if (!defined('PHPWCMS_ROOT')) {die("You Cannot Access This Script Directly, Have a Nice Day.");} // ------------------------------------------------------------------------------------------- /** ********************************************************************************************* * V1.0 30.01.12 K.Heermann http://planmatrix.de * * Manipulieren eines $_POST Wertes vor dem Senden und vor dem Eintrag in die DB * * Vorherige Abfrage ob eine bestimmte Kategorie aktiv ist * * Wird ein Eingabefeld das zwingend eine Eingabe verlangt geleert, wird ein * Fehler produziert und das Formular wiederholt dargestellt. * * Hier: Einsetzen einer E-Mail-Adresse durch die Steuerung ueber Radio-Buttons * mit der Hilfe einer Uebersetzungstabelle * Zuordnung der Kennung aus "Optinsschalter => E-Mail-Adr." ********************************************************************************************* */ if ($aktion['0'] == 2) { // ID der Kategorie pruefen in dem sich der Formular-CP befindet if( isset($_POST['email_option']) ) { // Festlegen der E-Mail-Adressen anhand des Wertes aus dem Optionsschalter // ----------------------------------------------------------------------- $email = array( 'mail01' => 'test01@lokal.arpa', 'mail02' => 'test02@lokal.arpa', 'mail03' => 'test03@lokal.arpa' ); // ----------------------------------------------------------------------- // Optionswert im Array enthalten? Wenn nicht dann Fehler und Rueckspung zur Formulareingabe if ( array_key_exists($_POST['email_option'], $email) ) { // str_replace('NOP', mixed replace, mixed subject, [int &count]) $_POST['email_send_to'] = $email[$_POST['email_option']]; } else // Fehler produzieren, wenn Wert aus Option nicht als Schluessel im Array enthalten $_POST['email_option'] = ''; // Alte Version bis V1.5 r434 danach nicht mehr notwendig, siehe r435 // --------------------------------------------------------------------------- // Wenn Schalter "Kopie an mich" gesetzt, dann E-Mail-Adr. uebernehmen /* if( isset($_POST['copy_me']) ) $_POST['email_copy_me'] = $_POST['email']; else // Wenn Schalter nicht gesetzt, dann nach noreply $_POST['email_copy_me'] = 'noreply@lokal.arpa'; */ // --------------------------------------------------------------------------- } } ?>
Datei: template/inc_script/frontend_init/cp_form_post_send02.php
if ($aktion['0'] == 2) { // ID der Kategorie pruefen in dem sich der Formular-CP befindet
// ---User input ----------------------- // Pruefteilstring, der in jeder E-Mailadresse vorkommen muss $test_str = 'al.arpa'; // -------------------------------------
Der Vorteil gegenüber Variante 01 besteht darin, dass die E-Mail-Adressen in verfremdeter Form im Formular im Backend eingetragen werden können. Im Script muss lediglich ein Teilstring der E-Mail-Adressen eingegeben werden, der in jeder E-Mail identisch ist, um vor manipulierten Adressen zu schützen. Die Variante 01 ist allerdings die manipulationfeste Lösung, mit dem Nachteil der Scripteingabe für die E-Mail-Adressen.
<?php // ------------------------------------------------------------------------------------------- // obligate check for phpwcms constants if (!defined('PHPWCMS_ROOT')) {die("You Cannot Access This Script Directly, Have a Nice Day.");} // ------------------------------------------------------------------------------------------- /** ********************************************************************************************* * V2.0 30.01.12 K.Heermann http://planmatrix.de * * Manipulieren eines $_POST Wertes vor dem Senden und vor dem Eintrag in die DB * * Vorherige Abfrage ob eine bestimmte Kategorie aktiv ist * * Wird ein Eingabefeld das zwingend eine Eingabe verlangt geleert, wird ein * Fehler produziert und das Formular wiederholt dargestellt. * * Hier: Einsetzen einer E-Mail-Adresse durch die Steuerung ueber Radio-Buttons * mit der Hilfe einer zusammengesetzten E-Mail-Adr.: text*domain:tld ********************************************************************************************* */ if ($aktion['0'] == 2) { // ID der Kategorie pruefen in dem sich der Formular-CP befindet if( isset($_POST['email_option']) ) { // ---User input ----------------------- // Pruefteilstring, der in jeder E-Mail-Adresse vorkommen muss $test_str = 'al.arpa'; // ------------------------------------- $email = ''; // text*domain:tld if (!empty ($_POST['email_option'])) { // text*domain:tld nach E-Mail wandeln $email = trim(preg_replace("!(^\w[\w|\.|\-]+)\*(\w[\w|\.|\-]+):([a-zA-Z]{2,4}$)!",'$1@$2.$3', trim($_POST['email_option'])) ); } // Optionswert ist eine E-Mail-Adr. und gueltig? Wenn nicht dann Fehler und Rueckspung zur Formulareingabe if ( !empty($email) AND is_valid_email($email) AND (strpos($email, $test_str) !== false) ) { $_POST['email_send_to'] = $email; } else // Fehler produzieren, wenn Wert aus Option keine gueltige E-Mail-Adr. (Ruecksprung zum Formular) $_POST['email_option'] = ''; } } ?>
Dateien die erneuert werden müssen wenn die aktive Version < V1.5 r435 ist: (V1.5 r435)
$form_cnt = $cnt_form['labelpos']== 2 ? render_device( $cnt_form['customform'] ) : '';
ersetzen durch:
$form_cnt = $cnt_form['labelpos']== 2 ? $cnt_form['customform'] : '';
* include/inc_lang/backend/de/lang.inc.php