{{indexmenu_n>150}} ====== "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: [[deutsch/phpwcms-system/artikel/contentparts/formular/spezielle-anwendungen/php-script-u-funktion]] \\ ---- ---- Docu: -- \\ Forum: -- **Autor:** [[http://planmatrix.de|K.Heermann]] //(flip-flop) (08.02.12)// \\ **CMS-Version:** >= V1.5.x r435 \\ **Version:** V1.0 //30.01.12// \\ **Bedingung:** -> [[http://www.phpwcms-docu.de/confincphp_de.phtml|/config/phpwcms/conf.inc.php]] \\ * $phpwcms['allow_ext_init'] = 1; ---- ---- \\ 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 [[deutsch/phpwcms-system/artikel/contentparts/formular/spezielle-anwendungen/e-mail-an_und_kopie-an#update_cp_formular_nach_v1.5_r435|Update CP Formular nach V1.5 r435]] \\ ===== 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. \\ - Nach dem Senden des Formulars, auslesen der POST Variablen des Optionsschalters, mit einem Script in /frontend_init/.. - 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 - Eintragen der gefundenen E-Mail-Adresse in die POST Variable für die endgültige E-Mail-Zieladresse. - (Ist keine gültige E-Mail vorhanden, wird ein Fehler produziert und das Formular verlangt im FE eine neue Eingabe). - Der geänderte Wert in der POST Variablen wird vom System weiterverarbeitet. \\ ===== Frontend ===== **Das einfache Formular mit einer Kopie an den Benutzer** {{:deutsch:phpwcms-system:artikel:contentparts:formular:spezielle-anwendungen:email_option_mit_post_var_u_kopie_an_fe02-1_1.gif|}} Ergebnis: {{:deutsch:phpwcms-system:artikel:contentparts:formular:spezielle-anwendungen:email_option_mit_post_var_u_kopie_an_fe02-1_ergebnis_1.gif|}} \\ **Das einfache Formular ohne eine Kopie an den Benutzer** {{:deutsch:phpwcms-system:artikel:contentparts:formular:spezielle-anwendungen:email_option_mit_post_var_u_kopie_an_fe02-2_1.gif|}} Ergebnis: {{:deutsch:phpwcms-system:artikel:contentparts:formular:spezielle-anwendungen:email_option_mit_post_var_u_kopie_an_fe02-2_ergebnis_1.gif|}} 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: {{:deutsch:phpwcms-system:artikel:contentparts:formular:spezielle-anwendungen:email_option_mit_post_var_u_kopie_an_be02_db_1.gif|}} //(Die Positionen 2 und 3 wurden mit dem oben gezeigten Frontend-Beispielen erzeugt)//. ~~UP~~ ===== Backend ===== Das einfache Formular im Backend. **Variante 01:** Optionsschalter {{:deutsch:phpwcms-system:artikel:contentparts:formular:spezielle-anwendungen:email_option_mit_post_var_u_kopie_an_be02_1.gif|}} 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 {{:deutsch:phpwcms-system:artikel:contentparts:formular:spezielle-anwendungen:email_option_mit_post_var_u_kopie_an_be02_v2_opt_1.gif|}} ~~UP~~ ===== 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: ====
[B]{LABEL:title}[/B] *[BR]{title}[BR][BR] [IF_ERROR]{ERROR:name}[/IF_ERROR][B]{LABEL:name}[/B] *[BR]{name}[BR][BR] [IF_ERROR]{ERROR:email}[/IF_ERROR][B]{LABEL:email}[/B] *[BR]{email}[BR][BR]
{ERROR:email_send_to}{email_send_to}
[IF_ERROR]{ERROR:email_option}[/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]{ERROR:nospam}[/IF_ERROR][B]{LABEL:nospam}[/B] *[BR]{nospam}[BR][BR] {submIt}
\\ ==== 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; } ~~UP~~ ===== 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. 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. \\ \\ ==== Update CP Formular nach V1.5 r435 ==== Dateien die erneuert werden müssen wenn die aktive Version < V1.5 r435 ist: //([[http://code.google.com/p/phpwcms/source/detail?r=435|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. \\