"E-Mail an" und "Kopie an"

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

  • $phpwcms['allow_ext_init'] = 1;



<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>


Beispielaufgabe:

  • Das genaue E-Mail-Ziel an den Seitenbetreiber (TO) kann vom User per Optionsschalter ausgewählt werden.
  • Der User kann per Checkbox bestimmen, ob eine Kopie der E-Mail (CC) an ihn selbst gesendet wird.
  • Der Datensatz soll für eine spätere Auswertung gespeichert werden.

Voraussetzung im BE im CP Formular ist: [X] Datensatz speichern um die Daten später auswerten zu können.


  1. Nach dem Senden des Formulars, auslesen der POST Variablen des Optionsschalters, mit einem Script in /frontend_init/..
  2. Prüfen ob die Auswahl im angelegten Array “Optionswert ⇒ E-Mail” vorhanden ist (Variante 01).
    • Alternativ Variante 02: Wandeln des verfremdeten Optionswerts in eine E-Mail-Adr. und prüfen ob ein bestimmter Teilstring in jeder E-Mail-Adr. vorhanden ist
  3. Eintragen der gefundenen E-Mail-Adresse in die POST Variable für die endgültige E-Mail-Zieladresse.
  4. (Ist keine gültige E-Mail vorhanden, wird ein Fehler produziert und das Formular verlangt im FE eine neue Eingabe).
  5. Der geänderte Wert in der POST Variablen wird vom System weiterverarbeitet.


Frontend

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).


Datenbankeintrag

Im Backend –> CP Formular über den Button Download abrufbar:

(Die Positionen 2 und 3 wurden mit dem oben gezeigten Frontend-Beispielen erzeugt).

Backend

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

Backend-Code

Texte:

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


Empfänger-Vorlage:

Hallo {title} {name},

E-Mail: {email}

Kommentar:
------------------------------
{comment}
------------------------------

Die E-Mail wurde gesendet an {email_send_to}.


Das war alles - Danke.

Vorlage:

Vorlage

<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>


CSS:

css

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;
}

PHP-Funktion

Variante 01

Datei: template/inc_script/frontend_init/cp_form_post_send01.php

  • Das Script verlangt die Kategorie-ID in der sich der Artikel bzw. CP befindet um nicht jedes Formular zu untersuchen.
    if ($aktion['0'] == 2) {  // ID der Kategorie pruefen in dem sich der Formular-CP befindet
  • Das Array für die Zuordnung der Kennung zur E-Mail muss an Ihre E-Mail-Adressen angepasst oder erweitert werden.
    		// -----------------------------------------------------------------------
    		$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.

cp_form_post_send01.php

<?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';
*/
// ---------------------------------------------------------------------------
 
    }
}
 
?>


Variante 02

Datei: template/inc_script/frontend_init/cp_form_post_send02.php

  • Das Script verlangt die Kategorie-ID in der sich der Artikel bzw. CP befindet um nicht jedes Formular zu untersuchen.
    if ($aktion['0'] == 2) {  // ID der Kategorie pruefen in dem sich der Formular-CP befindet
  • Ein Prüf-Teilstring der E-Mail-Adr. muss angepasst werden. Dieser String verhindert das Absenden einer manipulierten E-Mail-Adr.
    		// ---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.

cp_form_post_send02.php

<?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'] = '';
 
    }
}
 
 
?>



Update CP Formular nach V1.5 r435

Dateien die erneuert werden müssen wenn die aktive Version < V1.5 r435 ist: (V1.5 r435)

  • include/inc_front/content/cnt23.article.inc.php
    • Wenn die Release kleiner r427 ist:
      Zeile 49
      $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

  • include/inc_lang/backend/en/lang.inc.php
  • include/inc_lib/content/cnt23.readform.inc.php
  • include/inc_tmpl/content/cnt23.inc.php
  • Wenn die Release kleiner r427 ist kann eine Funktion aus einer neuen Datei (>= r427) include/inc_front/front.func.inc.php in die vorhandene kopiert werden. Dadurch entfällt der oben gezeigte Patch.
    Es handelt sich um die Funktion “function render_device($string)” (am Ende der Datei) Dieser Codeabschnitt sollte in die vorhandene Datei front.func.inc.php übernommen werden.


deutsch/phpwcms-system/artikel/contentparts/formular/spezielle-anwendungen/e-mail-an_und_kopie-an.txt · Last modified: 2018/06/03 18:08 (external edit)
www.planmatrix.de www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0